根文件系统制作教程
特别说明:根文件系统制作过程中所有拷贝命令均需加“-a”参数( #cp –a )否则将出现难以预料的问题。美观起见,文中空格格式不统一,请勿直接复制文中命令
1、工具准备:
busybox(本教程采用1.20版本)
yaffs2打包工具
交叉编译工具链
2、busybox配置编译
2.1、解压busybox压缩包,进入解压后的目录
2.2、执行 # make menuconfig命令,进入配置界面
注意以下选项:
(1) Build BusyBox as a static binary ( no shared libs ) //将busybox编译成静态链接
(2) Cross Compile prefix //指定交叉编译器路径(/usr/local/arm/4.3.2/bin/arm-linux-)
(3) Installation Options 指定安装路径(默认为./_install)
其余大部分选项默认即可,busybox的具体问题可以网络搜索相关文档查看。
2.3、保存退出
执行#make、#make install、目录结构如下图
将会在指定目录下(./_install)生成文件系统需要的目录结构及相关命令和启动文件(/bin、/sbin、/usr目录和linuxrc文件)
2.4、创建动态库(使用静态编译的跳过本步骤)
使用#arm-linux-readelf –d 命令查看busybox程序所使用的动态库文件及其软链接。
拷贝库文件及其软链接到指定存放文件系统目录的/lib目录下(切记拷贝使用#cp –a 命令)。
3、建立文件系统的目录结构
执行# mkdir myroots 建立文件系统根目录
执行# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var创建所有需要用到的目录结构
将busybox编译产生的/bin、/sbin、/usr目录和linuxrc文件拷贝至文件系统根目录myroots下
执行# mkdir etc/init.d
进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
#Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
trap ":" INT QUIT TSTP
这个文件可以添加各种启动需要运行的命令脚本,如网卡配置、nfs挂载等
4、创建设备节点文件
在根目录/dev目录下,执行“#mknod 设备名字 类型 主设备号 次设备号”创建设备文件
#mknod console c 5 1
也可以从pc机linux下dev目录中复制相关设备文件到文件系统/dev目录
5、写init启动脚本
在/etc下创建启动脚本文件inittab
#vi /etc/inittab
写入如下两行:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/login
第一行指定开机系统启动之后运行的启动脚本是rcS,第二行要求需用户密码登录系统
将pc机/etc/下的passwd、shadow、group文件拷贝至根文件系统/etc下,删去root以外的条目。则可以用pc机root帐号和密码登录嵌入式设备
6、创建虚拟文件系统
文件系统根目录下执行#mkdir /proc /sys /tmp
在rcS脚本中挂载三个虚拟文件系统,或板子启动后在串口终端执行:
#mount –t proc proc /proc
#mount –t sysfs sys /sys
#mount –t tmpfs tmp /tmp
挂载后proc文件夹存放系统关键信息
Sys目录存放系统信息
Tmp目录可做临时文件存储,直接存在内存上,读写速度快
7、用yaffs2工具打包文件系统
在工具所在目录执行#yaffs2 2 根文件系统目录 根文件系统镜像名字
#yaffs2 2 ***/rootfs myrootfs.image
#chmod 644 myrootfs.image 更改镜像权限
至此,一个空白的根文件系统制作完毕,可以烧写到板子上运行