?

一種面向應用的嵌入式Linux內核混合裁剪方法

2011-04-07 05:50崔歡歡王永杰
關鍵詞:源代碼讀寫器內核

崔歡歡,霍 華,王永杰

(河南科技大學電子信息工程學院,河南洛陽471003)

0 前言

近年來,Linux以其源碼開放、性能穩定、可裁剪等優勢成為嵌入式操作系統的首選。Linux可作為一種通用的操作系統,應用于資源受限的、針對具體應用而設計的專用系統——嵌入式系統之前,需對內核中不同的功能模塊進行裁剪,根據軟硬件的實際情況定制Linux內核[1-2]。作為RFID系統的核心部分,RFID讀寫器具有的很重要的技術意義和市場前景,但設計開發一款既具有專用性又具有通用性的RFID手持讀寫器是當今的難題[3]。針對這個問題,本文將RFID技術和嵌入式技術相結合,根據需求裁剪定制內核,得到適用于RFID手持讀寫器的內核映像。

Linux的模塊化設計、源代碼公開和Linux內核重編譯功能使得Linux內核具有可裁剪性,但是龐大的內核源代碼結構使得分析和裁剪內核有一定的難度[4]。目前對于Linux內核的裁剪常用的方法有[5-6]:配置裁剪方法、基于代碼分析的裁剪方法和基于調用圖的裁剪方法。配置裁剪方法是根據Linux本身所提供的配置工具裁剪配置內核,將信息保存供內核編譯使用;基于代碼分析的裁剪方法是通過對內核源代碼的分析,使用條件編譯或修改源碼、直接刪除冗余代碼(文件、實現函數、相關數據結構等);基于調用圖的裁剪方法是通過分析庫函數、系統調用和內核函數的調用關系,建立基于函數間調用關系的調用圖,刪除內核中未調用到的函數。以上3種方法各有優點,但均存在不同程度粒度偏大問題?;诖?,本文將以上3種方法的優點相融合,采用一種混合的裁剪方法來提高裁剪率,并面向RFID手持讀寫器的具體應用對裁剪結果進行驗證。

1 面向RFID手持讀寫器的應用

嵌入式Linux的裁剪[7]是指在開放源碼、性能穩定的Linux源代碼的基礎上,根據特定應用和硬件平臺(x86,ARM等),適當的優化刪減代碼的過程。裁剪后的代碼符合嵌入式應用的要求,應用功能有所減少,規模更為精簡,體系結構更為緊湊,可配置性有所提高。

1.1 硬件結構分析

圖1描述了RFID手持讀寫器的相關硬件模塊:主控制器是三星公司的嵌入式ARM芯片S3C2410,其內部有4K SRAM用于Nand Flash啟動;存儲器單元(主存儲器SDRAM+輔助存儲器Nand Flash)用于存儲數據;LCD和鍵盤作為人機交互工作的接口;RFID讀寫模塊用于收發射頻信息;JTAG調試模塊和用于通訊的串口和以太網接口。

1.2 軟件系統分析

圖2對RFID手持讀寫器的軟件系統進行了層次性的描述,其中軟件層中列出了組成Linux內核的5個部分:進程調度(SCHED)、內存管理(MM)、虛擬文件系統(VFS)、網絡接口(NET)和進程間通信(IPC)。

1.3 可裁剪項分析

通過對Linux內核源碼及組成內核的5個部分的分析,得到內核模塊中可以裁剪的部分[8-9]:

(1)系統多余的進程。Linux內核中的一些模塊對于嵌入式系統并不適用,可以剔除內核對這些進程的創建和調度機制,如虛存管理模塊,同時刪除與此相關的進程。

(2)平臺無關代碼和多余硬件相關代碼。根據硬件平臺裁剪掉內核arch目錄下與該平臺無關的處理器支持代碼;另外,Linux內核支持很多硬件及其周邊設備,如硬盤、鼠標等,并不是所有嵌入式系統都需要,可以根據實際情況刪除那些無用的硬件驅動程序的相關代碼。

(3)異常處理函數。Linux內核提供的一些異常處理函數是嵌入式系統所不需要的,如:debug、divide_error、nmi、overflow、bounds等,可以根據具體情況刪除不需要的函數代碼。

(4)內存管理。Linux的內存管理采用的是基于分頁式的虛擬內存管理機制,會影響到系統的可確定性和響應時間,在嵌入式系統中并不適用可以剔除,直接使用實際內存。

(5)文件系統。Linux內核支持ext2、vfat、jffs、yaffs等多種文件系統,可嵌入式系統一般僅需要里面的幾種,可以裁剪掉不需要的文件系統來節省存儲空間。

(6)網絡協議棧。嵌入式系統可根據需求剔除系統中無需支持的網絡協議棧,僅保留需要的網絡協議棧,如僅保留TCP/IP協議棧。

2 面向應用的裁剪過程

2.1 混合裁剪方法

配置裁剪方法雖然簡單,但裁剪的最小單元為整個功能模塊粒度過大,而且缺少與應用程序具體需求的結合,造成目標代碼中存在一定量的冗余代碼?;诖a分析的裁剪方法雖然可以得到比配置更小粒度的內核,但內核中過多條件編譯語句的使用損害了源代碼的可讀性和可維護性,并導致了調試和測試的復雜性,降低了裁剪率,而且內核源碼的復雜性和軟件的不可見性,使對內核及各子模塊結構間的關系的分析變得困難,增加了裁剪的難度?;谡{用圖的裁剪方法的裁剪率雖然比前兩種方法有所提升,可以得到更小體積的內核,但裁剪粒度還有提升的空間。根據以上分析,這里使用一種混合的裁剪方法來實現更小粒度的內核。

此混合裁剪方法的思路為將裁剪分兩步進行:第一步將配置裁剪方法和基于代碼分析的裁剪方法相結合;第二步將基于調用圖的裁剪方法和基于代碼分析的裁剪方法相結合。

根據對嵌入式Linux內核的可裁剪項的分析,本文以文件系統的裁剪為例對混合的裁剪方法進行詳細的介紹。

2.2 文件系統的裁剪

Linux系統中文件系統用來組織文件和設備,文件系統的存在使得數據和設備得到有效而透明的存取訪問,Linux程序、庫、系統文件和用戶文件都在其里面包含,它構成了Linux系統上所有數據的基礎,是Linux系統中龐大復雜而又最為基本和重要的資源。

文件系統的裁剪是嵌入式Linux裁剪中最重要的部分,需要進行簡化數據結構、優化系統調用等工作。在RFID手持讀寫器硬件結構分析中,使用Nand Flash閃存芯片來存儲應用程序、數據信息等,這里使用Cramfs+Yaffs2聯合作為嵌入式文件系統。其中內核空間使用高壓縮、只讀的Cramfs作為根文件系統,用于節省存儲空間和保護根文件系統;用戶空間使用可讀寫的Yaffs2文件系統,作為系統啟動、普通文件被掛載后數據的存儲。Yaffs文件系統專為Nand Flash而設計,Yaffs2在讀/寫/刪除/垃圾回收操作及內存消耗上都優于Yaffs。

裁剪流程圖如圖3所示,具體流程如下:

(1)第一步裁剪:先用配置裁剪方法,在文件系統選項中保留對需要文件系統的支持。再用基于代碼分析的裁剪方法,使用直接刪除、修改源碼的思想,刪除fs目錄下其他文件系統的子目錄,并在相應數據結構中刪除其類型支持、修改相應系統調用。

(2)第二步裁剪:采用自上而下的思想,分析可能需要的文件系統調用。從應用程序到庫函數再到系統功能調用,分析每個系統調用函數間的關系,找出可移除的系統調用和子函數。

系統調用是連接用戶程序和內核的接口,Linux內核中與文件系統相關的有70多個。對其裁剪不僅要考慮是否需要還要考慮此系統功能上下文間的調用關系,所以保留最基本的系統調用,對其他可以裁剪的系統調用使用基于調用圖的裁剪方法。

文件系統必須保留的調用:對文件(關閉、創建、打開、讀寫)、對目錄(創建、刪除、改變)和對文件系統(安裝、卸載、創建節點、刪除鏈接)等的基本操作。圖4以文件讀寫系統的調用關系為例,介紹了基于調用圖的裁剪方法。

圖3 文件系統裁剪流程圖

從圖4得出,因為嵌入式系統中不需要支持文件多塊數據的傳輸,所以在庫函數中可以刪除函數readv和writev,及對應的系統調用sys_readv、sys_writev和僅支持此兩個系統調用的子函數do_read_ write,而也被其他系統調用調用的函數fget和fput不能刪除。

找出可能需要的系統調用后,可利用基于代碼分析的裁剪方法,使用條件編譯語句對這些系統調用的相關代碼進行修改。如在內核代碼中的系統調用及相關函數代碼、unistd.h中的系統調用編號和call.S中的系統調用表中添加條件編譯#ifdef(CONFIG_XXX_SYS_CALL)和#endif。

圖4 文件讀寫系統調用關系圖

3 內核裁剪結果的分析

根據軟硬件分析實現了RFID手持讀寫器嵌入式Linux內核的定制,對可裁剪項使用一種混合的裁剪方法進行裁剪,結果和配置裁剪方法對比,如表1所示。由表1可知:無論在內核整體還是內存管理、文件系統、網絡等方面,裁剪率均有一定程度的提高;得到294.5 K的內核映像,比配置裁剪方法減少了24.7%,比原始映像減少了38.6%,得到了一個更細粒度的內核。

4 結束語

表1 內核裁剪度結果分析

通過對已有裁剪方法優缺點的分析,本文提出一種面向應用的混合裁剪方法,并以面向RFID手持讀寫器的具體應用為例,對嵌入式Linux內核“量體裁衣”,得出可裁剪項,以文件系統的裁剪為例,詳細介紹混合裁剪方法的裁剪思路。實驗結果表明:該裁剪方法與配置方法相比,有著更小粒度、更高精度的裁剪度,得到了更小體積的內核映像。

[1] 嚴義,左鼎.基于關系矩陣的嵌入式組件裁剪方法[J].計算機工程與應用,2009,45(24):77-79.

[2] Karim Yaghmour.Building embedded linux system[M].New York:O'Reilly,2008.

[3] 魏登峰,田華.基于ARM的嵌入式RFID讀寫器設計[J].微計算機信息,2009,25(14):190-191.

[4] 顧詠楓,陳章龍.嵌入式Linux裁剪方法[J].小型微型計算機系統,2003,24(9):1697-1770.

[5] 成月良,方壽海.面向應用的嵌入式Linux裁剪方法研究與實現[J].計算機工程與設計,2009,30(11):2684-2686.

[6] 張云蓉,王培東.基于調用圖的嵌入式Linux裁剪技術研究[J].哈爾濱理工大學學報,2004,9(2):60-62.

[7] 蔡虹,沈雷,李永紅.基于覆蓋測試的嵌入式軟件自動裁剪[J].計算機工程,2010,36(1):73-75.

[8] 俞勤豐,孫涌.μC/OS-Ⅱ中內存管理方法的分析及改進[J].計算機工程,2009,35(11):280-282.

[9] 雷必成.嵌入式系統中TCP/IP協議的精簡與實現[J].微計算機信息.2006,22(17):107-109.

猜你喜歡
源代碼讀寫器內核
強化『高新』內核 打造農業『硅谷』
基于TXL的源代碼插樁技術研究
基于嵌入式Linux內核的自恢復設計
Linux內核mmap保護機制研究
軟件源代碼非公知性司法鑒定方法探析
基于語法和語義結合的源代碼精確搜索方法
微生物內核 生態型農資
揭秘龍湖產品“源代碼”
基于視頻抓拍讀寫器的高速公路防倒卡研究
基于隨機時隙的RFID讀寫器防沖突方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合