手动构建rootfs及文件功能分析
这份笔记记录了从0开始构建一个最小根文件系统的流程,从而达到分析其目录结构及文件的目的,基于的kernel版本为2.6.35
1.结构总览
如图
- /linuxrc:由busybox安装,就是kernel执行的init程序,本质是指向busybox的符号链接
- /bin:由busybox安装,里面是通用命令,如ls
- /sbin:由busybox安装,里面是root权限命令,如shutdown
- /usr:由busybox安装,里面是共享、开放的内容(意思是任意用户都可以使用)
- bin:由busybox安装,里面是共享、开放的命令,如whoami
- sbin:由busybox安装,里面是不重要的系统命令,如deluser
/etc:里面是各个程序的配置文件,众多程序在运行时需要根据配置文件来指导它们的行为
- inittab:busybox的配置文件,busybox运行时将根据/etc/inittab来指导自己的行为,可以用它实现应用程序的开机自启动,此外它还调用了rcS
- fstab:配置文件,被busybox的mount -a 指令读取,指定了系统初始化时应该挂载的文件系统
- profile:一个脚本程序,被busybox调用,作用是在控制台中显示用户的名字
- passwd:配置文件,里面记录了用户和密码的设置
- shadow:配置文件,里面是所有用户的密码(加密过的)
- init.d:此目录包含了很多系统服务启动时需要运行的脚本
- rcS:控制台初始化程序,在进入控制台前被busybox调用执行,可以利用它实现应用程序的开机自启动
sysconfig:
- HOSTNAME:配置文件,里面存放用户的名字,会被rcs读取
/proc:系统的虚拟文件系统的挂载点,要自己创建,里面是虚拟的文件,表示了系统的一部分状态
- /sys:系统的虚拟文件系统的挂载点,要自己创建,里面是虚拟的文件,非常全面的表示了系统状态
- /tmp:系统的虚拟文件系统的挂载点,要自己创建,用于存放临时生成的文件,一般是空的
- /var:系统的虚拟文件系统的挂载点,要自己创建,用于存放一些数据
- /dev:系统的虚拟文件系统的挂载点,要自己创建,用于存放设备文件
- /lib:里面存放了很多库文件,应用程序会进去加载需要的动态链接库
2.安装busybox
可以从官网https://busybox.net/downloads/ 下载到源码,我们使用2015年的1.24.1版本。busybox这个项目借鉴了很多kernel的地方,比如配置部分和Makefile等,我们只要按照kernel的方法操作它就行了
- 进入源码目录,打开Makefile检查架构和交叉编译工具链,利用/在vim中搜索CROSS_COMPILE和ARCH,将其改为
ARCH = arm
CROSS_COMPILE = /usr/local/arm/arm-