利用SD卡實(shí)現嵌入式Linux系統的自動(dòng)升級
(2)判斷SD卡中是否有內核映像文件
如果存在,則將其燒寫(xiě)到Flash相應的分區當中。實(shí)現這個(gè)功能需要使用到Uboot中的run_command函數,由于kernel的映像文件一般不會(huì )超過(guò)5 MB,所以在燒寫(xiě)kernel的時(shí)候不需要檢查映像文件的大小。檢查內核映像文件是否存在也是通過(guò)執行命令的方式,如果存在,那么Env環(huán)境變量fileexist的值就是YES,并且此時(shí)的內核映像已經(jīng)存在于SDRAM當中,可以直接通過(guò)命令燒寫(xiě)到Flash相應的分區當中。具體的代碼如下:

(3)判斷SD卡中是否有文件系統映像文件
如果存在,則寫(xiě)入到相應的Flash分區當中。本實(shí)驗設備上使用的文件系統是Yaffs2,通過(guò)Uboot命令燒寫(xiě)Yaffs2文件系統的時(shí)候,必須要知道它的實(shí)際大小。由于升級很可能導致文件系統大小的變化,所以這里必須將讀取到SDRAM當中的文件大小記錄下來(lái),這個(gè)工作在Uboot中已經(jīng)完成,我們只需要通過(guò)getenv(filesize)就可以獲得載入SDRAM當中的文件大小,其他的步驟和燒寫(xiě)內核映像是一樣的。具體代碼如下:

經(jīng)過(guò)上面3個(gè)步驟修改的Uboot程序可支持SD卡自動(dòng)升級的功能,需要注意這段代碼應該放在Uboot自動(dòng)加載系統之前,推薦將這些代碼放在main_loop函數中。
結語(yǔ)
本文通過(guò)定制擴展Uboot實(shí)現了用SD卡方式進(jìn)行嵌入式設備操作系統的自動(dòng)升級,這種方式不但克服了傳統升級方式的局限性,而且具有一定商業(yè)價(jià)值。目前,該方法經(jīng)過(guò)調試,系統運行正常。顯然,要通過(guò)SD卡實(shí)現系統升級,需要嵌入式設備具有SD卡接口,因此,它并不適合所有的嵌入式系統,但是這種實(shí)現機制可供借鑒。本文引用地址:http://dyxdggzs.com/article/148225.htm linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
linux相關(guān)文章:linux教程
評論