使用busybox制作根文件系统
版本:Rev1.0
https://www.wendangku.net/doc/c41522314.html,
2008-08
更新记录2008.08.29
文档创建。
使用busybox制作根文件系统
-基于Virtual PC
Team MCUZone 本文叙述使用busybox创建Linux的根文件系统的过程。包含了busybox的编译,初始化文件的建立,mtd工具的编译及jffs2格式根文件映像的生成。Linux版本选择了2.6.24, 开发环境选择了Virtual PC,其它软件可以类推。
一,准备工作
1.使用Virtual PC安装Linux虚拟机
请参照本站另一篇文档《基于VPC建立ARM_Linux开发环境》。
2.下载相关软件包
下载下列软件(可在本站ftp上下载),并传输到Linux虚拟机下。
busybox-1.11.2.tar.bz2
zlib-1.2.3.tar.gz
mtd-snapshot-20050519.tar.bz2
3.准备相关环境
请参照本站另一篇文章《为SAM926X编译U-boot》为9261编译好u-boot。
请参照本镇另一篇文章《9261上的Linux初步应用3》设置好主机的NFS等环境。
二,配置和编译busybox
1.配置busybox
在编译之前,必须要对busybox进行相应的配置:
配置编译为静态链接,设置工具链:
设置安装路径:
一些设置:
Applets选项以下都是一些具体的applet配置选项,根据实际需要选择:
配置prompt以及alias:
网络设置中的ftp和telnetd相关服务:
设置完成,保存退出。
2.编译busybox
在命令行输入make即可开始编译:
等待一段时间后,编译即会完成,输入下面命令:
在该过程,一系列softlink被生成,完成后可以看到生成了相应的目录结构。
三,制作根文件系统
1.建立根文件系统结构
在linux虚拟机的NFS所在目录建立一个rootfs文件夹:
建立相关文件夹:
2.复制文件
首先将busybox编译后生成的文件都复制到rootfs:
复制编译器所带的库文件到lib:
3.新建相关文件
首先删除rootfs下的linuxrc文件。
创建为shell导入全局变量的/etc/profile文件:
创建初始化文件/etc/inittab:
以及/etc/fstab:
使用了1MB内存作为tmpfs,可以用于存放一些运行时的log(关机会丢失,但可以避免反复读写NAND)。
增加初始化脚本/etc/init.d/rcS:
修改其属性:
建立/etc/init.d/rc.local,启动本地服务,下面例子中会启动telnetd:
完成后需要修改其属性775。
创建mdev配置文件/etc/mdev.conf,内容可以为空:
配置name server配置文件/etc/resolv.conf:
创建/etc/host.conf:
创建/etc/hosts:
创建网络应用程序用到的标准服务端口映射表/etc/services:
建立库相关的/etc/ld.so.conf:
建立用户和组相关文件
为root建立home目录:
4.建立设备节点
在/dev文件夹下建立相关设备节点:
5.安装APP
复制一些app到系统:
四,测试根文件系统
为了测试rootfs,可以先用NFS方式启动系统。
在uboot下设置linux启动参数:
指定根文件系统,也就是rootfs采用nfs方式。
连接开发板到网络,启动后的效果:
使用root登陆。
Telnetd, boa,Samba已经运行。
在pc上telnet上开发板:
到/etc下运行ldconfig生成ld.so.cache:
在PC上打开一个网页,浏览开发板ip地址:
浏览板子上的网络共享文件夹:
使用mplayer:
LCD显示:
五,生成jffs2
1.编译zlib
将zlib展开,首先配置:
修改Makefile,使用arm-none-linux-gnueabi-gcc编译:
输入命令make,然后make install:
安装后的效果:
2.编译MTD工具
将mtd-snapshot-20050519.tar.bz2展开,首先编译开发板上可用的版本。
cd到util路径,修改Makefile,修改工具链,并设置好DESTDIR:
输入make开始编译,完成后生成一些列工具:
运行make install安装相应的路径:
编译ARM版本完成后,开始编译PC版本工具,使得在PC上可以生成jffs2的文件映像。首先修改Makefile:
然后make即可生成可执行文件:
3.生成jffs2格式的rootfs
使用命令du –k (-m)看看当前文件系统的大小:
运行下面命令将rootfs的文件夹做成jffs2格式的根文件系统。-e 参数指明擦除大小为128KB,-s指明page大小为2048:
./mkfs.jffs2 -r /nfs4arm/rootfs/ -o /nfs4arm/rootfs_mcuzone.jffs2 -e 0x20000 -s 0x800 -n
运行开发板,首先使用NFS方式。一路cd到/usr/sbin下:
看看mtd info:
首先擦除/dev/mtd0:
在NFS环境下,可以将jffs2的映像复制到根文件系统的/usr/testapp下:
那么在板子上即可看到该文件:
下面需要将映像烧录到NAND上:
烧录完成后可以重启开发板,在u-boot下修改启动命令参数:
Boot完成后的log:
jffs2文件系统mount OK。
文件系统的情况:
六,一些事项
如果编译遇到问题可以先检查一下环境,然后就是工具链。请按照上文描述的步骤操作。
七,后记
以上的叙述中并没有补充Linux的相关知识,有问题的时候可以看Linux官网或者google。
如果有任何问题和建议,请到MCUZone论坛发帖,谢谢!