移植busybox做开发板的根文件系统

注:为学习朱有鹏课程做的笔记
最小根文件系统:
/dev,一切皆是文件,所以硬件设备也被虚拟成设备文件。
/sys和/proc是虚拟文件系统,只要创建空文件夹即可,内核运行起来里面会有东西。
/etc
/usr
/lib

VFS:virtue fs
文件系统就是把对存储设备扇区的访问变成对目录和文件名访问
虚拟文件系统就是把对硬件设备的访问变成对目录和文件名的访问

移植busybox:
修改makefile
make menuconfig 参照网盘文件
make
make install执行makefile里的install目标,把make后生成的可执行文件安装在特定目录,如/bin。。。所以在menuconfig中要设置好(setting->install prefix),在xxx/porting_x210/rootfs/rootfs,,,make install后,
在安装目录就有usr sbin bin linuxrc其中linuxrc是/bin/busybox的符号链接。/bin/下的其他命令如cp ls也是/bin/busybox的符号链接

inittab:
把busybox移植成功后,在用nfs方式去挂载根文件系统,发现:挂载成功,执行linuxrc成功,进入到命令行下。。。。但是不能输命令,且提示cannot open'/etc/init.d/rcS'  cannot open tty2  cannot open tty3
解决办法:在xxx/porting_x210/rootfs/rootfs创建inittab文件
解析inittab:inittab格式在busybox中定义
#first:run the system script file
::sysinit:/etc/init.d/rcS  //sysinit是控制台初始化之前。。。所以这个条目的意思就是:在控制台初始化之前执行rcS脚本程序
::askfirst:~/bin/sh   //askfirst主要用途是减少系统上执行的终端应用程序的数量,会促使init在控制台上显示“please press Enter to active this console” /bin/sh就是shell,跟控制台相关
::ctrlaltdel:~/sbin/reboot    //在键盘上按Ctrl+alt+del时 ,就会重启
#umount all file system
::shutdown:/bin/ubount -a -r   //在关机的时候去取消挂载所有的文件,-a -r是参数,所有的文件
#restart init process
::restart:/sbin/init     //在重启的时候,执行init程序
以行为单位解析,冒号是分隔符
id:runlevel:action:process
当action满足时,就会执行process。(process是一个程序,一个文件也可以是一个程序,前提是这个文件时脚本文件)
只要init进程也就是进程1还活着(进程1是不会死的。。。从系统初始化到结束,)会反复检查inittab,只要action满足就执行对应程序。。。





猜你喜欢

转载自blog.csdn.net/qq_41648636/article/details/80458998