Step 5: Prepare the Filesystem
A. 新建目标文件系统:
[maria@localhost qt]$ mkdir /home/maria/qt/rootfs -p
它相当于目标文件系统的根目录。
B. 编译busybox,将输出拷贝到目标文件系统:
make ARCH=arm CROSS_COMPILE=/opt/i686-arago-linux/usr/bin/arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=/opt/i686-arago-linux/usr/bin/arm-linux-gnueabihf- all
make ARCH=arm CROSS_COMPILE=/opt/i686-arago-linux/usr/bin/arm-linux-gnueabihf- install
使用busybox默认配置即可,不用修改它。
之前在《为AM335x移植Linux内核主线代码》系列里,制作busybox的时候使用了静态编译,动态编译无法运行,这是因为动态编译的_install/bin/busybox找不到装载器。
[maria@localhost bin]$ /opt/i686-arago-linux/usr/bin/arm-linux-gnueabihf-ldd --root ../../../rootfs.save busybox
libm.so.6 => /lib/libm.so.6 (0xdeadbeef)
ld-linux-armhf.so.3 => /lib/ld-linux-armhf.so.3 (0xdeadbeef)
libc.so.6 => /lib/libc.so.6 (0xdeadbeef)
解决的方法很简单,就是拷贝正确的装载器和库文件,放置在目标文件系统的正确位置即可,见接下来的步骤。
编译完成之后,将_install目录下的所有内容,拷贝到A步骤创建的rootfs下:
bin linuxrc sbin usr
C. 创建lib目录,拷贝库文件:
在目标文件系统的根目录下,创建lib目录;
一般这些库文件在交叉编译器安装目录下的libc里面,除了busybox需要的三个库文件之外,还有很多其他的库文件;
将这些库文件拷贝到lib目录中;
D. 创建etc目录,编辑需要的内容:
创建rc0.d、rc1.d、rc2.d、rc3.d、rc4.d、rc5.d、rc6.d、rcS.d八个目录;
将SDK开发包提供的文件系统中的etc/group、etc/passwd、etc/shadow三个文件拷贝过来;
将SDK开发包提供的文件系统中的etc/default/rcS文件拷贝过来;
将SDC开发包提供的文件系统中的etc/inittab文件拷贝过来;
将SDC开发包提供的文件系统中的etc/fstab文件拷贝过来;
将SDC开发包提供的文件系统中的etc/init.d/rc、/etc/init.d/rcS文件拷贝过来;
E. 创建dev、home、home/root、media、mnt、opt、proc、sys、var目录:
无需拷贝dev文件,因为内核会生成它们。
将目标文件系统拷贝到SD卡的rootfs分区,然后将SD插入目标板,上电运行,串口终端会出现启动信息,最终出现登陆提示符。这说明,Linux的runlevel 3已经可以正确运行了。
NOTE:将飞凌提供init.sysvinit拷贝到sbin目录下。
NOTE:将飞凌提供的ethtool拷贝到sbin目录下。
NOTE:将Graphics SKD编译出来的devmem2拷贝到sbin目录下。
NOTE:记得在lib下创建modules/3.18.4目录;
NOTE:这里要在rcS文件的倒数第二个非空行添加:
echo "mount -o remount,rw /dev/root"
mount -o remount,rw /dev/root
这样启动的时候就不用手动执行mount命令了。
文章评论(0条评论)
登录后参与讨论