U-Boot在S3C44B0上的移植方法
具體修改操作
移植操作中這些文件修改過程的具體操作為:
(1)start.S 文件的修改。start.S 是匯編語言編寫的U-Boot 程序入口代碼,位于cpu/ s3c44b0 下。
移植操作中需要對start.S 進行相應(yīng)的修改,具體修改內(nèi)容如下。
①設(shè)置WTCON = 0x0,禁止看門狗定時器,避免處理器強行復位。
②設(shè)置INTMSK = 0x7ffffff,禁止所有中斷。Bootloader 的執(zhí)行過程中不必響應(yīng)任何中斷。
③根據(jù)嵌入式微處理器工作主頻,修改宏CONFIG- S3C44B0 - CLOCK- SPEED,使處理器能
夠正常工作,本文的目標板上S3C44B0工作主頻為66 MHz。在U-Boot 源程序中多處用到該宏,所以根據(jù)不同的處理器工作主頻進行相應(yīng)修改。
④ 設(shè)置PLLCON寄存器。PLLCON鎖相環(huán)控制寄存器中儲存有計算系統(tǒng)時鐘的相關(guān)參數(shù),為了產(chǎn)生正確的系統(tǒng)時鐘,必須根據(jù)外接晶振頻率和處理器工作主頻確定各個倍頻系數(shù)。根據(jù)S3C44B0提供的計算式(1) 和式(2) 計算倍頻系數(shù)M 、P、S 和PLLCON的值。設(shè)PLLCON值為Y為
式中, f in為晶振頻率, f out為S3C44B0 微處理器工作主頻,通常s 取1,使P + 2 = fin/2MHz ,可求得P。
(2)memsetup.S的修改。memsetup.S代碼是對存儲器空間的初始化,在start.S中被調(diào)用。修改內(nèi)存映射相關(guān)參數(shù),SDRAM 的刷新速度等,根據(jù)不同嵌入式系統(tǒng)板修改。
(3) /include/configs目錄下嵌入式系統(tǒng)板頭文件的修改。為了使串口能夠正常工作,需要設(shè)置正確的波特率。本文嵌入式系統(tǒng)板的串口傳輸波特率為 115 200 bps。根據(jù)片上資源配置,修改內(nèi)存映射相關(guān)參數(shù)。該頭文件里還定義了U-Boot的一些環(huán)境變量,這時可以不用修改, U-Boot啟動后可以通過setenv命令來設(shè)定。其它參數(shù)與啟動操作系統(tǒng)內(nèi)核有關(guān),需要與內(nèi)核啟動參數(shù)相匹配。
(4) 為了使串口能夠正常工作,初始化串口4個相關(guān)寄存器。當只有一個串口時,只需對UART0的FIFO控制寄存器UFCON0、塊控制寄存器 UL2CON0、控制寄存器UCON0、波特率除數(shù)寄存器UBRDIV0修改, S3C44B0的串口初始化函數(shù)在/cpu/ s3c44b0/ serial.c 文件中。
如果串口不能正常工作,可能是由于串口時鐘設(shè)置錯誤。查看UBRDIV0寄存器內(nèi)容是否計算正確,查閱S3C44B0 手冊由式(3) 計算,設(shè)UBRDIVO值為0,串口波特率為b,處理器主頻為M, 則
U = (int) ( M/ b ×16) - 1 (3)
式中,b = 115 200 bps,M = 66 MHz。
(5) 根據(jù)嵌入式系統(tǒng)板的配置,對S3C44B0 相應(yīng)的I/ O 寄存器內(nèi)容修改,修改源文件/ board/smdk4110/ smdk4110.c。由于SMDK4110 嵌入式系統(tǒng)板選用的FLASH 型號不是SST39VF160,而snds110嵌入式系統(tǒng)板選用的是SST39VF160 ,所以用snds110目錄下的flash.c 替換原來的flash.c,使FLASH 芯片正常工作。
移植的基本工作已經(jīng)作完,進入U-Boot主目錄,在Shell下輸入make命令編譯U-Boot,編譯后生成最終可以下載到FLASH中的uboot .bin 文件。
U-Boot 燒寫及運行檢查
需借助FLASH芯片燒寫工具將編譯好的U-Boot.bin 文件燒寫進FLASH,檢查U-Boot是否能正常工作。本文使用針對ARM處理器、運行在Lin2ux操作系統(tǒng)上的簡易調(diào)試器軟件J tager移植U-Boot。J tager支持本文基于ARM7TDMI核的S3C44B0 處理器的調(diào)試和對SST39VF160 FLASH芯片的讀寫。由于J tager是符合GPL公約、開放源代碼的項目軟件,用戶可以免費從因特網(wǎng)獲得該軟件。
燒寫完畢后,復位開發(fā)板,打開超級終端可以看到U-Boot的提示符。如果這時沒有按任意鍵,U-Boot將自動加載操作系統(tǒng)內(nèi)核和文件系統(tǒng)。若是按下任意鍵,則U-Boot停止自動加載,進入U-Boot命令行,可以輸入命令進行調(diào)試。
結(jié) 論
本文結(jié)合分析U-Boot的運行機理和移植Boot-loader的必要條件,研究了U-Boot在基于S3C44B0的嵌入式系統(tǒng)板上的移植方法及具體的軟件修改方法。本文移植情況是在硬件資源固定、不改變Boot-loader 框架前提下,對與嵌入式目標板和CPU 相關(guān)的代碼進行修改。嵌入式開發(fā)人員應(yīng)該在清楚了Bootloader 工作機理、移植條件之后,針對自己的目標板進行移植工作,在遇到不同的目標板時能夠靈活的選用合適的Bootloader,根據(jù)具體情況裁剪Bootloader,最大限度地發(fā)揮Bootloader的功能。本文選用的Bootloader U-Boot目前能穩(wěn)定地運行在使用的嵌入式系統(tǒng)板上。通過U-Boot可以實現(xiàn)串口與PC通信,查看、修改內(nèi)存,引導u Clinux嵌入式操作系統(tǒng)等功能。前期的移植工作是嵌入式系統(tǒng)開發(fā)的必要環(huán)節(jié),在此基礎(chǔ)上可以進行深入的嵌入式系統(tǒng)開發(fā),希望本文能為作相關(guān)工作的開發(fā)者提供參考。
評論