busybox的下载地址:https://busybox.net/downloads/
1.系统的init主进程通过/etc/inittab文件控制子进程
在系统启动之前会启动sysinit,wait,once三类子进程
在系统启动之后会启动respawn,askfrist这两类子进程,并监视他们,发现他们退出就会重启他们
在系统退出之后会启动shutdown,restart,ctrlaltdel这三类子进程。
2./etc/inittab中每个条目用来定义一个子进程,并且确定他们的启动方法
<id>:<runlevels>:<action>:<process>
id:表示该子进程使用的控制台(用来标准输出输入的),可以指定为ttySAC0,如果不指定就用init主程序从内核那里继承过来的。
runlevels:对于busybox,这个字段没意义
action: init主进程对这个子进程的控制方法
process: 这个子进程的执行函数或者执行脚本
3.配置busybox的三个基本要点:启用哪些常用的指令,选择编译方式(即动态还是静态),安装路径
make menuconfig的配置:
Networking Utilities:选择ping,tftp,telnetd等指令
Process Utilities: 选中ps,free,kill,top,全都选中也行
Editors: 选中vi
linux Module Utilities: 模块加载卸载的命令,一般都选中。
Coreutils: 核心的命令,比如ls,cp等
Archival Utilities: 各种解压,压缩的工具,根据需要选择命令。
(1)bosybox添加自动补全功能:
Busybox Setting -->
Busybox Library Tuning ---->
[*] Tal completion
(2)取消根文件的静态编译:
Build Option --->
[] Build Busybox as a static binary (no shared libs)
(3)压缩,解压工具的选择:
Archival Utilities --->
所有选择都选中
(4)模块的加载或者卸载的配置
Linux Module Utilities --->
所有都选上
(5)支持mdev(自动创建设备节点),支持NFS的mount,umount功能
Linux System Utilities --->
所有都选上
(6)支持ifconfig命令.
Networking Utilities --->
[*] ifconfig
[*] Enable status reporting output (+7)
[*] Enable option "hw" (ether only)
[*] set the broadcast automatically
/etc/fatab:用来控制mount指令的作用(Rcs脚本里面mount -a之后要执行fatab里的挂接程序)
dump:一个用来备份文件的程序,设置为0,则dump会忽略备份这个文件系统
fsck: 决定磁盘的检车顺序,根文件系统设置为1,其他文件系统设置为2,如果设置为0,表示忽略这个文件系统。
在busybox的顶层Makefile中指定:
ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-
配置完之后编译busybox,在busybox目录下make指令
配置完busybox之后制作busybox:
make CONFIG_PREFIX=/home/zhangjiaqi/nfs_share/first_rootfs install
接下来安装clib库,以下的流程可以直接参考完全开发手册了
cp -d:如果原来是一个链接那就保持是一个链接来复制,
按照开发手册来将编译工具的整个Libc库都复制到first_rootfs/lib的话会比较大,造成first_rootfs.yaffs2很大,占很多内存
应该只复制busybox要用到的库就好了参考:https://blog.csdn.net/qq_29350001/article/details/51887141
busybox启动的时候出现(解决使用mdev时“cannot create /proc/sys/kernel/hotplug:nonexistent directory”错误)
参考:https://www.cnblogs.com/klb561/p/9245883.html , http://www.manongjc.com/detail/18-amjjofqsqaocdga.html
查阅内核的(kernel/sysctl.c)
make menuconfig (将UEVENT_HELPER选上,重新编译内核即可以在根文件的目录proc/sys/kernel下产生hotplug用于生成mdev)
/etc/init.d/rcS里的mount -a的作用是:根据/etc/fstab脚本文件将内核里的文件系统挂接到前端(busybox的文件夹)
fstab的作用是将内核的文件系统挂接到前端busybox的某个文件夹,比如:
#device point type options dump fsck order
proc /proc proc defaults 0 0
表示将内核的设备proc挂接到busybox的/proc文件夹,proc文件夹要在制作根文件系统的时候就要mkdir