构建小型嵌入式Linux系统Word格式.docx
《构建小型嵌入式Linux系统Word格式.docx》由会员分享,可在线阅读,更多相关《构建小型嵌入式Linux系统Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
所需要的硬件为X86体系,shell界面,支持网络等,那么我们就进入linux内核的编译过程中去。
现在手头上只有linux-2.6.23.tar.gz(如果没有或需要其他版本需自行下载),这已经足够了。
1.1准备内核源码
#tar–zvxflinux-2.6.23.tar.gz
在当前目录下会出现一个linux-2.6.23目录。
如果打算把linux-2.6.23.tar.gz解压到指定目录下。
比如在主目录下建一个文件夹为workplace,那么#tarzvxflinux-2.6.23.tar.bz–C/home/rtos/workplace。
那么就把它解压到指定的文件夹workplace里了。
1.2配置内核
cdlinux-2.6.23//进入linux-2.6.23目录
makeallnoconfig//这一步的目的是把内核配置的所有选项都不选择
makemenuconfig//选择系统所需要的最小配置
make//编译内核
在配置选项时则需要使用空格键进行选取。
在每一个选项前都有个括号,但有的是中括号有的是尖括号,还有一种圆括号。
用空格键选择时可以发现,中括号里要么是空,要么是“*”,而尖括号里可以是空,“*”“M”这表示前者对应的项要么不要,要么编译到内核里;
后者则多一样选择,可以编译成模块。
而圆括号的内容是可以在所提供的几个选项中选择一项。
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y——将该功能编译进内核
N——不将该功能编译进内核
M——将该功能编译成可以在需要时动态插入到内核中的模块
在编译内核的过程中,最烦杂的事情就是这步配置工作了,有些甚至都不清楚到底该如何对这些选项进行取舍。
实际上在配置时,大部分选项可以使用其缺省值或者不选,只有小部分需要根据用户不同的需要选择。
选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;
不需要的功能就不要选;
与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。
makeallnoconfig这一步把内核配置的所有选项都不选择。
如图1可以看到所有的选项都没有被选中。
图1
下面就要开始具体的配置内核选项,makemenuconfig后出来配置界面。
如图2所示:
图2
(1)Generalsetup--->
这里面什么都没有选择,具体选项内容就不再赘述
(2)Enableloadablemodulesupport--->
这个选项可以让内核支持模块,模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。
一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。
在运行时可以加载它到内核中去,在不需要时还可以移除它。
同样都没有选择。
(3)Enabletheblocklayer--->
这个选项也是什么都没有选
(4)Processortypeandfeatures--->
主要进行以下两项的选择:
SubarchitectureType(PC-compatible)--->
这是一个比较新的特性,主要的目的是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。
这个选项可以让你选择一些其它架构。
我们一般选择PC-compatible就可以了。
如图3所示:
图3
Processorfamily(386)--->
选择cpu类型,如果想让老至386,新到P4的CPU都能运行最小系统,那么就选择386CPU,否则按自己的实际情况选择。
如图4所示:
图4
这个里面的其他选项都没有选择。
(5)Powermanagementoptions(ACPI,APM)--->
没有选择
(6)Busoptions(PCI,PCMCIA,EISA,MCA,ISA)--->
(7)Executablefileformats--->
[*]KernelsupportforELFbinaries
这个一定要选择,如果不选择,会使相当多的程序无法执行。
Kernelsupportfora.outandECOFFbinaries
a.out的执行文件是比较老的可执行代码,用在比较早期的UNIX系统上。
KernelsupportforMISCbinaries
可以让你支援別的种类的binary执行档(如:
Java、Python...etc)
这两项都不选。
如图5所示:
图5
(8)Networkingsupport--->
Networkingsupport--->
这个下面是选网卡驱动
[*]Networkingsupport网卡驱动,要选
如图6所示:
图6
Networkingoptions--->
<
*>
Packetsocket让kernel支援packet的传输,当然要选,其他选项如图7所示:
图7
(9)DeviceDrivers--->
ATA/ATAPI/MFM/RLLsupport--->
这个必须要选
EnhancedIDE/MFM/RLLdisk/cdrom/tape/floppysupport增强型设备支持的设备,除非不需要MFM/DLL/IDE硬盘的的支持,否则就应该回答Y。
IncludeIDE/ATA-2DISKsupport除非你都用SCSI裝置,不然就开这项,也可以提升效能。
generic/defaultIDEchipsetsupport普通IDE芯片组支持,应该选择
如图8所示:
图8
SCSI是一种并行接口标准,是一个通用接口,可以连接各种外围硬件。
SCSI存储设备再嵌入式系统上应用比较少见,在高可靠性的网络存储设备和服务器上常用。
它与ATA/ATAPI都是磁盘设备类型。
ATA习惯上叫IDE接口。
ATAPI是扩展的ATA接口。
和SCSI的有关的选项一概没选。
[*]Networkdevicesupport选择自己合适的网卡
[*]Ethernet(10or100Mbit)
如图9所示
图9
Characterdevices--->
[*]Legacy(BSD)PIYsupport这个必须选,否则X里的任何终端都大不开。
在DeviceDrivers里其它选项就不选择了
(10)filesystems--->
Secondextendedfssupport
[]Ext2extendedattributes
[]Ext2POSIXAccessControlLists
[]Ext2SecurityLabels
在文件系统里,只选择了ext2这种格式的文件系统,如图10所示:
图10
其它内核配置如:
Kernelhacking--->
Securityoptions--->
Cryptographicoptions--->
Libraryroutines--->
都没有选择
选择完后,exit
#make
make后的结果如图11所示:
图11
编译成功,没有错误。
期间极有可能有错误,所以需要反复,即使侥幸没有错误也不代表内核可以适用,后面会有例子为证。
1.3内核配置结果
得到arch/i386/boot/bzImage文件,#du–shbzImage看看它的大小,如图12所示:
bzImage为784KB。
为方便使用可以把它拷贝到主目录下。
图12
1.4内核配置总结
(1)在做这个系统之前,我做了内核的配置与安装。
用的是kernel-2.6.9-67.0.15.EL.src.rpm,随后配置这个的最小内核时花费巨大的时间与精力,查阅了很多资料与文档,对内核诸多选项也有了大致的甚至详细的了解,但仍出现一些错误,至今未能排除,这个过程花费一周。
然后转向配置linux-2.6.23,进展较为顺利,得到784kB的bzImage。
期间得到的bzImage大到6.5MB(默认情况下),小到612KB(未能实现要求功能)。
2.6内核在makeallnoconfig的情况下产生的bzImage为504KB。
虽然并不知道最小bzImage到底有多小,但是由此可以得出612KB还是小了点,这个bzImage在qemu上能运行但是没有实现所要求的网络功能。
后来发现这个612KB的bzImage在内核配置时确实有很多需要加进去的选项没有加进去。
(2)在多次的配置时对makemenuconfig的反复敲打,深感厌烦,于是把makemenuconfig设成命令自动补全,方法如下:
进入主目录:
#cd~
#vi.bashrc
输入complete–Wmenuconfigmake
wq保存后退出
.bashrc文件包含专用于bashshell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
下次再makemenuconfig时,只需键入makem按Tab键即可命令补全。
(3)配置内核选项的参考资料详见Linuxkernel2.6配置指南作者:
王旭东。
2用busybox制作linux根文件系统
Linux的根文件系统具有非常独特的特点,就其基本组成来说,linux的根文件系统应该包括支持linux运行的基本内容,包含着系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件。
因此,至少应包括以下几项内容:
1基本的文件系统结构,包含一些必需的目录比如:
/dev/bin/proc/etc/lib/usr/tmp等。
2基本程序运行所需要的库函数,如Glibc或uClibc
3基本的系统配置文件,比如rc,inittab等脚本文件。
4必要的设备文件支持:
/dev/hd*,/dev/tty*,/dev/fd0。
5基本的应用程序,如sh,ls,cp,mv等。
下面将对制作linux根文件系统做具体的分析:
2.1配置编译busybox
(1)选用版本为busybox-1.2.2.1
解压#tarjxvfbusybox-1.2.2.1.tar.bz2
(2)对busybox进行配置
makemenucconfig,出现如图13所示的界面
图13
BusyboxSetting--->