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