应用Scratchbox构建基于CF卡的嵌入式Linux系统

来源:互联网 发布:js简单树形菜单 编辑:程序博客网 时间:2024/05/22 11:46

 石涛 师卫

(太原理工大学信息工程学院 山西省 太原市 030024)

 

摘要: 本文介绍了一种应用Scratchbox构建Linux操作系统的新方法,详细论述了应用Scratchbox和Busybox等开源软件在CF卡上构建一个嵌入式Linux操作系统的全过程。

关键词:Busybox; Scratchbox ;CF ;嵌入式Linux操作系统

中图法分类号:TP399                文献标识码:A

 

Construction of embeded Linux on CF card using Scratchbox

SHI Tao, SHI Wei

(Department of Information Engineering,Taiyuan University of Technology,Shanxi Taiyuan,030024)

Abstract:This paper introduces a new method of building embedded Linux using Scratchbox. It also describes the whole process in detail of building a embedded Linux on CF card using Scratchbox and Busybox etc, open source software.

Key Words:Busybox ; Scratchbox; CF; embedded Linux


 

引言

Linux由于其内核的可裁剪性,而受到嵌入式市场应用领域的青睐。在某些领域,Linux实际上已经处于领导地位,成为最流行的嵌入式操作系统之一。然而,我们在应用嵌入式Linux操作系统时,都面临着如何快速方便的构建一个特定的嵌入式环境的问题。本文在这里探索了一种新的方法,利用Scratchbox、Busybox等开源软件实现基于CF卡的嵌入式linux系统的构建。

1、嵌入式Linux系统构建方法介绍

       嵌入式Linux系统包含引导程序、内核和文件系统3部分。对于嵌入式Linux系统来说,这三个部分是必不可少的。在这3个部分中,构建Linux的根文件系统是最困难的。在这里主要介绍一些构建Linux根文件系统的方法。

Linux的根文件系统具有非常独特的特点,就其基本组成来说,Linux的根文件系统应该包括支持Linux系统正常运行的基本内容,包含着系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件。因此,至少应该包括以下几项内容。

     1)基本的文件系统结构,包含一些必需的目录:/dev,/proc,/bin,/etc,/sbin,/usr,/lib,/tmp等。

     2)基本程序运行所需的库函数,如Glibc/uC-libc。

     3)基本的系统配置文件,比如rc,inittab等脚本文件。

     4)基本的应用程序,如sh,ls,cp,mv等。

     传统的构建Linux根文件系统方法,通常都是按照上面的4项内容,分别来构建Linux根文件系统,这样不仅增加了开发的时间和成本,而且增加了开发的难度,很难成功。在长期的摸索和实践中,我们发现了一种新的开源软件Scratchbox,利用他来构建嵌入式Linux系统可以达到事半功倍的效果。

     Scratchbox是一个交叉编译的工具组,可以简化嵌入式Linux应用开发。Scratchbox提供了一组工具,用这组工具我们可以构建一个完整的Linux交叉编译环境。用Scratchbox来构建嵌入式Linux系统具有以下优点:

     1)运行与chroot的环境中,完全独立于主机,编译过程将与主机系统无关。

     2)可以很容易的变换目标系统中的工具链。

     3)根据Linux系统的目标运行环境对chroot后的系统进行定制,这样就可以进行交叉编译,使软件误认为是在目标平台上进行编译。

     4)可以自动创建Linux的根文件系统所需的目录结构。

     基于Scratchbox以上几个优点,我们完全可以在自己的主机系统中用Scratchbox构建一个基于目标平台的虚拟系统,chroot进这个系统之后,对工具链和函数库进行定制编译。然后将Scratchbox创建好的根文件系统拷贝到目标平台上即可。

2、构建嵌入式Linux系统

2.1 Linux操作系统裁剪

       由于CF卡的容量大小有限,我们在CF卡上构建Linux操作系统时,需要对Linux内核进行裁剪。要得到一个精简的Linux操作系统,大致有二个步骤:编译裁剪内核,形成精简的内核映像;构建根文件系统,形成可以运行的新系统。

2.2.1 编译Linux内核

Linux内核裁剪主要是根据系统所需要的功能,缩减掉不需要的模块和组件,重新编译内核。Linux内核由专门的机构维护,我们可以从Linux官方网站(http://www.kernel.org)获得功能完善的最新内核。我们这里下载linux-2.4.26内核的压缩包文件linux-2.4.26.tar.gz。得到内核压缩包后,以root身份登录系统。

1、用tar命令释放内核源代码

# cd  /usr/src

# tar zxvf  linux-2.4.26.tar.gz

文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包括了源代码。

     2、配置内核

1)删除源代码目录中残留的.o文件和其它从属文件。 

# cd /usr/src/linux-2.4 

# make mrproper 

2)启动内核配置程序

# cd /usr/src/linux-2.4

# make  menuconfig

3)配置内核

根据目标系统的需要,选择相应的加载选项。

     3、编译内核

         1)建立编译时所需的从属文件

# cd  /usr/src/linux-2.4

# make  dep

2)清除内核编译的目标文件

# make  clean

3)编译内核

# make bzImage   (注意大小写)

内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译。

     至此,一个新的内核已经编译成功,下一步就是构建一个Linux文件系统了。

2.2.2 构建Linux文件系统

       在这里我们使用开源的软件Scratchbox和Busybox来构建Linux根文件系统。

     1、用scratchbox构建根文件系统目录结构

在使用scratchbox前,我们应该准备好如下程序安装包(我的Linux环境是Debian发行版本):

scratchbox-core :scratchbox环境, 常用工具及本地编译器。

scratchbox-libs  :scratchbox-core, devkits和toolchains所需的库。

scratchbox-devkit-debian :用于Debian包开发的环境和工具.

scratchbox-toolchain-i386-gcc3.2-uclibc20040229:用于交叉编译的工具链

     下载到相应的deb发行包后,使用如下命令安装scratchbox。

1)   #dpkg –i scratchbox-libs.deb

2)   #dpkg –i scratchbox-core.deb

3)   #dpkg –i scratchbox-devkit-debian.deb

4)   #dpkg –i scratchbox-toolchain-i386

-gcc3.2-uclibc20040229.deb

接下来运行

     #dpkg-reconfigure scratchbox-core 来配置scratchbox,添加用户组,如sbox。

至此,我会在当前系统的根目录下有一个/scratchbox目录文件,在/scratchbox/users/shitao

/target/sbox目录下得到了一个Linux根文件系统的目录结构。

2、用Busybox定制根文件系统所需的应用程序

     Busybox集成了一百多个最常用的Linux命令(比如init、getty、ls、cp、rm等)和工具软件,甚至还集成了一个http服务器和一个telnet服务器,并且支持Glibc和uClibc,用户可以方便的定制所需的应用程序。使用Busybox可以有效的减小bin程序的体积。

1)   下载Busybox。最新版本的Busybox可以在其官方网站www.busybox.net/download下载,这里下载busybox-1.4.1.tar.bz2。

2)   拷贝Busybox源码压缩文件到指定目录,并解压。

#cp / busybox-1.4.1.tar.bz2 /home

#cd /home

#tar xjf busybox-1.4.1.tar.bz2

#cd busybox-1.4.1

3)   对Busybox进行配置

            #make menuconfig

            在这里可以根据需要定制需要编译进busybox的应用程序和工具。

4)   编译

#make

5)   安装,在这里应该安装到我们使用Scratchbox构建的目标根文件系统的目录结构中,使用如下命令来完成

#make PREFIX=/scratchbox/users/shitao/target/sbox install

这样,我们就可以在/scratchbox/users/

shitao/target/sbox目录中的sbin,bin,usr文件目录中得到busybox文件。

4、拷贝Linux系统到CF卡

取一张CF卡,用读卡器连接到运行标准Linux操作系统的台式计算机上,首先用Fdisk命令格式化CF卡,fdisk /dev/sda1;然后建立文件格式,mkfs ext2 /dev/sda1,这里采用ext2格式,sda1代表我们通过USB口连接到计算机上的CF卡。接下来要将CF卡挂载到计算机上,以便将准备好的内核文件及根文件系统移植到CF卡上。

现在将建立好的根文件系统和编译生成的内核映像文件拷贝到CF卡上。我们可以用cp –dpR 将/scratchbox/users/shitao/target/sbox中的目录文件全部拷贝到CF卡上。

接下来是安装Grub引导程序到CF卡上,这样当CF卡插到带有bootloader引导程序的硬件设备上时,就会由Grub将内核文件进行引导并执行。安装的步骤如下:

首先,按照目标设备修改Grub安装包中的grub.conf文件。

其次,进入Grub的命令模式,在grub>提示符下输入root(hd1,0)

          最后,输入setup(hd1)

     至此,grub安装成功,CF卡上的Linux操作系统也构建成功了。

3、结论

       本文充分利用了开源软件Scratchbox和Busybox成功的在CF卡上构建了一个嵌入式Linux操作系统。通过使用Scratchbox,大大简化了Linux根文件系统的构建。Scratchbox利用自身提供的几个工具,简单的实现了工具链和函数库与根文件系统的整合。而有“瑞士军刀”之称的Busybox则为根文件系统提供了简小但丰富的应用程序命令。通过开源软件Scratchbox和Busybox的使用我们避免了传统模式需要花费大量时间和成本的弊端。

 

参考文献

[1]busybox 官方网站 http://www.busybox.net/

[2]scratchbox 官方网站 http://www.scratchbox.org/

[3]孙纪坤,张小全。嵌入式Linux系统开发技术详解-基于ARM,人民邮电出版社,2006

[4]杨延军。用busybox制作嵌入式Linux的文件系统,单片机与嵌入式系统应用,2005,4;8-10

[5] 许德新,谈振藩,胡文彬,曾薄文。嵌入式Linux在PC104平台上的构建与实现[J],应用科技,2006,33(10);35-37

 

作者简介

石涛 男

出生日期:1980年10月24日

籍贯:山东章丘

太原理工大学信息工程学院,通信与信息系统专业,硕士,主要研究方向为嵌入式系统应用。

邮箱:chinaren.taoshi@gmail.com

通信地址:太原理工大学北区3241信箱

邮编:030024

联系电话:0351-6011570,13015386790

 

师卫 男

太原理工大学信息工程学院,电路与系统

硕士导师,主要研究方向嵌入式系统应用