有道云笔记地址:
详情看这里链接,记录太多,就不一一排版了。
一、根文件系统构建的学习路线
(2).每做一步就用NFS去挂载,观察启动后的现象,然后理论分析原因。
二、busybox的移植实战
busybox:嵌入式开发中的瑞士军刀(提供嵌入式中linux中的各种小工具,小命令,比如像ls、pwd命令等),一般这个文件官方会给出,或者直接在网上找一份也是可以的,然后放到虚拟机中进行解压,配置编译。
BusyBox 的官方网站是:http://www.busybox.net/
我们下面就以busybox-1.24.1.tar.bz2为例来讲解一下 BusyBox 的编译安装过程。
注意:因为当你决定了用什么版本的交叉编译器来编译内核时,文件系统中的所有程序也要使用同样的交叉编译器来编译。
我们的根文件系统目录:/root/porting_x210/rootfs/rootfs
在根文件系统目录下创建Aliya_rootfs文件,将该压缩包解压到这里。
(2) CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-
//不用像内核中make defconfig那样需要很多的配置
(make install实际上是在执行 busybox顶层目录的 install)
./include/config/feature/install
make install在所有的linux下的软件中作用都是安装软件。
在传统的linux系统中安装软件时都是选择源代码方式安装的。我们下载要安装的软件源代码,然后配置、编译、安装。
make install的目的就是将编译生成的可执行程序及其依赖的库文件、配置文件、头文件安装到当前系统中指定(一般都可以自己指定安装到哪个目录下,如果不指定一般都有个默认目录)的目录下
(1)make编译中遇到问题:sync.c:(.text.sync_main+0x78): undefined reference to `syncfs’
sync.c:(.text.sync_main+0x78): undefined reference to `syncfs’
//这个错误很可能是gcc和当前busybox版本不兼容造成的。
使用命令find -name "sync.c"去找到这个sync.c,在他的目录下寻找makefile,发现没有
但是有Kbuild文件(有点类似Makefile),打开Kbuild,在Kbuild将 lib+= sync.o 一项中,可以看到config的选项
去menuconfig中 ,搜索SYNC,就找到了。禁用sync即可
linuxrc -> bin/busybox//这个linuxrc其实就是个符号链接
我们的根文件系统目录:/root/porting_x210/rootfs/rootfs
Installation Options (“make install” behavior) —>
/root/porting_x210/rootfs/rootfs
8.设置bootargs挂载添加了busybox移植的rootfs
(1)之前建立了一个空的文件夹然后自己touch linuxrc随便创建了一个不能用的/linuxrc然后去nfs挂载rootfs,实验结果是:挂载成功,执行/linuxrc失败。
(2)现在我们移植了busybox后/linuxrc就可以用了,然后再次去nfs挂载这个rootfs。预计看到的效果是:挂载成功,执行/linuxrc也能成功。
(3)注意uboot的bootargs设置成:setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
(4)上节NFS挂载的步骤已经做过,这里只需要在串口终端中TFTP下载zImage即可。
挂载成功,执行/linuxrc(也就是busybox)成功,未提示linuxrc错误。
但是因为找不到/etc/init.d/rcS和/dev/tty2等文件所以一直在打印错误提示信息,但是其实有进入命令行。
三、inittab配置文件详解
(1)将提供的典型的inittab文件复制到我们制作的rootfs的根目录下的/etc/目录下