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