引言
目前嵌入式系統(tǒng)開(kāi)發(fā)已經(jīng)成為了計(jì)算機(jī)工業(yè)最熱門(mén)的領(lǐng)域之一,嵌入式系統(tǒng)應(yīng)用滲透到信息家電、工業(yè)控制、通信與電子設(shè)備、人工智能設(shè)備等諸多領(lǐng)域。嵌入式操作系統(tǒng)的引入大大提高了嵌入式系統(tǒng)的功能,方便了嵌入式應(yīng)用軟件的設(shè)計(jì),但相應(yīng)也占用了寶貴的嵌入式系統(tǒng)資源。同時(shí),因?yàn)榍度胧綉?yīng)用系統(tǒng)配置差別較大,I/O操作也沒(méi)有標(biāo)準(zhǔn)化,這部分驅(qū)動(dòng)軟件常常由應(yīng)用程序提供,這就要求在開(kāi)發(fā)環(huán)境中能夠?qū)τ脩暨x定的實(shí)時(shí)操作系統(tǒng)進(jìn)行剪裁和擴(kuò)展,并和應(yīng)用程序綁定在一起生成一個(gè)可運(yùn)行在目標(biāo)環(huán)境下的應(yīng)用系統(tǒng)。所以針對(duì)不同應(yīng)用需求裁減掉不需要的操作系統(tǒng)模塊,配置特定的嵌入式操作系統(tǒng)是降低系統(tǒng)硬件成本, 減少系統(tǒng)資源消耗,提高系統(tǒng)靈活性的關(guān)鍵。
嵌入式操作系統(tǒng)大多采用構(gòu)件化、模塊化的設(shè)計(jì)思想,以搭積木的方式通過(guò)互連構(gòu)造軟件因而是可配置的。但是由于操作系統(tǒng)的多樣性,不同操作系統(tǒng)提供的配置方式迥異且繁簡(jiǎn)不一。例如:風(fēng)河公司的VxWoks操作系統(tǒng),其開(kāi)發(fā)環(huán)境Tornado提供的配置工具可以對(duì)操作系統(tǒng)模塊進(jìn)行選擇和刪除,但其配置主要還是通過(guò)用戶對(duì)目標(biāo)系統(tǒng)目錄樹(shù)下相關(guān)配置文件進(jìn)行手工編輯和修改來(lái)完成的;科銀京成公司。Delta OS的配套開(kāi)發(fā)環(huán)境Lambda Tool,可以簡(jiǎn)單對(duì)內(nèi)核參數(shù)、文件系統(tǒng)參數(shù)和網(wǎng)絡(luò)系統(tǒng)參數(shù)進(jìn)行設(shè)定。由于硬 件平臺(tái)的多樣性,即使是相同操作系統(tǒng),其配置也是有差別的。應(yīng)用程序開(kāi)發(fā)者必須熟悉不同的硬件平臺(tái)和不同的操作系統(tǒng)才能進(jìn)行可行的應(yīng)用的開(kāi)發(fā),增加了應(yīng)用開(kāi)發(fā)的難度。
對(duì)于嵌入式應(yīng)用的行業(yè)開(kāi)發(fā),往往提供了多種操作系統(tǒng)供應(yīng)用開(kāi)發(fā)者選擇。如果能提供一套統(tǒng)一的操作系統(tǒng)配置工具,那么應(yīng)用開(kāi)發(fā)者不必因?yàn)檫x擇不同的操作系統(tǒng)而重新學(xué)習(xí)使用新的配置環(huán)境,必然能提高開(kāi)發(fā)效率,這在行業(yè)開(kāi)發(fā)中有著重要意義。
本文將軟件復(fù)用技術(shù)用于嵌入式操作系統(tǒng)的定制過(guò)程,提出了一個(gè)嵌入式操作系統(tǒng)定制過(guò)程的通用模型(OSTAILOR),并在此基礎(chǔ)上研究設(shè)計(jì)了基于嵌入式Linux的配置剪裁器。
1、嵌入式操作系統(tǒng)配置通用化模型
以操作系統(tǒng)抽象模塊作為操作系統(tǒng)配置的基本單位,在此基礎(chǔ)上得到了嵌入式操作系統(tǒng)配置通用化模型OSCFG。
1.1 模型概述
如圖1所示,虛線框表示建立的操作系統(tǒng)配置模型。左邊的兩個(gè)實(shí)線框表示對(duì)于操作系統(tǒng)配置模型的輸入:選擇配置的操作系統(tǒng)類型和選擇配置的操作系統(tǒng)抽象模塊。右邊的實(shí)線框表示輸出的配置生成結(jié)果:特定的配置文件。
[align=center][img=433,80]http://www.e-works.net.cn/images/128050202526093750.GIF[/img]
圖1 操作系統(tǒng)定制過(guò)程[/align] 操作系統(tǒng)配置模型的關(guān)鍵在于通用性,即對(duì)不同的操作系統(tǒng),能夠在邏輯上對(duì)操作系統(tǒng)所劃分出來(lái)的物理模塊保持透明性,因而,建模要點(diǎn)在于以下兩點(diǎn):
①對(duì)各式各樣的操作系統(tǒng)模塊進(jìn)行抽象,使之成為對(duì)應(yīng)于配置模型的抽象模塊。抽象模塊以模塊屬性文件的形式存放在構(gòu)件庫(kù),供配置選用。
②抽象模塊最后能映射為對(duì)應(yīng)于不同操作系統(tǒng)的實(shí)體信息。
在上述前提下,構(gòu)建了如圖2所示的操作系統(tǒng)配置過(guò)程模型 OSTAILOR。圖中陰影部分實(shí)現(xiàn)了配置的操作系統(tǒng)無(wú)關(guān)性,可以稱為操作系統(tǒng)抽象層。 圖2 O$1AII一0R過(guò)程模型對(duì)于具體的操作系統(tǒng)模塊實(shí)體,首先經(jīng)過(guò)模塊抽象,封裝成對(duì)應(yīng)用可見(jiàn)的操作系統(tǒng)抽象模塊。每一個(gè)操作系統(tǒng)模塊包含兩個(gè)關(guān)鍵屬性:①抽象出來(lái)的模塊名。根據(jù)此模塊名,應(yīng)用開(kāi)發(fā)人員可以知道此操作系統(tǒng)模塊具有的基本功能。②模塊層次,隸屬于不同層次的模塊具有不同的模塊粒度。一般而言,越靠近底層的模塊,粒度越細(xì)。在配置完成以后,根據(jù)用戶輸入選擇需要映射的特定操作系統(tǒng),根據(jù)此輸入選擇,模塊配置完成以后,才能選擇特定的操作系統(tǒng)映射算法將抽象的模塊映射到具體的操作系統(tǒng)功能上。
[align=center][img=352,232]http://www.e-works.net.cn/images/128050202750000000.GIF[/img]
圖2 OSTAILOR過(guò)程模型[/align]
圖2中抽象模塊配置層完成的功能還包括可根據(jù)用戶選擇,將操作系統(tǒng)抽象模塊配置成更高層次,更大粒度的模塊,供本次操作系統(tǒng)生成或下次定制使用。在這個(gè)操作系統(tǒng)定制模型中,抽象模塊配置層以下層次完成的功能是根據(jù)模塊配置層的配置結(jié)果和用戶對(duì)操作系統(tǒng)類型的選擇,完成對(duì)具體操作系統(tǒng)的映射。這部分因?yàn)榕c具體嵌入式操作系統(tǒng)相關(guān),因而具有特殊性。為了實(shí)現(xiàn)配置的通用性,也就需要考慮如何把特殊性降低到最小。
1.2 基本工作原理
(1) 配置基本流程
定制的基本流程如圖3所示。用戶瀏覽器查詢構(gòu)件庫(kù),并對(duì)用戶顯示出可選模塊,然后接收用戶對(duì)模塊的選擇,將選擇結(jié)果送至文件解析器。從構(gòu)件庫(kù)獲得對(duì)應(yīng)模塊的屬性文件。通過(guò)解析,將解析結(jié)果生成模塊結(jié)構(gòu)映射關(guān)系圖。模塊結(jié)構(gòu)關(guān)系圖中的模塊均以抽象邏輯形式存在,可以通過(guò)查找構(gòu)件庫(kù)得到它以文件形式存在物理實(shí)體信息。根據(jù)模塊結(jié)構(gòu)映射關(guān)系圖和每一個(gè)模塊的物理實(shí)體信息。生成對(duì)應(yīng)的Makefile或其它一些相關(guān)配置文件,把它提供給對(duì)應(yīng)的Make工具(編譯器、鏈接器等),最后生成系統(tǒng)的可執(zhí)行文件。
[align=center][img=462,242]http://www.e-works.net.cn/images/128050202942343750.GIF[/img]
圖3 配置基本流程[/align]
(2) 模塊抽象的層次劃分
一般說(shuō)來(lái),模塊的粒度越大,每一個(gè)模塊所包含的功能越多,其可配置性就越低;而模塊粒度越小,配置復(fù)雜度越高。為了達(dá)到配置的靈活性和方便性,并將配置中涉及到操作系統(tǒng)特殊性的地方降到最小,我們將模塊抽象出來(lái),并將其劃分為多級(jí)結(jié)構(gòu),不同層次的模塊封裝其下層模塊,形成不同的配置粒度。現(xiàn)以3層結(jié)構(gòu)進(jìn)行描述,如圖4所示。
[align=center][img=500,213]http://www.e-works.net.cn/images/128050203171250000.GIF[/img]
圖4 模塊抽象結(jié)構(gòu)[/align]
圖4中最下層是原子級(jí)模塊,它抽象了操作系統(tǒng)的基本功能,包括任務(wù)(task)、I/O驅(qū)動(dòng)(driver)、定時(shí)器(timel)、信號(hào)量(sernaphore)、消息隊(duì)列(quecue)、事件(event group)、郵箱(mailBox)、管道(pipe)等。除此之外,還包括一些基本的應(yīng)用功能。之所以取名為原子級(jí)模塊,是為了表明它是不可再分的基本模塊,是配置其它層次模塊的基礎(chǔ)。
原子級(jí)模塊的粒度存在于目標(biāo)代碼或庫(kù)文件級(jí),因?yàn)樗成涞奈锢韺?shí)體以目標(biāo)代碼或庫(kù)文件存在。雖然在圖4的層次結(jié)構(gòu)中,它也是作為抽象的邏輯模塊存在,但是它是和物理實(shí)體聯(lián)系最緊密的一層,也是模塊粒度最細(xì)的一層。因而在配置過(guò)程結(jié)束以后,通過(guò)這層映射到不同的文件,產(chǎn)生不同格式的配置文件,達(dá)到配置不同操作系統(tǒng)的目的。原子級(jí)模塊完成的只是某一特定功能的一部分,或者只是某一特定功能一個(gè)子功能,必須和其它原子級(jí)模塊相結(jié)臺(tái)才能發(fā)揮應(yīng)有的作用。因而在它的上層提出了功能級(jí)模塊的概念。
功能級(jí)模塊由原子級(jí)模塊配置生成。通過(guò)把不同的原子級(jí)模塊結(jié)合在一起,完成某一特定功能,并加大了模塊粒度。例如,配置無(wú)線上網(wǎng)的功能模塊,除了要選擇無(wú)線上網(wǎng)本身這個(gè)原子級(jí)模塊,還需要選擇操作系統(tǒng)中支持上網(wǎng)功能的原子級(jí)模塊,比如TCP/IP協(xié)議棧。
通過(guò)把功能級(jí)模塊組裝在一起,完成更強(qiáng)大的功能,就構(gòu)成了應(yīng)用級(jí)模塊。每一個(gè)應(yīng)用級(jí)模塊都是一個(gè)功能模塊集,也是粒度最大的一層模塊。對(duì)于應(yīng)用程序開(kāi)發(fā)者,為了開(kāi)發(fā)特定的應(yīng)用程序,如果不想選擇細(xì)粒度的模塊,可以直接選擇應(yīng)用級(jí)模塊來(lái)配置操作系統(tǒng)。
這種模塊化的分層結(jié)構(gòu),能為開(kāi)發(fā)者提供不同的模塊粒度,使用戶可以根據(jù)需要,選擇不同層次的模塊,以便增強(qiáng)定制過(guò)程的靈活性;而其最大的優(yōu)點(diǎn)是,對(duì)于每一次定制需求的改變,不必由最細(xì)粒度的原子級(jí)模塊配置重新做起,而是可以對(duì)需求改變進(jìn)行分析,替換掉恰當(dāng)粒度的模塊,保持其它部分不變,簡(jiǎn)化了配置過(guò)程,減少了配置時(shí)間。
(3) 模塊層次的解析
模塊解析和模塊配置過(guò)程正好相反。模塊配置是從最底層開(kāi)始,逐層構(gòu)建出高層模塊;而模塊解析則從最上層開(kāi)始,層層向下,直到尋找到最下層的映射關(guān)系,同時(shí)構(gòu)造出對(duì)應(yīng)的關(guān)系圖。
基于對(duì)模塊的封裝,每層模塊只關(guān)心和它緊密聯(lián)系的下層模塊的映射關(guān)系,即它是由下層的什么模塊所構(gòu)成的。為此,我們?cè)谂渲蒙擅恳粋€(gè)模塊時(shí),將它對(duì)下層的映射關(guān)系保存在數(shù)據(jù)庫(kù)中。
逐層解析時(shí),我們把模塊名作為關(guān)系圖的頂層結(jié)點(diǎn),并在數(shù)據(jù)庫(kù)中查找它對(duì)下層模塊的映射關(guān)系。根據(jù)映射關(guān)系中涉及的下層模塊,如果關(guān)系圖中不存在它對(duì)應(yīng)的結(jié)點(diǎn),在關(guān)系圖中添加新的結(jié)點(diǎn),每個(gè)新結(jié)點(diǎn)對(duì)應(yīng)一個(gè)下層模塊名。根據(jù)映射關(guān)系,添加圖中的拓?fù)潢P(guān)系。再將每個(gè)新結(jié)點(diǎn)作為一個(gè)新的頂層結(jié)點(diǎn),重復(fù)剛才的過(guò)程,直至最終映射到原子級(jí)構(gòu)件,則構(gòu)造出一個(gè)完整的關(guān)系圖??梢哉f(shuō),關(guān)系圖生成的過(guò)程也就是整個(gè)映射的過(guò)程。算法描述如圖5所示。
[align=center][img=490,434]http://www.e-works.net.cn/images/128050204730625000.GIF[/img]
圖5 解析算法描述[/align] (4) 配置的最終完成
到模塊層次解析過(guò)程完成為止,所有的操作均屏了操作系統(tǒng)的特殊性;但嵌入式系統(tǒng)是多樣的,不僅體現(xiàn)在操作系統(tǒng)的多樣性上,而且,即使相同的操作系統(tǒng),對(duì)應(yīng)不同的處理器,其組成也是千差萬(wàn)別的。為了生成用戶定制的具體操作系統(tǒng),根據(jù)用戶輸入選擇的操作系統(tǒng)類型,在上面解析處理生成的關(guān)系圖中,選擇出度為O的結(jié)點(diǎn)(即為原子級(jí)模塊對(duì)應(yīng)的結(jié)點(diǎn))映射到不同的操作系統(tǒng)實(shí)體,再根據(jù)不同編譯器、鏈接器能識(shí)別的規(guī)則,生成不同的makefile文件、config文件和資源文件??梢哉f(shuō),各種配置文件的生成標(biāo)志著操作系統(tǒng)定制過(guò)程的完成。
2、基于嵌入式Linux的配置剪裁器的實(shí)現(xiàn)
使用定制過(guò)程的通用模型,我們實(shí)現(xiàn)了一個(gè)嵌入式Linux的配置剪裁器。該配置剪裁器作為一個(gè)工具集成到基于嵌入式Linux的PDA手機(jī)開(kāi)發(fā)平臺(tái)中。配置剪裁器使用構(gòu)件庫(kù)管理器作為其可選抽象模塊的容器,而其輸出的配置文件則提供給項(xiàng)目管理器,由后者提交給編譯器和鏈接器進(jìn)行操作系統(tǒng)生成。三者的關(guān)系如圖6所示。
下面是三個(gè)工具的功能說(shuō)明。
[align=center][img=418,168]http://www.e-works.net.cn/images/128050204936406250.GIF[/img]
圖6 PDS手機(jī)開(kāi)發(fā)平臺(tái)結(jié)構(gòu)[/align]
(1) 配置剪裁器
①顯示從構(gòu)件庫(kù)獲得的已有模塊信息。
②根據(jù)用戶選擇,配置新的模塊,并將模塊信息存入構(gòu)件庫(kù),供下次定制時(shí)作為已有模塊使用。
③定制特定應(yīng)用開(kāi)發(fā)所需的操作系統(tǒng):用戶可以選擇構(gòu)件庫(kù)中已存在的不同粒度的模塊進(jìn)行配置。在需要編譯連接生成可下載到目標(biāo)機(jī)的目標(biāo)代碼時(shí),生成對(duì)應(yīng)的配置文件,傳給項(xiàng)目管理器。
(2) 構(gòu)件庫(kù)管理器
保存操作系統(tǒng)抽象模塊信息,供配置剪裁器查詢和使用。查詢內(nèi)容包括:①可以配置的模塊名,供配置剪裁器提取出顯示在用戶界面上,供用戶配置選擇;②每個(gè)模塊對(duì)它下一層的映射信息。根據(jù)此映射信息,可以進(jìn)行遞歸往下查找,因而支持配置剪裁器中對(duì)每個(gè)模塊的層次解析和操作系統(tǒng)映射功能。
(3) 項(xiàng)目管理器
項(xiàng)目管理器管理應(yīng)用程序的開(kāi)發(fā),因而項(xiàng)目管理器向配置剪裁器提供應(yīng)用開(kāi)發(fā)者編制的應(yīng)用程序的源文件路徑信息。嵌入式軟件的最大特點(diǎn)就是應(yīng)用程序往往不是獨(dú)立存在的,它最終和操作系統(tǒng)一道作為二進(jìn)制目標(biāo)代碼下載到目標(biāo)機(jī)。所以,配置剪裁器需把從項(xiàng)目管理器獲得的源文件路徑信息寫(xiě)入對(duì)應(yīng)的Makefile文件中。
以用戶的應(yīng)用程序開(kāi)發(fā)配置所需的應(yīng)用級(jí)模塊為例,將配置剪裁器工作步驟說(shuō)明如下:
①選擇構(gòu)件庫(kù)中已有的應(yīng)用級(jí)模塊,定制操作系統(tǒng),將配置文件路徑保存在構(gòu)件庫(kù)管理器中。
②當(dāng)收到項(xiàng)目管理器獲得具體操作系統(tǒng)配置文件的請(qǐng)求時(shí),查找構(gòu)件庫(kù),得到保存的特定應(yīng)用的配置文件路徑。根據(jù)此路徑和文件名,打開(kāi)文件進(jìn)行解析,獲得應(yīng)用所包含的應(yīng)用級(jí)模塊的個(gè)數(shù)和模塊名,生成初始的關(guān)系圖。
③根據(jù)應(yīng)用級(jí)模塊的個(gè)數(shù)和模塊名,查找構(gòu)件庫(kù),得到每個(gè)應(yīng)用級(jí)模塊的配置文件名和路徑。解析文件得到對(duì)應(yīng)的功能級(jí)模塊,將功能級(jí)模塊和對(duì)應(yīng)拓?fù)潢P(guān)系添加在關(guān)系圖中。
④以此類推,直到找到對(duì)應(yīng)的原子級(jí)模塊,最終生成一個(gè)完整的關(guān)系圖。
⑤根據(jù)關(guān)系圖查找構(gòu)件庫(kù),把原子級(jí)模塊映射到定制的操作系統(tǒng)實(shí)體上。本系統(tǒng)利用Linux自帶配置系統(tǒng),通過(guò)修改Linux的源碼系統(tǒng)中已有的Makefile和kconfig文件,來(lái)編譯內(nèi)核,生成用戶定制的操作系統(tǒng)內(nèi)核。因此原子級(jí)模塊對(duì)應(yīng)于特定操作系統(tǒng)的實(shí)體信息就是kconfig文件中需添加的配置項(xiàng),如選擇了網(wǎng)絡(luò)模塊對(duì)應(yīng)的實(shí)體信息,即“CONFIG_NET=y”配置項(xiàng)。
結(jié)語(yǔ)
通過(guò)對(duì)操作系統(tǒng)定制技術(shù)進(jìn)行研究,抽象出操作系統(tǒng)定制過(guò)程通用模型OSTAILOR,并結(jié)合863項(xiàng)目“面向PDA手機(jī)的嵌入式軟件開(kāi)發(fā)平臺(tái)”實(shí)現(xiàn)了一個(gè)嵌入式Linux的配置剪裁器。用戶可以使用本工具友好的圖形化界面對(duì)Linux內(nèi)核組件及應(yīng)用模塊進(jìn)行操作系統(tǒng)定制,自動(dòng)生成各種配置中間文件,避免了手工編寫(xiě)修改這些文件的繁瑣,從而演示了使用此模型來(lái)實(shí)現(xiàn)嵌入式操作系統(tǒng)定制過(guò)程的通用化的可行性。但是在本模型中,應(yīng)用開(kāi)發(fā)者定制了特定的操作系統(tǒng),就必須使用該操作系統(tǒng)提供的應(yīng)用編程接口(API)。若需修改定制的操作系統(tǒng),就必須替換應(yīng)用程序中對(duì)應(yīng)的API。如何在操作系統(tǒng)定制過(guò)程中,滿足應(yīng)用開(kāi)發(fā)的操作系統(tǒng)無(wú)關(guān)性,將是本課題進(jìn)一步研究的方向。