嵌入式機器視覺系統(tǒng)優(yōu)化研究
2 嵌入式LinuX操作系統(tǒng)優(yōu)化
嵌入式系統(tǒng)硬件資源較為有限,作為以應(yīng)用為中心的專用計算機系統(tǒng),需要對其在啟動速度、實時性、系統(tǒng)尺寸、電源管理等方面進行優(yōu)化。近年來,Linux憑借其優(yōu)良特性廣泛地應(yīng)用于嵌入式系統(tǒng)。但是,作為一種原本為PC機設(shè)計的操作系統(tǒng),設(shè)計者開始并沒有考慮嵌入式應(yīng)用對啟動速度的要求,導(dǎo)致其典型的啟動時間一般在幾十秒或以上,這對用戶來說是不能容忍的。此外,隨著Linux內(nèi)核的不斷膨脹,啟動時間越來越長。因此,加快啟動速度已經(jīng)成為嵌入式Linux系統(tǒng)亟待解決的關(guān)鍵問題之一。
由于成本的考慮,Beagleboard—xM平臺沒有Flash,它是從MicroSD卡啟動的。嵌入式Linux系統(tǒng)啟動時序如表1所示。系統(tǒng)上電后,內(nèi)部ROM程序會從SD卡加載x—loader到SRAM。x—loader負責(zé)初始化系統(tǒng)(如時鐘、RAM等),并將u—boot從SD卡中加載到RAM。u—boot負責(zé)將內(nèi)核鏡像從SD卡加載到RAM中。內(nèi)核解壓并運行,掛載文件系統(tǒng),執(zhí)行init進程,登錄系統(tǒng),最終完成系統(tǒng)的啟動。編寫perl腳本記錄串口輸出的時間,開機啟動過程各部分耗時如圖3所示。在系統(tǒng)啟動過程中,內(nèi)核解壓與運行時間、系統(tǒng)自啟動項加載時間占了整個系統(tǒng)啟動的大部分時間。本文引用地址:http://www.butianyuan.cn/article/201610/306025.htm
本文對嵌入式Linux操作系統(tǒng)采取的優(yōu)化策略如下。
1)修改并重新編譯u—boot源碼,取消開機3 s等待時間
系統(tǒng)會檢測在開機等待時間內(nèi)用戶按鈕是否被按下,如果被按下,則可以進行設(shè)置系統(tǒng)環(huán)境變量,修改啟動選項等操作。這里可以跳過這一步,減少開機時間。
2)裁剪內(nèi)核中不必要的功能部分
嵌入式Ldnux操作系統(tǒng)內(nèi)核中除了進程管理、內(nèi)存管理、任務(wù)調(diào)度等核心部分外,還提供了多種文件系統(tǒng)、網(wǎng)絡(luò)、硬件驅(qū)動、內(nèi)核調(diào)試等功能模塊,但它們并非必不可少,例如手持移動終端通常不需要NTFS等文件系統(tǒng),也不需要RAID和SCSI設(shè)備支持。所以,根據(jù)嵌入式系統(tǒng)應(yīng)用的具體需求配置Linux內(nèi)核才能減小Linux內(nèi)核的靜態(tài)映像體積,同時也能夠相應(yīng)減少這些功能模塊運行時間的開銷。
3)采用“-Os - mthumb”編譯選項進行優(yōu)化以減小內(nèi)核鏡像大小
-Os是gcc優(yōu)化選項中最深層次的優(yōu)化,相當于是對代碼進行了-O2的優(yōu)化,但不增加代碼尺寸。-mthumb表示使用16位短指令集,它具有更高的代碼密度,即占用存儲空間小,僅為32位ARM代碼規(guī)格的65%,但其性能卻下降的很少。
4)去掉內(nèi)核打印輸出
Linux系統(tǒng)啟動時,一般使用串口控制臺或VGA控制臺打印內(nèi)核啟動信息,打印速度取決于串口的速度和處理器的速度,這在大多數(shù)嵌入式系統(tǒng)中要用數(shù)百毫秒的時間。
5)用buildroot構(gòu)建輕量級的根文件系統(tǒng)
常用于構(gòu)建根文件系統(tǒng)的工具有OE(OpenEmbedded)和buildroot等。OE是重量型的交叉編譯系統(tǒng)工具,可以用來構(gòu)建復(fù)雜的根文件系統(tǒng),但配置和定制過程難度很大,而且要耗費約20 G的硬盤空間和十幾個小時的編譯時間。buildroot則是一個相當小巧靈活的交叉編譯工具,用它定制和調(diào)整軟件包十分方便,而且buildroot提供了類似Linux kernel配置采用的配置菜單,易于使用。
6)桌面環(huán)境使用X11而非Gnome或KDE
X11即X Window系統(tǒng),它是一種可以用于Unix和類Unix操作系統(tǒng)的位圖顯示視窗系統(tǒng)。Gnome和KDE是兩種相對復(fù)雜的桌面環(huán)境。對于嵌入式機器視覺系統(tǒng),如果用戶界面不追求華麗,可以使用更為簡潔的X11,以及簡單的桌面管理器twm。
7)禁用或暫緩啟動某些啟動項
為了加速啟動,可以禁用不必要的啟動項,甚至一些必要的啟動項可以在系統(tǒng)完成登錄后再啟動。具體可以通過修改/etc/init.d/下自啟動項快捷方式名稱的方法實現(xiàn)。
$cd/etc/init.d/
$mv S20network K20network
當系統(tǒng)完成開機啟動后再啟動該項目,可以用如下命令:
$K20network start
如表2所示,經(jīng)過優(yōu)化后,內(nèi)核鏡像大小由3.046 MB減小到2.797 MB,系統(tǒng)的啟動時間(從復(fù)位到開啟應(yīng)用程序)由35.171 s縮短到10.056 s,基本滿足實際應(yīng)用的需要。嵌入式Linux操作系統(tǒng)優(yōu)化取得了明顯的效果。
應(yīng)用在移動載體上的嵌入式機器視覺系統(tǒng)通常對能耗也有較高的要求。Beagleboard—xM是一款功耗較低的產(chǎn)品,不需要風(fēng)扇冷卻。電源管理主要是由PMIC模塊實現(xiàn)的。另外,通過更改系統(tǒng)的顯示設(shè)置,如屏保時間、待機時間等,來降低能耗。
3 應(yīng)用程序優(yōu)化
機器視覺系統(tǒng)往往涉及大量復(fù)雜的計算,大多采用C/C++等高效率的語言進行開發(fā)。嵌入式系統(tǒng)對應(yīng)用軟件的質(zhì)量要求很高,在嵌入式開發(fā)中須注意對代碼進行優(yōu)化,盡可能地提高代碼效率。本文從算法、代碼效率以及處理器的特性等方面出發(fā),為開發(fā)高效率嵌入式機器視覺應(yīng)用程序提供了些經(jīng)驗。
評論