APP下载

基于S3C2440的嵌入式Linux根文件系统构建

2010-06-05秦建敏

电子设计工程 2010年6期
关键词:源码内核命令

彭 浩,龚 杰,秦建敏

(太原理工大学 山西 太原 030024)

嵌入式Linux早已成为IT界家喻户晓的一个名字,使用Linux进行嵌入式产品开发有一个很大的优势,就是开发资源丰富,且成本低廉,嵌入式Linux操作系统越来越受到重视,其应用也越来越广泛。而文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取,提供对文件和目录的分层组织形式,数据缓冲以及对文件存取权限的控制。根文件系统一直是Linux系统不可或缺的组件,在嵌入式Linux中,内核在启动期间进行的最后操作之一就是安装根文件系统。Busybox是构建嵌入式Linux根文件系统的软件,用它制作根文件系统简单、方便,而且设置灵活。

1 根文件

Linux要在一个分区上存放系统启动所必需的文件,如内核映像文件、内核启动后运行的第一个程序、给用户提供操作界面的Shell程序、应用程序所依赖的库等,这些必需、基本的文件合称为根文件系统,它们存放在一个分区中[1]。

根文件系统一般包括:1)基本的文件系统结构,包含一些必须的目录, 比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp;2)基本程序运行所需的库函数,如:Glibc/uC-libc;3)基本的系统配置文件,如:rc,inittab等脚本文件;4)必要的设备支持文件, 如:/dev/hd*,/dev/tty,/dev/fd0;5) 基本的应用程序,如:sh,ls,cp,mv等。

根文件系统的制作就是生成包含上述各种文件的文件系统的过程,可通过直接拷贝宿主机上交叉编译器处的文件来制作根文件系统,但是这种方法制作的根文件系统一般过于庞大[2]。也可通过一些工具如busybox来制作根文件系统,用busybox制作的根文件系统可以做到短小精悍并且运行效率较高。

2 busybox简介

busybox常被很形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具比较,busybox所提供的功能和参数略少,但在比较小的系统或者嵌入式系统中已经足够[3]。busybox在设计上充分考虑硬件资源受限的特殊工作环境,它采用一种很巧妙的方法减少自己的体积;所有命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。例如最终生成的可执行文件为busybox,当为它建立一个符号链接ls的时候,就可以通过执行这个新命令实现列目录的功能。采用单一执行文件的方式可以最大限度地共享程序代码,甚至连文件头、内存中的程序控制块等其他操作系统资源都可共享,这对于资源比较紧张的系统来说,最合适不过了。

3 busybox的编译和安装

3.1 开发环境

基于S3C2440 ARM920T的硬件平台,该系统的硬件平台上主要使用三星S3C2440,外围还包括 64 M SDRAM和64 M NAND Flash,2 M NOR Flash,系统采用宿主机加目标板的模式,宿主机是PC机,其操作系统是RedHat linux,目标板是基于S3C2440微控制器的开发板,系统采用的内核是嵌入式 Linux2.6.29,Boot loader是 u-boot。

3.2 配置busybox

从网上下载busybox-1.13.0.tar后,使用tar xvzf busybox-1.13.0.tar命令获得busybox-1.13.0目录,里面即是所有的源码。进入busybox-1.13.0目录后执行“make menuconfig”命令可进入配置界面。其配置界面如图1所示。

图1 busybox1.13.0配置界面

在构造根文件系统时使用动态链接的busybox,构造根文件时需要在/lib目录下面放置glibc库文件。在busybox的配置过程中大多是选择或者去除各种命令,这里不详细叙述。

3.3 编译安装busybox

在编译之前,首先需要修改busybox根目录下的Makefile,使用交叉编译器。

将189行的ARCH?=$(SUBARCH)修改为ARCH?=arm,164行的CROSS_COMPILE?= 修改为 CROSS_COMPILE?=arm-linux-修改后执行make命令编译busybox。然后安装busybox,将 busybox安装/home/work/rootby目录下,在安装之前需要在pc机上执行“mkdir/home/work/rootby”命令建立rootby目录,然后执行 “make CONFIG_PREFIX=/home/work/rootby install”命令完成安装。安装完成后生成如图2所示文件、目录。

图2 busybox安装后生成的文件、目录

4 构建根文件

开发板的根文件系统在主机上的目录为/home/work/rootby。 在此目录下使用 mkdir 命令建立 dev,etc,home,lib,mnt,proc,root,sys,tmp 目录。

4.1 创建etc目录下的文件

在/home/work/rootby/etc目录下存放各种配置文件。这些文件都是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件[4]。

4.1.1 创建etc/inittab文件

init进程根据/etc/inittab文件来创建其他子进程,比如调用脚本文件配置ip地址、挂接其他文件系统,最后启动shell等。

参考 busybox源码下面的“examples/inittab”文件,创建inittab代码如下:

在busybox的参考文件中控制台是ttySAC0,而在s3c24xx系列器件的串口驱动里采用s3c2410_serialx做为设备名,使用串口0作为控制台,这里使用s3c2410_serial0作为控制台。

4.1.2 创建etc/init.d/rcS文件

rcS文件是一个脚本文件,借助启动脚本可以设置各种程序开机后自动运行,也可进行其他系统设置,这有点类似于Windows系统中的Autobat自动批处理文件[5]。创建的文件内容如下(实际内容可能与此不完全一致):

注意最后还要改变它的属性使它能够执行,执行chmod+x etc/init.d/rcS命令。

4.1.3 创建etc/fstab文件

fstab文件描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。创建的代码如下:

文件中各字段的意义如下:1)device:要挂接的设备,如/dev/mtdblock1;2)mount-point:挂接点;3)type:文件系统类型;4)options:挂接参数,以逗号隔开;5)dump 和 fsck order:用来决定控制dump、fsck程序的行为。

4.2 用户和组文件的创建

需要在etc目录下增加passwd和group两个文件。首先增加passwd文件,passwd一共由7个字段组成,6个冒号将其隔开。其含义分别为:1)用户名;2)是否有加密口令,x表示有,不填表示无,采用 MD5、DES 加密;3)用户 ID ;4)组 ID;5)注释字段;6)登录目录;7)所使用的 shell程序。

增加group文件,group共由4个字段组成,3个冒号将其隔开。含义分别为:1)组名;2)是否有加密口令,同passwd;3)组 ID;4) 指向各用户名指针的数组。

/home/work/rootby/etc/group内容如下:

4.3 构建dev目录

从Linux-2.6.18开始,负责旧版本的设备管理系统devfs已被废除,但新版本的udev是一个基于用户空间的设备管理系统。在内核启动时并不能自动创建设备节点,固需手动创建console和null两个启动过程必须的设备节点。将采用busybox中内置的mdev,一个简化的udev版本。

如果不创建这两个设备文件,在文件系统启动时会出现错误信息,不能初始化控制台。

4.4 安装glibc库

在开发板上需要加载器和动态库,执行如下几个命令:

5 制作yaffs2文件系统映像文件

所谓制作文件系统映像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这个文件可以直接烧写到存储设备上去。

在yaffs源码中有个utils目录,里面有mkyaffsimage和mkyaffs2image的源代码,前者可制作yaffs映像文件,后者制作yaffs2映像文件,将下载的yaffs2解压出来在目录/Development下有两个文件夹[6]:yaffs和yaffs2,进入yaffs2/utils目录,此目录下有3个文件。在加入两个文件:nand-ecc.c和yaffs_packedtags1.c,具体文件这里不列出,源码可参见文献[7]。

修改Makefile文件:

加入MKYAFFSSOURCES=mkyaffsimage.c yaffs_packedtags1.c nand-ecc.c因为yaffs_packedtags1.c和nand-ecc.c是加上去的。然后执行make命令后生成mkyaffs2image工具,复制此工具到PC机usr/local/bin目录下,利用makyaffs2image工具,执行#mkyaffsimage2 rootby/pyaffs2.img命令可生成文件系统映像文件。执行#gzip-9 pyaffs2.img最终生成嵌入式Linux根文件系统的映像文件为pyaffs2.img.gz。至此,整个根文件系统就制作完成,最后可以通过上面制作的pyaffs2.img.gz启动整个系统。

6 下载映像文件并执行

以下命令为通过Windows的超级终端工具下载Linux内核映像和根文件系统映像到目标板(基于S3C2440微处理器的开发板)。

目标板的嵌入式Linux系统启动后在超级终端中显示的结果如图3所示。 可见用busybox制作的根文件系统已经正常启动。

图3 根文件系统移植后运行结果

7 结束语

对用busybox制作嵌入式Linux根文件系统的方法进行归纳和总结,给出制作嵌入式Linux根文件系统的一般方法,适用于ARM架构处理器的嵌入式系统。利用此方法制作的文件系统可在S3C2440上成功运行,意在给嵌入式系统平台的搭建有个整体把握和认识,以降低进入ARM嵌入式开发应用领域的门槛,提供的方法组建的文件系统非常简单且配置灵活。

[1]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008:68-70.

[2]邵长彬,李洪亮.用Busybox制作嵌入式Linux根文件系统[J].微计算机信息,2007,23(10-2):48-50.

[3]陈峰,李滨滔,戈志华.基于S3C2410的嵌入式Linux系统构建[J].现代电子技术,2007,(24):55-57.

[4]冯世奎,刘王勺.Linux嵌入式系统根文件系统的选择与制作[J].成都信息工程学院学报,2006,21(4):508-512.

[5]广州友善之臂计算机科技有限公司.MINI2440用户手册[EB/OL].(2009-08-17)[2009-12-20].http://arm9.net/download.asp.

[6]龙亚春,黄璞,吴胜.超大容量NAND Flash文件系统-YAFFS2在Linux下的实现 [J].北京电子科技学院学报,2007,15(2):81-84.

[7]小龙.利用busybox做 yaffs根文件系统[EB/OL].(2009-01-22)[2009-12-20].http://blog.mcuol.com/User/longren/Article/9633_1.htm.

猜你喜欢

源码内核命令
只听主人的命令
面向数据可靠传输的高译码率带反馈的LT码
强化『高新』内核 打造农业『硅谷』
国内一站式工程设备租赁平台众能联合完成C2、C3两轮融资
浅谈开源操作系统的历史
企业如何保护源码
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
移防命令下达后
微生物内核 生态型农资