BLOB啟動(dòng)流程與Bootloader程序可移植性研究
根據(jù)Bootloader的啟動(dòng)流程可知,對(duì)于不同架構(gòu)的CPU,盡管處理流程相似,但是實(shí)現(xiàn)方法不同,主要體現(xiàn)在啟動(dòng)的第一階段對(duì)CPU的設(shè)置上。所以這部分的硬件相關(guān)代碼基本上要重新編寫(xiě)。
多數(shù)Bootloader在stage1的代碼不易由C語(yǔ)言實(shí)現(xiàn),因而大多采用匯編語(yǔ)言實(shí)現(xiàn)。以U-boot為例,stage1代碼主要位于start.S、IO.S、Cache.S中,其中最重要的是start.S。該代碼主要針對(duì)特定處理器,對(duì)其內(nèi)部各個(gè)寄存器進(jìn)行設(shè)置并初始化CPU。主要完成設(shè)置處理器工作模式、初始化緩沖區(qū)、設(shè)置堆棧、設(shè)置中斷向量、內(nèi)存控制器初始化[6]。
完成stage1代碼編寫(xiě)之后,還需要按照相同構(gòu)架下Bootloader移植的方法對(duì)相關(guān)代碼進(jìn)行編寫(xiě)。
2.3 提高可移植性的方案設(shè)計(jì)
目前影響B(tài)ootloader可移植性的因素主要有:CPU不同架構(gòu),同一架構(gòu)不同CPU型號(hào),目標(biāo)板硬件不同結(jié)構(gòu)。針對(duì)以上問(wèn)題提出了幾點(diǎn)提高可移植性的方案設(shè)計(jì)。
(1)對(duì)于遵從GPL協(xié)議的開(kāi)源Bootloader,可以根據(jù)不同架構(gòu)和不同硬件定制相應(yīng)的驅(qū)動(dòng)文件,如各種.c和.h文件??紤]到目前嵌入式硬件種類非常多,需要大量開(kāi)源軟件開(kāi)發(fā)者的支持,盡管不能覆蓋所有硬件,但在一定范圍內(nèi)可以大大減少嵌入式系統(tǒng)開(kāi)發(fā)的工作量。
(2)在上一步的基礎(chǔ)上,采用類似Linux內(nèi)核配置的方法(如make menuconfig或make xconfig),用終端式的配置菜單對(duì)具體硬件進(jìn)行設(shè)置,減少移植過(guò)程中代碼級(jí)的修改。
在實(shí)驗(yàn)過(guò)程中實(shí)現(xiàn)了BLOB在PXA255目標(biāo)板及SA1110目標(biāo)板的移植。此項(xiàng)研究已經(jīng)應(yīng)用在清華大學(xué)精密測(cè)試技術(shù)與儀器國(guó)家重點(diǎn)實(shí)驗(yàn)室的嵌入式生物特征識(shí)別平臺(tái)上,可以實(shí)現(xiàn)BLOB、內(nèi)核鏡像、文件系統(tǒng)鏡像的下載及內(nèi)核的引導(dǎo)。
評(píng)論