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