BLOB啟動(dòng)流程與Bootloader程序可移植性研究
大部分Bootloader的總體結(jié)構(gòu)與BLOB類(lèi)似,一般分為兩個(gè)階段運(yùn)行。其中第一階段與CPU架構(gòu)相關(guān),不同架構(gòu)CPU往往要求不同的Bootloader與之對(duì)應(yīng)[3],只有少數(shù)Bootloader能夠適用于多種架構(gòu)的CPU,如表1。
2.1 相同構(gòu)架下Bootloader移植
對(duì)于相同的CPU構(gòu)架,Bootloader移植工作大體上可以分為三部分。
(1)目標(biāo)板驅(qū)動(dòng)部分,針對(duì)特定CPU、Flash、SDRAM等對(duì)驅(qū)動(dòng)程序進(jìn)行定制。完成處理器各個(gè)I/O口的初始化、Flash描述(包括區(qū)塊大小及數(shù)量)和Flash初始化等。一個(gè)必要的工作是Flash分區(qū)表的配置,F(xiàn)lash的典型空間分配結(jié)構(gòu)如圖2所示。
(2)目標(biāo)板相關(guān)的頭文件,文件中包含了目標(biāo)板配置的宏定義,主要有系統(tǒng)工作頻率、GPIO定義、Flash 各分塊起始地址及容量、Flash 讀/寫(xiě)命令字、SDRAM寄存器配置、SDRAM起始地址及容量、內(nèi)核裝載地址等。其中大部分GPIO設(shè)置的目的是在Bootloader下做板載開(kāi)發(fā),這項(xiàng)功能不是必需的。而CPU頻率及Flash的設(shè)置則直接影響到系統(tǒng)能否啟動(dòng)。對(duì)于采用Ramdisk技術(shù)的系統(tǒng)開(kāi)發(fā),SDRAM的配置也直接關(guān)系到Kernel的加載。因此,各頭文件的代碼修改是移植過(guò)程的重點(diǎn)。
(3)Bootloader總體配置文件修改,包括目標(biāo)板聲明、指定目標(biāo)板頭文件、定制文件關(guān)聯(lián)關(guān)系等。
圖3以BLOB在PXA255[4]的目標(biāo)板上移植為例表現(xiàn)了需要增、改的關(guān)鍵文件之間的內(nèi)在聯(lián)系。
圖3中:
(1)src/blob/PXA255.c:筆者編寫(xiě)的針對(duì)PXA255目標(biāo)板驅(qū)動(dòng)文件,這里是采用默認(rèn)設(shè)置的最簡(jiǎn)情況,必要時(shí)還需對(duì)文件如Flash.c等進(jìn)行修改。
(2)include/blob/arch/PXA255.h:目標(biāo)板頭文件,它必須通過(guò)arch.h及config.h進(jìn)行指定,最終反映在configure.in中。
(3)configure.in:添加目標(biāo)板聲明,如果已有目標(biāo)板類(lèi)型,則無(wú)需修改該文件;如果沒(méi)有,則需要根據(jù)情況添加目標(biāo)板名稱(chēng)、CPU型號(hào)、必需的.o文件,如:
PXA255)
AC_MSG_RESULT(Ipaq PXA255)
AC_DEFINE(PXA255)
AC_DEFINE(USE_SERIAL3)
BLOB_PLATFORM_OBJ=″PXA255.o″
BLOB_FLASH_OBJS=″nullflash.o″
use_cpu=″PXA255″
use_lcd=″no″
(4)Makefile.am:由于添加了PXA255.c和PXA255.h,所以要在它們所在目錄的Makefile.am中進(jìn)行登記,保證configure.in和Makefile.am在進(jìn)行./configure處理時(shí)能夠生成正確的Makefile文件,最終在執(zhí)行Make命令后生成BLOB的可執(zhí)行文件。
需要注意的是Linux內(nèi)核必須根據(jù)目標(biāo)板硬件情況作相應(yīng)的設(shè)置[5],這里不展開(kāi)論述。
評(píng)論