【1】嵌入式Linux移植流程
windows:
BIOS(引导系统)---> windowns镜像---> 驱动移植---> 文件系统
Linux:
bootloader(uboot2013)---> Linux内核(linux3.14)---> 驱动移植---> 文件系统(rootfs)
【2】指令
1)readelf
查看对象文件的属性或内容(对象文件:可重定向文件 .o 可共享文件 .so 可执行文件)
readelf -h + filename
2)as主要用来编译gcc输出的汇编文件
as test.s -o test.o
3)size列出目标文件每一段的大小以及总体的大小
size + filename
4)nm可以列出目标文件中的符号
B 未初始化数据段
D 已经初始化的变量的符号
T Text段的符号。子程序都是这种符号
U 未定义的符号,该符号在当前文件中未定义
C 未初始化的符号,比如定义了一个全局变量int a;则a的符号就是这种类型,被其他文件所引用
R 只读符号 const修饰
5)strip用来丢弃目标文件中的全部或者特定符号,减小文件体积
6)strings用来打印某个文件的可打印字符串
strings + xxx.o
7)
objdump可以显示一个或者更多目标文件的信息,主要用来反汇编
objdump -d main > main.dis
8)
objcopy可以进行目标文件格式转换
objcopy -O binary main main.bin
9)addr2line能够把程序地址转换为文件名和行号
addr2line 0x080483f1 -e main -f
【3】交叉编译工具-跨平台编译
在开发主机运行编译器编译内核、应用程序。内核和程序在目标机上运行,这个编译过程称为交叉编译
【4】搭建环境
tftp 是用来下载远程文件的最简单网络协议,它基于udp协议而实现。
嵌入式 linux 的 tftp 开发环境包括两个方面:
一是 linux 开发主机端的 tftp-server 支持,
二是嵌入式目标系统的 tftp-client 支持
使用条件是:
需要网络连接
主机端需要安装 tftp 服务器软件,只需要配置tftp服务器主机端
目标机需要实现tftp客户端
tftp服务器主机端配置:
1)检测是否安装
dpkg -s tftpd-hpa
2)安装
sudo apt-get install tftpd-hpa tftp-hpa
3)
sudo vi /etc/default/tftpd-hpa 更改主机端配置
TFTP_USERNAME="tftp" tftp服务器的名字
TFTP_DIRECTORY="/tftpboot" tftp传输目录,自行创建 sudo mkdir tftpboot
修改权限 sudo chmod 777 tftpboot
TFTP_ADDRESS="0.0.0.0:69" 端口号 netstat -an | more
TFTP_OPTIONS="-c -s -l" tftp服务器配置参数 -c create 可创建
-s server
-l listen 监听
4)启动服务器
sudo service tftpd-hpa restart
5)运行下面命令,新建一个文件,并将其移动到TFTP服务器的默认下载上传下载文件夹tftpboot
$echo "tftp test" > test.txt
$sudo mv test.txt /tftpboot
6)运行下面指令,从服务器上下载test.txt文件,并退出tftp程序
$ tftp localhost
tftp> get test.txt
tftp> q
7)如果tftp的下载不成功,运行下列指令卸载软件(连同配置信息一起),然后再重装TFTP服务器
$sudo apt-get remove --purge tftp-hpa tftp-hpa
$sudo apt-get install tftp-hpa tftp-hpa
sudo service tftp-hpa restart
NFS 服务主要的任务是把本地的一个目录通过网络导出,其他计算机可以远程访问该目录
使用条件是: 需要网络连接
主机端需要 nfs 服务器软件支持,只需要配置服务器主机端
目标机同样需要支持nfs
NFS服务器主机端:
1) NFS服务器安装
sudo apt-get install nfs-kernel-server
2) nfs服务器主机端配置:
sudo vi /etc/exports
添加:/source/rootfs/ *(rw,sync,no_subtree_check,no_root_squash)
其中:
/source: 共享目录 自行创建 sudo mkdir source
修改权限 sudo chmod 777 source
*:不限定客户端
rw:共享目录可以读写
sync: 同步写入内存和硬盘
no_subtree_check : 如果子目录可以共享,那么不检查父目录的权限
no_root_squash : 如果客户端是root的话,那么他对这个目录具有root的权限
3)重新启动nfs服务器主机端:
sudo /etc/init.d/nfs-kernel-server restart
设置启动参数:
#目标板输入以下指令:
setenv serverip 192.168.31.161
setenv ipaddr 192.168.31.123
setenv bootcmd tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000
setenv bootargs root=/dev/nfs nfsroot=192.168.31.161:/source/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.31.123