主题:IMX6ULL系列学习记录-使用busybox1.31.1制作根文件系统
硬件平台:野火IMX6ULL
软件:ubuntu19.04
交叉编译器:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
U-Boot:uboot-imx-rel_imx_4.1.15_2.1.0_ga
kernel:linux-imx-rel_imx_4.1.15_2.1.0_ga
devicetree:imx6ull-14x14-evk.dts
time:2019-11-13
1. 目的:使用busybox1.31.1制作根文件系统
根据之前的学习记录,从uboot->kernel、devicetree都已经做好了,但是没有根文件系统板子始终不能正常运行,所以根文件系统是必不可少的。
2. 过程:
2.1 从官网下载最新busybox官方下载地址,这里我选择了最新的busybox1.31.1,然后使用tar xvf busybox.1.31.tar.bz2
解压。
2.2 修改Makefile
2.2.1 第164行修改成如下方式
2.2.2 第190行修改成如下方式
2.3 界面配置make menuconfig
2.3.1 Settings —>
[ * ] Don’t use /usr* (选择 【 * 】表示选中,要选择,这里不要使用/usr )
(arm-linux-gnueabihf-) Cross compiler prefix ( 输入交叉编译器,我的是arm-linux-gnueabihf-,要看自己的编译器是啥,要是不知道什么是交叉编译器应该看不到这篇博客 )
( . ./rootfs_test) Destination path for ‘make install’(表示最后生成的根文件路径在哪,rootfs_test要提前创建)
[*] vi-style line editing commands (使用vi风格)
2.3.2 Linux Module Utilities —>
[ ] Simplified modutils (不要选择)
2.3.3 Linux System Utilities —>
[ * ] mdev (17 kb) (一定要选择)
2.4 编译并安装
make -j4;make install
之后在上一级目录rootfs_test中可以看到sbin bin linuxrc
四个目录,然后手动创建其余目录 mkdir dev etc lib mnt proc root sys tmp usr
2.5 库文件配置
应用程序运行需要一些必备的库,而且应用程序想在嵌入式arm上运行是需要交叉编译器进行编译的,因此库就是交叉编译器自带的库。
2.5.1 找到交叉编译器安装位置
arm-linux-gnueabihf-gcc -v 之后就可以看到交叉编译器路径
1 sudo cp /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib rootfs_test/lib/ -a
2 sudo cp /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib rootfs_test/lib/ -a
3 sudo cp /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr rootfs_test -a
2.6 etc目录配置
- 1 vim fstab 并输入这些内容
# device mount-point type options dump fsck order
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
- 2 vim inittab并输入这些内容
# /etc/inittab
# 启动脚本/etc/init.d/rcS
::sysinit:/etc/init.d/rcS
# 启动 shell
::askfirst:-/bin/sh
# 重启关机前 卸载文件系统
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
- 3 mkdir init.d;vim init.d/rcS并输入这些内容
# 这是一个脚本文件,用/bin/sh解析
#!/bin/sh
# 挂载文件系统
mount -a
# 使用内存文件系统
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
# 设置IP
#/sbin/ifconfig eth0 192.168.1.17 #nfs不需要
# 挂载 /etc/fstab 中的文件系统
mount -a
3. 根文件系统测试
在uboot中修改bootargs参数: setenv bootargs "init=/linuxrc console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.5.210:/home/wr/rootfs/rootfs_test ip=192.168.5.188:192.168.5.210:192.168.5.1:255.255.255.0::eth0:off";saveenv
这里需要注意的是,我是使用nfs挂载,大家也可以直接烧入emmc中。