Just Do It

BusyBox制作根系统文件

下载源码https://www.busybox.net/
本人这里使用的是1.22.1版本
解压
tar jxvf busybox-1.22.1.tar.bz2
修改顶层Makefile

cd busybox-1.22.1
vi Makefile

搜索CROSS_COMPILE ?=和ARCH ?=大约在164行和190行,修改为

CROSS_COMPILE ?= arm-none-linux-gnueabi-
ARCH ?= arm

方便之后编译

make menuconfig更改一些配置
我这里只修改了安装位置(如果不修改默认安装在busybox目录的install下)
选择
Busybox Settings —>
Installation Options (“make install” behavior) —>
(./_install) BusyBox installation prefix (NEW)
回车修改/home/user/work/nfs/rootfs
修改完保存
编译安装

make -j4
make install

安装完成后可以看到bin、 sbin、 usr 这 3 个目录和一个指向 busybox 可执行文件的软链接 linuxrc
《BusyBox制作根系统文件》
为方便调试,将板卡的文件系统设置为nfs挂载启动

set bootargs gpmi=g root=/dev/nfs rw console=ttyAM0,115200n8 nfsroot=192.168.1.1:/home/user/work/nfs/rootfs,proto=tcp,nfsvers=3,nolock ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::eth0:down

挂载测试报错

VFS: Mounted root (nfs filesystem) on device 0:15.
Freeing init memory: 928K
Kernel panic - not syncing: No init found. Try passing init= option to kernel..
Backtrace:
[] (dump_backtrace+0x0/0x114) from [] (dump_stack+0x18/0x1c)
r7:00000013 r6:c010fe04 r5:c0027930 r4:c05ee6f8
[] (dump_stack+0x0/0x1c) from [] (panic+0x78/0xf4)
[] (panic+0x0/0xf4) from [] (init_post+0xb4/0xdc)
r3:00000000 r2:c7ea8a00 r1:c7ea8b00 r0:c0543952
[] (init_post+0x0/0xdc) from [] (kernel_init+0x12c/0x170)
r5:c0027930 r4:c05ed840
[] (kernel_init+0x0/0x170) from [] (do_exit+0x0/0x6dc)
r5:c00083d0 r4:00000000

这是由于还什么都没做

完善目录结构
mkdir dev etc lib proc sys tmp var

添加初始化配置脚本,将busubox在“examples/bootfloppy/etc/”目录下范例脚本拷贝进rootfs/etc/

cp -av examples/bootfloppy/etc/* ../rootfs/etc/

添加 C 运行库
C 运行库可直接从交叉工具链获取我这里在/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/arm-fsl-linux-gnueabi/multi-libs/lib下,将内容拷贝到rootfs/lib下
cp -av /opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/arm-fsl-linux-gnueabi/multi-libs/lib/* lib/
挂载运行可以启动不过仍有报错
can’t open /dev/tty2: No such file or directory

vi etc/inittab

注释第3行也就是变成下面这样

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
#tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

再次重启成功运行。

添加其他功能

挂载 sysfs 等文件系统
这时只挂载了proc在sys等文件下是没有文件的
打开etc/fstab可以看到有一行

proc /proc proc defaults 0 0

第一列可以是实际分区名,也可以是实际分区的卷标(Lable)
第二列是挂载点(挂载点必须为当前已经存在的目录)
第三列为此分区的文件系统类型。
第四列是挂载的选项,用于设置挂载的参数。

(auto: 系统自动挂载,fstab默认就是这个选项
defaults: rw, suid, dev, exec, auto, nouser, and async.
noauto 开机不自动挂载
nouser 只有超级用户可以挂载
ro 按只读权限挂载
rw 按可读可写权限挂载
user 任何用户都可以挂载)

第五列是dump备份设置。(当其值设置为1时,将允许dump备份程序备份;设置为0时,忽略备份操作)
第六列是fsck磁盘检查设置。(其值是一个顺序。当其值为0时,永远不检查;而 / 根目录分区永远都为1。其它分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。)
可以添加如

tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0

再重启就可看到/sys目录下出现内容

动态创建设备节点
BusyBox 默认配置含 mdev,通过 mdev 可实现设备节点的动态管理。但默认配置文件
并没有启用这个功能,系统“/dev”目录下是空的。要实现动态设备管理,可在“/etc/init.d/rcS”
文件中添加命令来实现(需要完成上面对/dev目录的挂载)
打开“rootfs/etc/init.d/rcS”文件,在其中添加第 4~7 行:

#/bin/sh

/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注