您的位置:首页 > 运维架构 > Linux

构建根文件系统

2016-12-07 15:51 447 查看

busybox

wget http://www.busybox.net/downloads/busybox-1.20.2.tar.bz2 make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install

编译完install后会默认安装在busybox源码目录下_install目录内,但是此文件系统并不完整,只有四个目录

root-># ls
bin  linuxrc  sbin  usr

虽然可以直接用这个简易的文件系统启动内核,但是功能在以后的使用过程中会很受限制。

构建/etc目录及几个关键文件

/etc/inittab文件

::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

格式:
<id>:<runlevels>:<action>:<process>例如上边


id:表示输出的终端,省略的话表示输出到init终端
runlevels:运行等级,busybox中没有意义,省略
action:如下
process:要执行的程序,“-”开头表示这个程序是交互的。

action名称执行条件说明
sysinit系统启动后最先执行只执行一次,init进程等待它执行结束后才执行其他进程
wait系统执行完sysinit进程后同上
once系统执行完wait进程后只执行一次,但不等待它结束
respawn系统执行完once进程后init进程检测,发现子进程退出后,重新启用它
askfirst系统执行完respawn进程后与respawn类似,但是先输出“Please press Enter to active this console”,等用户键入回车后才启动
shutdown系统关机时重启,关机命令执行时
restartBusybox中配置CONFIG_FEATURE_USE_INITTAB,并且init进程接收到SIGHUP信号时先重新读取、解析/etc/inittab文件再执行restart
ctrlaltdel按下ctrl+alt+del组合键时 

创建/etc/ini.d/rcS文件

#!/bin/sh
ifconfig eth0 192.168.1.222
mount -a #这个命令会自动读取/etc/fstab文件并按要求挂载制定的文件系统
mkdir /dev/pts
mount -t devpts devpts /dev/pts //用来支持外部网连接(telnet)
echo /sbin/mdev > /proc/sys/kernel/hotplug  #最后的两行是为了mdev能够以守护进程的形式运行,当驱动程序插入内核的时候能够自动创建设备文件节点。
mdev -s

此外还要修改此文件的权限,使它能够运行。

创建/etc/fstab文件

#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0 //mdev需要
tmpfs /dev tmpfs defaults 0 0 //mdev需要

这里把/dev目录挂载上tmpfs文件系统,是为了mdev(pc机上是udev)程序能够动态的创建删除设备文件。

oprions的参数如下,当同时满足多个时,用逗号分隔

参数名说明默认值
auto\noauto执行”mount -a”时是否自动挂载auto
user\nouser允许普通用户挂载还是只能root挂载nouser
exec\noexec是否允许执行所挂载设备上的程序execc
ro以只读方式挂载文件系统 
rw以读写方式挂载文件系统 
sync\asyncsync:修改文件时会同步写入设备sync
defaultsrw,suid,,dev,exec,auto,nouser,async的组合 
dump是一个用来备份文件的程序,fsck是一个用来检查磁盘的程序

dump根据dump字段的值决定是否需要备份此文件系统,如果没有这个字段或者这个字段为0,则dump忽略此文件系统

fsck程序根据fsck order字段决定检查磁盘的顺序,一般将根文件系统设置为1,其他文件系统设置为2,如果为0,则fsck程序忽略这个文件系统。

总结

先解析/etc/inittab文件,然后执行/etc/init.d/rcS脚本,并根据/etc/fatab文件挂载其他文件系统。

补全其他几个目录

mkdir -p lib lib/modules dev proc tmp sys
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 文件系统