1、构建小型嵌入式Linux系统构建小型嵌入式Linux系统焦 扬2008.6.20系统要求: (1)qemu模拟 X86体系 shell界面 支持网络 系统越小越好(2)Linux内核+rootfs(使用busybox)基本步骤:(1) 编译linux最小内核得到arch/i386/boot/bzImage文件(2) 用busybox制作linux根文件系统rootfs1 编译linux最小内核 选用linux-2.6.23内核在编译linux内核之前,首先要确定自己的需求,需要让内核支持什么硬件,支持多少种分区类型和文件系统,支持哪些网卡,支持哪些网络协议。编译最小内核的目的就是把自己需要的功
2、能编译进去或者编译成模块,把不需要的裁剪掉。这也体现了Linux的最主要的特点就可裁剪。由系统要求所知:所需要的硬件为X86体系,shell界面,支持网络等,那么我们就进入linux内核的编译过程中去。现在手头上只有linux-2.6.23.tar.gz(如果没有或需要其他版本需自行下载),这已经足够了。1.1 准备内核源码# tar zvxf linux-2.6.23.tar.gz在当前目录下会出现一个linux-2.6.23目录。如果打算把linux-2.6.23.tar.gz解压到指定目录下。比如在主目录下建一个文件夹为workplace,那么 # tar zvxf linux-2.6.
3、23.tar.bz C /home/rtos/workplace。那么就把它解压到指定的文件夹workplace里了。1.2 配置内核cd linux-2.6.23 /进入linux-2.6.23目录make allnoconfig /这一步的目的是把内核配置的所有选项都不选择make menuconfig /选择系统所需要的最小配置make /编译内核在配置选项时则需要使用空格键进行选取。在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。 用空格键选择时可以发现,中括号里要么是空,要么是“*”,而尖括号里可以是空,“*”“M”这表示前者对应的项要么不要,要么编译到内核里
4、;后者则多一样选择,可以编译成模块。而圆括号的内容是可以在所提供的几个选项中选择一项。选择相应的配置时,有三种选择,它们分别代表的含义如下:Y将该功能编译进内核N不将该功能编译进内核M将该功能编译成可以在需要时动态插入到内核中的模块在编译内核的过程中,最烦杂的事情就是这步配置工作了,有些甚至都不清楚到底该如何对这些选项进行取舍。实际上在配置时,大部分选项可以使用其缺省值或者不选,只有小部分需要根据用户不同的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不
5、要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。make allnoconfig这一步把内核配置的所有选项都不选择。如图1可以看到所有的选项都没有被选中。图 1下面就要开始具体的配置内核选项,make menuconfig后出来配置界面。如图2所示:图 2(1) General setup -这里面什么都没有选择,具体选项内容就不再赘述(2) Enable loadable module support -这个选项可以让内核支持模块,模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块
6、以减少内核的体积。在运行时可以加载它到内核中去,在不需要时还可以移除它。同样都没有选择。(3) Enable the block layer -这个选项也是什么都没有选(4) Processor type and features -主要进行以下两项的选择:Subarchitecture Type (PC-compatible) -这是一个比较新的特性,主要的目的是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。如图3所示:图 3Processor family (3
7、86) -选择cpu类型,如果想让老至386,新到P4的CPU都能运行最小系统,那么就选择386CPU,否则按自己的实际情况选择。如图4所示:图 4这个里面的其他选项都没有选择。(5)Power management options (ACPI, APM) -没有选择(6)Bus options (PCI, PCMCIA, EISA, MCA, ISA) -没有选择(7)Executable file formats -* Kernel support for ELF binaries这个一定要选择,如果不选择,会使相当多的程序无法执行。Kernel support for a.out and
8、 ECOFF binariesa.out的执行文件是比较老的可执行代码,用在比较早期的UNIX系统上。Kernel support for MISC binaries可以让你支援別的种类的binary执行档(如:Java、Python . etc)这两项都不选。如图5所示:图 5(8)Networking support -Networking support - 这个下面是选网卡驱动 * Networking support 网卡驱动,要选如图6所示:图 6Networking options - Packet socket 让kernel支援packet的传输,当然要选,其他选项如图7所示
9、:图 7(9)Device Drivers -ATA/ATAPI/MFM/RLL support - 这个必须要选 Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support 增强型设备支持的设备,除非不需要MFM/DLL/IDE硬盘的的支持,否则就应该回答Y。 Include IDE/ATA-2 DISK support 除非你都用SCSI裝置,不然就开这项,也可以提升效能。 generic/default IDE chipset support 普通IDE芯片组支持,应该选择如图8所示:图 8SCSI是一种并行接口标准,是一个通用接口,可以连接各
10、种外围硬件。SCSI存储设备再嵌入式系统上应用比较少见,在高可靠性的网络存储设备和服务器上常用。它与ATA/ATAPI都是磁盘设备类型。ATA习惯上叫IDE接口。ATAPI是扩展的ATA接口。和SCSI的有关的选项一概没选。* Network device support 选择自己合适的网卡* Ethernet (10 or 100Mbit)如图9所示图9Character devices -* Legacy (BSD) PIY support 这个必须选,否则X里的任何终端都大不开。在Device Drivers 里其它选项就不选择了(10)file systems - Second ext
11、ended fs support Ext2 extended attributes Ext2 POSIX Access Control Lists Ext2 Security Labels在文件系统里,只选择了ext2 这种格式的文件系统,如图10所示:图 10其它内核配置如:Kernel hacking -Security options -Cryptographic options -Library routines -都没有选择选择完后,exit # makemake 后的结果如图11所示:图 11编译成功,没有错误。期间极有可能有错误,所以需要反复,即使侥幸没有错误也不代表内核可以适用
12、,后面会有例子为证。 1.3 内核配置结果得到 arch/i386/boot/bzImage文件,# du sh bzImage看看它的大小,如图12所示:bzImage为784KB。为方便使用可以把它拷贝到主目录下。图 12 1.4 内核配置总结(1)在做这个系统之前,我做了内核的配置与安装。用的是kernel-2.6.9-67.0.15.EL.src.rpm,随后配置这个的最小内核时花费巨大的时间与精力,查阅了很多资料与文档,对内核诸多选项也有了大致的甚至详细的了解,但仍出现一些错误,至今未能排除,这个过程花费一周。然后转向配置linux-2.6.23,进展较为顺利,得到784kB的bzI
13、mage。期间得到的bzImage大到6.5MB(默认情况下),小到612KB(未能实现要求功能)。2.6内核在make allnoconfig的情况下产生的bzImage为504KB。虽然并不知道最小bzImage到底有多小,但是由此可以得出612KB还是小了点,这个bzImage在qemu上能运行但是没有实现所要求的网络功能。后来发现这个612KB的bzImage在内核配置时确实有很多需要加进去的选项没有加进去。(2)在多次的配置时对make menuconfig 的反复敲打,深感厌烦,于是把make menuconfig设成命令自动补全,方法如下:进入主目录: # cd # vi .ba
14、shrc 输入complete W menuconfig makewq保存后退出.bashrc 文件包含专用于bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。下次再make menuconfig时,只需键入make m 按Tab键即可命令补全。(3)配置内核选项的参考资料详见Linux kernel 2.6 配置指南 作者:王旭东。2 用busybox 制作linux根文件系统 Linux的根文件系统具有非常独特的特点,就其基本组成来说,linux的根文件系统应该包括支持linux运行的基本内容,包含着系统使用的软件和库,以及所有用来为用户提供支持架构
15、和用户使用的应用软件。因此,至少应包括以下几项内容: 1 基本的文件系统结构,包含一些必需的目录比如:/dev /bin /proc /etc /lib /usr /tmp 等。 2 基本程序运行所需要的库函数,如Glibc 或uClibc3 基本的系统配置文件,比如rc,inittab等脚本文件。4 必要的设备文件支持:/dev/hd*,/dev/tty*,/dev/fd0。5 基本的应用程序,如sh,ls,cp,mv等。下面将对制作linux根文件系统做具体的分析:2.1配置编译busybox(1) 选用版本为busybox-1.2.2.1 解压 # tar jxvf busybox-1.2.2.1.tar.bz2(2) 对busybox进行配置 make menucconfig,出现如图13所示的界面图 13 Busybox Setting -
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1