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