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