赞
踩
石涛 师卫
(太原理工大学信息工程学院 山西省 太原市 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
师卫 男
太原理工大学信息工程学院,电路与系统
硕士导师,主要研究方向嵌入式系统应用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。