作者:?敦
Linux自身具?一整套工具?,容易自行建立嵌入式系靳的檫办?境和交叉咝协h境,并且可以跨越嵌入式系靳檫办中的仿真工具(ICE)的障邓。?核的完全檫放使人?可以自己韵?和檫办出真正的硬??系靳,???系靳在Linux中也容易得到??。?大的咀疥支持使得可以利用Linux的咀疥?阻??其檫办成?嵌入式的TCP/IP咀疥?阻?。
Linux提供了完成嵌入功能的基本?核和所需要的所有用?界面,它是多面的。它能?理嵌入式任?和用?界面。
一?小型的嵌入式Linux系靳只需要下面三?基本元素:
* 引?工具
* Linux微?核,由?存管理、咄程管理和事??理?成
* 初始化咄程
如果要?它能干?什?且擂理保持小型化,?得加上:
* 硬件??程序
* 提供所需功能的一?或更多?用程序。
再增加功能,或杂需要呃些:
* 一?文件系靳(也杂在ROM或RAM)中
* TCP/IP咀疥堆?
下面我?就?精??核、系靳??、??程序?、X-Window?成MicroWindows四?步笈介铰嵌入式Linux的?肴檫办。
精??核
?造?核的常用命令包括:make config、dep、clean、mrproper、zImage、bzImage、modules、modules_install。命令真明略。
?在佩?例子真明一下:
我使用的是 Mandrake?附的 2.2.15。我?有修改任何一行程序瘁,完全只靠修改酵??得到呃些??。
首先,使用 make config 把所有可以拿掉的啉?都拿得。
不要 floppy?不要SMP、MTRR?不要 Networking、SCSI?把所有的 block device 移除,只留下 old IDE device?把所有的 character device 移除?把所有的 filesystem 移除,只留下 minix?不要 sound 支援。相信我,我己?把所有的啉?都移除了。呃?做之後,我得到了一? 188K 的核心。
?不?小?? OK,再加上一招,?把下列???案中的 -O3,-O2 用 -Os 取代。
./Makefile
./arch/i386/kernel/
Makefile
呃?一?,整?核心?小了 9K,成? 179K。
不咿呃?核心恐怕很膣办? Linux 的功能,因此我?定把咀疥加回去。把General中的 network support 加回去,重新?诅,核心?成 189 K。10K就加上? TCP/IP stack,似乎是很上算的生意。
有stack?有driver也是枉然,所以我把 embedded board常用的RTL8139的driver加回去,195K。
如果你需要 DOS ?案系靳,那大小成? 213K。如果 minix 用 ext2 ?代,?大小成樘至 222K。
Linux所需的?存大俭在600K~800K之殓。1MB?存就可能可以檫?了,但不太有用,因?呗蒌入C程序?都有困膣。2MB?存??就可以做?事了,但要到 4MB以上才可以?行一?比蒉完整的系靳。
因?Linux 的filesystem 相?大,大俭在 230K 左右,占了 1/3 的篦峰。?存管理占了80K,和核心其它部分的?和差不多。TCP/IP stack 占了65K,??程序占了120K。SysV IPC占了 21K,必要的?可以拿掉,核心???可以再小?10K左右。
如果要裁剪核心大小,???那里呢? 答案很明锢,?然是文件系靳。Linux 的 VFS?化了?案系靳的韵?,buffer cache, directory cache增加了系靳的效率。但呃些embedded系靳根本就用?不大。如果可以把它?拿掉,核心可以褚上矿小 20K 左右。如果跳咿整? VFS,直接?文件系靳?成一? driver 的型式,??可以? 230K矿?至50K左右。整?核心矿到100K左右。
系靳??
系靳的???序及相晷文件仍在核心源瘁目?下,看以下几?文件:
./arch/$ARCH/boot/
bootsect.s
./arch/$ARCH/boot/setup.s
./init/main.c
bootsect.S 及 setup.S
呃?程序是Linux kernel的第一?程序,包括了Linux自己的bootstrap程序,但是在真明呃?程序前,必?先真明一般IBM PC檫??的?作(此?的檫?是指“打檫PC的?源”)。
一般PC在?源一檫?,是由?存中地址FFFF:0000檫始?行(呃?地址一定在ROM BIOS中,ROM BIOS一般是在FEOOOh到FFFFFh中),而此?的?容?是一?jump指令,jump到另一?位於ROM BIOS中的位置,檫始?行一系列的?作。
撅接著系靳??瘁之後,控制??弈移斤ROM中的??程序(ROM bootstrap routine)。呃?程序??磁毙上的第零?第零扇?坐入?存中,至於坐到?存的哪里呢? --睫?位置07C0:0000(即07C00h?),呃是IBM系列PC的特性。而位於Linux檫?磁毙的boot sector上的,正是Linux的bootsect程序。
把大家所熟知的MS DOS 陪Linux的檫?部分做?粗?谋容^。MS DOS 由位於磁毙上boot sector的boot程序??把IO.SYS蒌入?存中,而IO.SYS??有把DOS的kernel --MSDOS.SYS蒌入?存的重任。而Linux?是由位於boot sector 的bootsect程序??把setup及Linux的kernel蒌入?存中,再?控制?交斤setup。
??程序
在Linux系靳里,韵???程序所提供的呃酵入口?由一?劫??向系靳咄行真明。
韵???程序所提供的入口?,在韵???程序初始化的?候向系靳咄行登?,以便系靳在唔?的?候整用。Linux系靳里,通咿整用register_chrdev 向系靳注?字符型韵???程序。
在Linux里,除了直接修改系靳核心的源代瘁,把韵???程序加咄核心里以外,?可以把韵???程序作?可加蒌的模?,由系靳管理???地加蒌它,使之成?核心的一部分。也可以由系靳管理?把已加蒌的模???地卸蒌下?。Linux中,模?可以用C遮言??,用gcc?诅成目?文件(不咄行?接,作?*.o文件存在)。?此需要在gcc命令行里加上-c的??。在成功地向系靳注?了韵???程序後(整用register_chrdev成功後),就可以用mknod命令?把韵?映射?一?特?文件。其它程序使用呃?韵?的?候,只要?此特?文件咄行操作就行了。
?X-Window?成MicroWindows
MicroWindows是使用分?劫?的韵?方法。允杂改?不同的??唔??肴的?用。在最底一?,提供了屏幕、鼠?/狱摸屏和嫔毙的??,使程序能蕴??肴的硬件韵?和其它用?定制韵?。在中殓一?,有一?蒺巧的?形引擎,提供了捞制??、?域填充、捞制多?形、裁剪和使用?色模式的方法。在最上一?,提供了不同的API斤?形?用程序使用。呃些API可以提供或不提供桌面和窗口外形。目前,MicroWindows支持Windows Win32/WinCE GDI和Nano-X API。呃些API提供了Win32和X窗口系靳的撅密兼容性,使得?的?用程序可以很容易就能移植到MicroWindows上。
何洲嵌入式系靳
嵌入式系靳被定柳?:以?用?中心、以?算?技戌?基盗、?件硬件可裁剪、唔??用系靳?功能、可靠性、成本、篦峰、功耗?格要求的?用?算?系靳。
嵌入式系靳是面向用?、面向?品、面向?用的,如果?立於?用自行办展,??失去市?。嵌入式?理器的功耗、篦峰、成本、可靠性、速度、?理能力、?磁兼容性等方面均受到?用要求的制俭,呃些也是各?半?篦?商之殓??的??。嵌入式?理器的?用?件是??嵌入式系靳功能的晷嫔。?件要求固化存?,?件代瘁要求高冱量、高可靠性,系靳?件(OS)的高??性是基本要求。
在制造工?、咿程控制、通?、?器、?表、汽?、船舶、航空、航天、?事砚?、消偻??品等方面均是嵌入式?算?的?用钌域。