根文件系统是Linux、UNIX系统启动的第一个文件系统,在启动内核时需要挂载根文件系统来支持访问外部设备以及装载和运行内核模块与应用。
根文件系统相对于普通的文件系统,特殊之处在于它是内核启动的所mount的第一个文件系统,系用引导启动程序会在根系统挂载之后 从中把一些基本的初始化脚本和服务加载到内存中运行。
Linux的根文件系统的目录和结构是基本固定的,每个文件夹都有固定的用途。
/bin 存放用户和系统来说必须的二进制文件
/sbin 存放针对系统管理的二进制文件,一般不会被普通用户使用
/usr/bin 不必要的用户二进制文件
/usr/sbin 不必要的系统管理二进制文件
/lib 启动系统和运行所必需的库
嵌入式Linux而言之有/bin,/dev,/etc,/lib,/proc,/var,/usr是需要的,而其他的都是可选的。
如何制作根文件系统:
移植busybox,简单看作是UNIX工具的集合,它将必将常用的UNIX命令和工具软件合成到一个可执行文件中,并让它们共享代码中相同的部分,从而减少所需要的空间和资源的需求。
当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。
该标准规定了根目录下各个子目录的名称及其存放的内容:
目录名 |
存放的内容 |
/bin |
必备的用户命令,例如ls、cp等 |
/sbin |
必备的系统管理员命令,例如ifconfig、reboot等 |
/dev |
设备文件,例如mtdblock0、tty1等 |
/etc |
系统配置文件,包括启动文件,例如inittab等 |
/lib |
必要的链接库,例如C链接库、内核模块 |
/home |
普通用户主目录 |
/root |
root用户主目录 |
/usr/bin |
非必备的用户程序,例如find、du等 |
/usr/sbin |
非必备的管理员程序,例如chroot、inetd等 |
/usr/lib |
库文件 |
/var |
守护程序和工具程序所存放的可变,例如日志文件 |
/proc |
用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容 |
/sys |
用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容 |
/mnt |
文件系统挂接点,用于临时安装文件系统 |
/tmp |
临时性的文件,重启后将自动清除 |
制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:
· 编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录
· 利用交叉编译工具链,构建/lib目录
· 手工构建/etc目录
· 手工构建最简化的/dev目录
· 创建其它空目录
· 配置系统自动生成/proc目录
· 利用udev构建完整的/dev目录
制作根文件系统的 jffs2 映像文件