class="markdown_views prism-github-gist">
根文件系统
根文件系统是除内核映像文件外,init程序、shell程序、各种程序运行需要的的库等不可缺少文件的集合。
构建根文件系统时,一般遵循FHS标准,详见维基百科
(
https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)。
简单介绍:
/bin存放着所有用户可以使用的命令。
/sbin中是系统关键命令。
/usr是只读用户数据的二级结构。
busybox调用关系
在嵌入式式系统中,通常使用busybox工具生成命令和库文件。其生成的文件都被简化过,体积大大减小。
busybox生成的根文件如上,其中linuxrc是busybox生成的init程序。
这里稍微提一下内核初始化完成后,进程0 fork出进程1后变成idle进程,进程1执行uboot中指定的init路径的程序(若未制定会去默认路径寻找)。
busybox生成的init进程就在/sbin中。linuxrc跟编译时配置有关系,linuxrc跟/sbin/init作用一样,使用linuxrc后就不会使用/sbin/init。
inittab脚本
init进程初始化完成后,会去解析inittab脚本,这个脚本说明了如何创建自进程。
:::
<id>:子进程使用的控制台(标准输入、标准输出、标准错误设备)
<runlevels>: 1到6,表示不同的六个级别
init 0 是停机的意思。也就是说可以用这个命令关机。可以相当于shutdown -P now这个命令,就是用这个命令关机的话,终端不会弹出任何提示消息,直接就关机了。
init 1 单用户模式。很多情况下忘了登陆密码或者root密码就在单用户模式下修改。
init 2 多用户,没有 NFS。不知道什么意思,表示没有用过这个命令。
init 3 完全多用户模式。这个经常用,就是文本模式~~~
init 4 未使用,保留。
init 5 图形界面
init 6 重启命令。相当于shutdown -r now。
:init如何控制子进程。
<process>:可以是要执行的脚本,也可以是程序。
inittab脚本实例如上,我们可以将开机后需要执行的命令放到/etc/init.d/rcS中,比如mount -a。
mount -a的意思是将/etc/fstab的所有内容重新加载。
fstab脚本
device:要挂接的设备,如/dev/mtdblock1等,对于文件系统,这个字段可以为任意值。
mount-point:挂接点
type:文件系统类型
options:挂接参数
dump:决定dump程序行为,其为备份与关,为0则忽略
fsck order:决定fsck程序行为,其余磁盘检查有关,为0则忽略