基于PC/104平臺(tái)嵌入式Linux系統(tǒng)核心定制方法
在基于PC/104平臺(tái)的嵌入式Linux研制過(guò)程中,進(jìn)行核心定制的主要目的是從需求出發(fā)使系統(tǒng)最大程度地滿足應(yīng)用的需要、最大程度地適應(yīng)系統(tǒng)硬件平臺(tái)、最優(yōu)化地支持系統(tǒng)外圍設(shè)備和應(yīng)用程序,并且盡量減少對(duì)系統(tǒng)資源的占用、減少系統(tǒng)功耗,增強(qiáng)系統(tǒng)的安全性、穩(wěn)定性、可靠性,另外使系統(tǒng)真正地實(shí)現(xiàn)產(chǎn)權(quán)自主化。
內(nèi)核定制
一般操作系統(tǒng)的內(nèi)核從體系結(jié)構(gòu)角度可以劃分為兩種:微內(nèi)核體系結(jié)構(gòu)、單內(nèi)核體系結(jié)構(gòu)。微內(nèi)核體系結(jié)構(gòu)只在內(nèi)核中包括了一些基本的內(nèi)核功能,其它部分在用戶內(nèi)存空間運(yùn)行,這種結(jié)構(gòu)需要在各層之間進(jìn)行調(diào)用,因此會(huì)有一定的消耗,使執(zhí)行效率不如單內(nèi)核體系結(jié)構(gòu)。Linux采用單內(nèi)核體系結(jié)構(gòu),內(nèi)核的所有部分都集中在一起,這樣能使系統(tǒng)的各部分直接溝通,有效地縮短任務(wù)之間的切換時(shí)間,提高了系統(tǒng)的響應(yīng)速度,實(shí)時(shí)性好并提高了CPU的利用率,但在系統(tǒng)比較大的時(shí)候體積也比較大,與嵌入式系統(tǒng)容量小、資源有限的特點(diǎn)不符合,因此需要進(jìn)行非常精細(xì)的定制以適應(yīng)嵌入式系統(tǒng)的需要。
內(nèi)核版本
Linux 的源程序是完全公開(kāi)的,任何人只要遵循GPL,就可以對(duì)內(nèi)核加以修改并發(fā)布給他人使用。Linux的開(kāi)發(fā)采用的是雙樹(shù)系統(tǒng)。一個(gè)樹(shù)是穩(wěn)定樹(shù)(stable tree),另一個(gè)樹(shù)是非穩(wěn)定樹(shù)(unstable tree)或稱開(kāi)發(fā)樹(shù)(development tree)。一些新特性、實(shí)驗(yàn)性改進(jìn)等都將首先在開(kāi)發(fā)樹(shù)中進(jìn)行,如果在開(kāi)發(fā)樹(shù)中所做的改進(jìn)也可以應(yīng)用于穩(wěn)定樹(shù),那么在開(kāi)發(fā)樹(shù)中經(jīng)過(guò)測(cè)試以后,在穩(wěn)定樹(shù)中將進(jìn)行相同的改進(jìn)。一旦開(kāi)發(fā)樹(shù)經(jīng)過(guò)了足夠的發(fā)展,開(kāi)發(fā)樹(shù)就會(huì)成為新的穩(wěn)定樹(shù)。開(kāi)發(fā)樹(shù)就體現(xiàn)在源程序的版本號(hào)中;源程序版本號(hào)的形式為x.y.z,對(duì)于穩(wěn)定樹(shù)來(lái)說(shuō),y是偶數(shù);對(duì)于開(kāi)發(fā)樹(shù)來(lái)說(shuō),y比相應(yīng)的穩(wěn)定樹(shù)大一(是奇數(shù))。到目前為止,穩(wěn)定樹(shù)的最高版本是2.4.21,開(kāi)發(fā)樹(shù)的最新版本是2.5.73。本項(xiàng)目采用的內(nèi)核版本是2.2.20,選擇2.2.20版本內(nèi)核的主要原因有:
a.版本為2.0及以前內(nèi)核中的設(shè)備驅(qū)動(dòng)不如2.2版本的全面;
b.版本為2.2的內(nèi)核增加了很多新特性;
c.新的版本為2.4的內(nèi)核對(duì)PC/104的CPU塊支持不好;
d.由于不明原因版本為214的內(nèi)核對(duì)PC/104 ;
e.版本為2.4內(nèi)核相對(duì)龐大,編譯后的內(nèi)核文件也相對(duì)較大;
f.版本為2.2的內(nèi)核已完全能夠滿足本項(xiàng)目的需要。
目前,大多數(shù)面向數(shù)據(jù)采集的嵌入式Linux研制工作都是基于版本2.0/2.2內(nèi)核進(jìn)行的。實(shí)際上,內(nèi)核版本的提升,其復(fù)雜度也隨之升高,也會(huì)給嵌入式系統(tǒng)的定制工作帶來(lái)很多的困難。
內(nèi)核設(shè)置
內(nèi)核設(shè)置工作可以通過(guò)直接修改內(nèi)核源代碼中的Make file文件、Config.in文件和內(nèi)核源代碼根目錄下的.config文件來(lái)完成。內(nèi)核源代碼中的每個(gè)目錄都有各自的用途,每個(gè)子目錄下也都有相應(yīng)的Make file文件。例如,在目錄drivers/block/ Config.in文件中有如下語(yǔ)句:
if[“$CONFIG_BLK_DEV_HD_DE”=
“y”-o“$CONFIG_BLK_DEV_HD_ONLY”=
“y”];then
define_boolCONFIG_BLK_DEV_HDy
else
define_boolCONFIG_BLK_DEV_HDn
fi
這段語(yǔ)句的作用是定義在塊設(shè)備中DE塊設(shè)備驅(qū)動(dòng)可以被編譯在內(nèi)核中也可以被編譯成內(nèi)核模塊。采用修改配置文件的方式設(shè)置內(nèi)核比較復(fù)雜,而且容易出現(xiàn)錯(cuò)誤,但是對(duì)深入剖析和理解內(nèi)核幫助很大。比較有效的方式還是直接利用Linux內(nèi)核提供的工具進(jìn)行內(nèi)核設(shè)置。在Linux源代碼目錄下,Linux內(nèi)核設(shè)置命令是:
# make menu config
命令執(zhí)行后會(huì)顯示一個(gè)字符型菜單配置環(huán)境,在該環(huán)境中有以下選項(xiàng),通過(guò)這些選項(xiàng)設(shè)置可以定制Linux內(nèi)核的各項(xiàng)功能,并對(duì)內(nèi)核實(shí)現(xiàn)裁減。下面對(duì)主要設(shè)置選項(xiàng)進(jìn)行介紹:
(1) Code maturity level options代碼成熟等級(jí)。此處只有一項(xiàng):prompt for development and/or incomplete code/drivers,如果要試驗(yàn)現(xiàn)在仍處于實(shí)驗(yàn)階段的功能,就必須把該項(xiàng)選擇為Y了;否則可以把它選擇為N。在這部分,設(shè)定是否允許內(nèi)核的一些試驗(yàn)選項(xiàng)被使用。 linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論