一、系统移植的概述
【1】目的:
1、软硬件可裁剪:硬件发生变化,软件要进行裁剪,适配硬件。
2、学习linux驱动的开发,前提开发板上需要运行linux系统。移植linux内核系统到开发板上。
【2】掌握:
1、编译的流程
2、配置的流程
【3】步骤(linux和windows的对比):
1、环境的搭建-----------U盘启动盘
2、u-boot移植 -----------BIOS
3、linux内核移植--------windows内核移植
4、根文件系统移植-----C盘移植
【4】PC和开发板的连接方式
1、串口:打印内核或者uboot源码的调试信息,下载程序
2、网线:通过网线下载程序,速度快
3、miniusb:当uboot不支持网卡驱动,使用miniusb下载程序,fastboot工具
二、安装交叉编译工具链
【1】系统移植 > 交叉编译工具链
【2】编译文件介绍:
1、.i:预处理文件
2、.s:汇编文件
3、.o:机器码文件:可以在linux中运行
4、.elf:可执行文件:需指定程序入口地址
5、.dis:反汇编文件
6、.bin:二进制文件:只有在开发板上才可以运行
【3】编译命令:
☆☆1、gcc编译:生成机器码,将(.s / .c)生成(.o)
arm-none-linux-gnueabi-gcc -c <.s或.c> -o <.o>
☆☆2、ld链接:将(.o)文件链接成可执行文件(.elf),指定程序入口地址
arm-none-linux-gnueabi-ld -Ttext=0x43c00000 <.o> -o <.elf>
3、objdump反汇编: 将(.elf)文件反汇编生成反汇编文件(.dis)
arm-none-linux-gnueabi-objdump -D <.elf> > <.dis>
☆☆4、objcopy二进制:将(.elf)文件生成二进制文件(.bin)
arm-none-linux-gnueabi-objcopy -O binary <.elf> <.bin>
5、nm: 查看可执行文件的符号表
arm-none-linux-gnueabi-nm <.elf>
6、size:查看可执行文件中各数据段的大小
arm-none-linux-gnueabi-size <.elf>
☆☆7、readelf : 查看可执行文件的头部信息
arm-none-linux-gnueabi-readelf -h <.elf>
☆☆8、strip:压缩可执行文件命令,删除符号表
arm-none-linux-gnueabi-strip <.elf>
☆☆9、addr2line:根据地址信息定位错误信息
arm-none-linux-gnueabi-addr2line -e <.elf> 0x43c01768 -a -f
常用于定位野指针或者空指针等错误信息引起的内核崩溃
三、安装tftp服务
【1】使用tftp服务通过网线下载程序到开发板上
【2】安装步骤:
1、检查是否安装了tftp服务
dpkg -s tftpd-hpa
2、安装tftp服务
ping www.baidu.com
sudo apt-get update
sudo apt-get install -f
sudo apt-get install tftpd-hpa tftp-hpa
3、配置tftp相关环境变量
cd ~
mkdir tftpboot
chmod 777 tftpboot
tftpboot文件夹的作用?
答:将需要下载的文件,放到tftpboot目录下,当使用tftp命令下载是,tftp命令会自动的到ubuntu的tftpboot目录下找对应的要下载的文件。
4、修改tftp的环境变量
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/linux/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-c -s -l"
5、重启tftp服务
sudo service tftpd-hpa restart
6、测试
tftp 127.0.0.1
tftp> put 文件名
---》 上传当前目录下的文件到tftpboot目录下
tftp> get 文件名
---》 从tftpboot目录下下载文件到当前目录下
tftp> q ---》退出tftp服务
四、安装NFS服务
【1】Network File System:通过网络的方式挂载根文件系统
【2】安装步骤:
1、检查ubuntu是否安装nfs服务
dpkg -s nfs-kernel-server
2、安装nfs服务
sudo apt-get install nfs-kernel-server
3、配置nfs相关环境变量
sudo vi /etc/exports
/home/linux/nfs/rootfs *(w,sync,no_subtree_check,no_root_squash)
4、在家目录下创建nfs文件
cd ~
mkdir nfs
chmod 777 nfs
tar -vxf rootfs-ok.tar.bz2
5、重启nfs服务
sudo service nfs-kernel-server restart
6、测试
sudo mount -t nfs 192.168.1.222:/home/linux/nfs/rootfs /mnt
sudo umount /mnt
五、bootloader
【1】1、概念:引导加载linux内核的启动,是所有启动程序的总称
2、u-boot / uboot:是bootloader的一种
【2】u-boot常用命令:要在倒计时结束前按任意键进入交互模式
1、help:帮助手册
2、loadb:
loadb 内存起始地址
使用kermit协议
3、go:启动程序
go 内存起始地址
4、printenv/print/pri:打印u-boot的环境变量
pri
baudrate :波特率
bootargs :自启动参数 (后边详细讲解)
bootcmd :自启动命令 (后边详细讲解)
bootdelay :启动倒计时时间
gatewayip :网关
ipaddr :开发板IP地址
netmask :子网掩码
serverip :ubuntu服务器的IP地址
5、增加环境变量
eg:
setenv board_name s5p6818
@ 注意:名字间不要有空格,名字和值之间的"="自动填充
saveenv @保存环境变量,如果不保存会掉电丢失
6、删除环境变量
setenv board_name
saveenv
7、修改环境变量
setenv bootdelay 10
saveenv
8、md:查看内存地址中的值
md 内存地址
9、nm:修改内存地址中的值
nm 内存地址
10、tftpboot/tftp:下载程序
11、ping:检查开发板与linux是否联通
【3】tftp的使用
1、步骤:
1)安装tftp服务
2)关闭windows防火墙
3)修改电脑的有线网卡为百兆全双工
控制面板 > 网络和 Internet > 网络和共享中心 > 更改适配器设置 > 以太网(PCIE)右键属性 > 网络窗口 >点击配置 > 高级窗口 > Speed & Duplex > 修改为:100MBPs Full Duplex > 确定
4)ubuntu IP地址的设置网段和windows的网段保持一致
设置开发板uboot中以下几个环境变量
gatewayip :网关
ipaddr :开发板IP地址
netmask :子网掩码
serverip :ubuntu服务器的IP地址
setenv gatewayip 192.168.1.1
setenv ipaddr 192.168.1.222
setenv netmask 255.255.255.0
setenv serverip 192.168.1.250
saveenv
5)测试是否可以ping通
FS6818# ping 192.168.1.250
成功:
Speed: 100, full duplex
Using dwmac.c0060000 device
host 192.168.1.250 is alive
2、使用tftp命令下载程序:
1)首先将.bin文件拷贝到~/tftpboot目录下
学习ARM阶段的代码,拷贝一个.bin文件到tftpboot。
2)tftp下载程序
FS6818# tftpboot 0x43c00000 interface.bin
或者
FS6818# tftp 0x43c00000 interface.bin
出现以下内容,表示下载成功:
Speed: 100, full duplex
Using dwmac.c0060000 device
TFTP from server 192.168.1.222; our IP address is 192.168.1.250
Filename 'interface.bin'.
Load address: 0x43c00000
Loading: T T T T T #
0 Bytes/s
done
Bytes transferred = 9032 (2348 hex)
FS6818#
注意:
T : 超时(TIMEOUT)
解决思路:
*1. 重启tftp服务即可,
sudo service tftpd-hpa restart
重启tftp服务的命令会经常使用到。
2. 检查开发板是否可以ping通ubuntu。
3)运行程序
FS6818# go 0x43c00000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)