PXA272啟動(dòng)引導(dǎo)程序的實(shí)現(xiàn)和功能擴(kuò)展
加載內(nèi)核、文件系統(tǒng)映像,設(shè)置啟動(dòng)參數(shù):讀取映像大小和格式,將映像從Flash定向到RAM。定向后,就可啟動(dòng) Linux 內(nèi)核。啟動(dòng)內(nèi)核前,要作些準(zhǔn)備工作:設(shè)置啟動(dòng)參數(shù)。Linux 2.4.x 以后的內(nèi)核以標(biāo)記列表(tagged list)形式傳遞啟動(dòng)參數(shù)。由Boot Loader設(shè)置常見啟動(dòng)參數(shù):ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD 等。啟動(dòng)參數(shù)列表以標(biāo)記 ATAG_CORE 開始,以標(biāo)記 ATAG_NONE 結(jié)束。
……
tags = (struct tag *)BOOT_PARAMS;
tags->hdr.tag = ATAG_CORE; //以CORE開始
tags->hdr.size = tag_size(tag_core);
……
tags = tag_next(tags);
tags->hdr.tag = ATAG_NONE; //以NONE結(jié)束
tags->hdr.size = 0;
……
Boot Loader 調(diào)用 Linux 內(nèi)核的方法是直接跳轉(zhuǎn)到內(nèi)核的第一條指令處:
theKernel = (void *)mp->dramb;//Linux內(nèi)核基址
theKernel (0, ARCH_URANIUM, 0xa0008000);
至此,Bootloader完成該作的工作,跳轉(zhuǎn)到內(nèi)核入口點(diǎn),內(nèi)核接管控制權(quán),開始啟動(dòng)Linux。
在開發(fā)板的硬件測(cè)試階段,擴(kuò)展命令接口,以協(xié)助硬件測(cè)試工作。
1.內(nèi)存測(cè)試(MEM_TEST)[5]
測(cè)試存儲(chǔ)器有3個(gè)部分:數(shù)據(jù)總線測(cè)試、地址總線測(cè)試和器件測(cè)試;優(yōu)化通用的測(cè)試程序,能測(cè)試出錯(cuò)誤,還對(duì)錯(cuò)誤進(jìn)行分析診斷,給出錯(cuò)誤原因,并定位錯(cuò)誤。
數(shù)據(jù)線測(cè)試(走1法):選擇有代表性的寫入值(0x01(單位),0x03(兩個(gè)相鄰位), 0x07(三個(gè)相連位),0x0F(四個(gè)相連位))。分別將值寫入內(nèi)存地址,寫入后立刻讀出與寫入前的值比較,相等則將寫入值邏輯左移一位作為下一次寫入值。如此。直到所有值被測(cè)試完。如有不等,則報(bào)錯(cuò)將寫入前后的值顯示出來。
地址線測(cè)試:取測(cè)試值0xaaaaaaaa,選擇測(cè)試地址,分別寫入測(cè)試值,比較寫入前后值。然后取其反值為測(cè)試值寫入測(cè)試地址。改換測(cè)試地址,按從低向高的順序依次寫入1的遞增值,比較寫入前后的值;再按上一步的地址順序?qū)懭?遞增值反值,比較寫入前后值;在每步寫入前后值的比較中如果不一致,就輸出出錯(cuò)的地址和寫入前后的值。
器件測(cè)試:用來測(cè)試器件完成性,確定器件每一位正確。選擇一組隨地址變化的值寫入內(nèi)存,再讀出比較。然后取這些值的反寫入內(nèi)存驗(yàn)證。
如測(cè)試內(nèi)存代碼放在SDRAM上,測(cè)試時(shí)會(huì)修改內(nèi)存,這樣會(huì)造成系統(tǒng)崩潰。所以測(cè)試內(nèi)存時(shí),把代碼放在PXA272片載SRAM上。
2.液晶屏測(cè)試(LCD_TEST):?jiǎn)?dòng)引導(dǎo)程序沒用到LCD,為確定目標(biāo)板的LCD正常工作,提供LCD_TEST命令測(cè)試LCD。點(diǎn)亮LCD前,初始化 LCD控制器寄存器,劃出一塊內(nèi)存作為L(zhǎng)CD顯示緩沖區(qū)。通過參數(shù)來控制寫入顯示緩沖區(qū)中的數(shù)據(jù)以顯示不同圖形。
評(píng)論