?? 嵌入式系統(tǒng)中u-boot基本特點(diǎn)及其移植方法.txt
字號(hào):
common/cfi — flash.C。可在參考已有Flash驅(qū)動(dòng)的基礎(chǔ)上, 結(jié)合目標(biāo)板Flash數(shù)據(jù)手冊(cè),進(jìn)行適當(dāng)修改;
④ 串口驅(qū)動(dòng),如修改cpu/mpc8xx/seria1.c串口收發(fā)器芯片使能部分。
7 U-Boot移植要點(diǎn)
① BDI2000的配置文件。如果采用第二種移植方法,即先燒入Flash的方法,配置項(xiàng)只需很少幾個(gè),就可以 進(jìn)行U-Boot的燒寫與調(diào)試了。對(duì)PPC 8xx系列的主板,可參考DULG文檔中TQM8xx的配置文件進(jìn)行相應(yīng)的修改。下面,筆者以美國(guó)Embedded Planet公司的RPXlite Dw 板為例,給出在嵌入式Linux交叉開(kāi)發(fā)環(huán)境下的BDI2000參考配置文件以作參考。
;bdiGDB configurationfileforRPXliteDW orLITE DW
[INIT】
;init core register
WSPR 149 0x2002000F ;DER :set debug enable
;register
WSPR 149 0x2002000F ;DER :enable SYSIE for BDI
;Flash Program
WSPR 638 oxFA200000 ;IMMR :internal memory at
;0xA200000
WM 32 oxFA200004 0xFFFFFF89 ;SYPCR
[TARGET]
CPUCLOCK 4000000 ;the CPU clock rate after processing
;the init list
BDIMODE AGENT :the BDI WOrking mode
(LOADONLY | AGENT)
BREAKMODE HARD ;SOFT or HARD,HARD uses PPC
;hardware breakpoints
[HOST]
IP l72.16.115.6
FILE ulmage.litedw
FORMAT BIN
LOAD M ANUAL ;load code MANUAL or AUTO after rese
DEBUGPORT 2001
START 0x0100
[FLASH]
CHIPTYPE AM29BX8 ;Flash type(AM29F l AM29BX8
;AM29BX16 f I28BX8 f 128BX16)
CHIPSIZE 0x400000 ;The size of one flash chip in bytes
BUSWIDTH 32 ;The width of the flash memory bus
;inbits(8f 16f 32)
WORKSPACE 0xFA202000 ;RAM buffer for fast flash
;programming
FILE u-boot.bin ;The file to program
FORMAT BIN 0x00000000
ERASE 0x00000000 BLOCK
ERASE OxO0008000 BLOCK
ERASE 0x00010000 BL0CK
ERASE 0x000l8000 BLOCK
[REGS]
DMM 1 OxFA200000
FILE reg823.def
② U-Boot移植參考板,這是進(jìn)行U.Boot移植首先要明確的。可以根據(jù)目標(biāo)板上CPU、Flash、SDRAM的情況, 以盡可能相一致為原則,先找出一個(gè)與所移植目標(biāo)板為同一個(gè)或同一系列處理器的u.Boot支持板為移植參考板。如RPXlite DW 板可選擇U.Boot源碼中RPXlite板作為U-Boot移植參考板。對(duì)U.Boot移植新手, 建議依照循序漸進(jìn)的原則, 目標(biāo)板文件名暫時(shí)先用移植參考板的名稱,在逐步熟悉U-BOOt移植基礎(chǔ)上, 再考慮給目標(biāo)板重新命名。在實(shí)際移植過(guò)程中,可用Linux命令查找移植參考板的特定代碼,如grep.r RPXlite./可確定出在U-Boot中與RPXlite板有關(guān)的代碼,依此對(duì)照目標(biāo)板實(shí)際進(jìn)行屏蔽或修改。同時(shí), 應(yīng)不局限于移植參考板中的代碼, 要廣泛借鑒U.BOOt中已有的代碼, 更好地實(shí)現(xiàn)一些具體的功能。
③ U-Boot燒寫地址。不同目標(biāo)板,對(duì)U-Boot在Flash中存放地址的要求不盡相同。事實(shí)上,這是由處理器中斷復(fù)位向量來(lái)決定的, 與主板硬件相關(guān)。對(duì)MPC8xx主板來(lái)講,就是由硬件配置字(HRCW)決定的。也就是說(shuō),U-Boot燒寫具體位置是由硬件決定的, 而不是程序設(shè)計(jì)來(lái)選擇的。程序中相應(yīng)U-Boot起始地址必須與硬件所確定的硬件復(fù)位向量相吻合,如RPXlite DW 板的中斷復(fù)位向量設(shè)置為0x00000100。因此,U.Boot的BIN鏡像文件必須燒寫到Flash的起始位置。事實(shí)上, 大多數(shù)的PPC系列的處理器中斷復(fù)位向量是0x00000100和0xfff00100。這也是一般所說(shuō)的高位啟動(dòng)和低位啟動(dòng)的Bootloader所在位置。可通過(guò)修改u-BOot源碼<目標(biāo)板>.h頭文件中CFG MONITOR BASE和board/<目標(biāo)板>/config.mk中的TEX T — BASE的設(shè)置來(lái)與硬件配置相對(duì)應(yīng)。
④ CPU寄存器參數(shù)設(shè)置。根據(jù)處理器系列、類型不同, 寄存器名稱與作用有一定差別, 必須根據(jù)目標(biāo)板的實(shí)際進(jìn)行合理配置。一個(gè)較為可行和有效的方法是, 借鑒參考移植板的配置,再根據(jù)目標(biāo)板實(shí)際,進(jìn)行合理修改。這是一個(gè)較費(fèi)功夫和考驗(yàn)?zāi)土Φ倪^(guò)程, 需要仔細(xì)對(duì)照處理器各寄存器定義、參考設(shè)置、目標(biāo)板實(shí)際作出選擇并不斷測(cè)試。MPC 8XX處理器較為關(guān)鍵的寄存器設(shè)置為SIUMCR、PLPRCR、SCCR、BRx和ORx。
⑤ 串口調(diào)試。能從串口輸出信息,即使是亂碼,也可以說(shuō)U.Boot移植取得了實(shí)質(zhì)性突破。依據(jù)筆者調(diào)試經(jīng)歷, 串口是否有輸出,除了與串口驅(qū)動(dòng)相關(guān)外,還與Flash相關(guān)的寄存器設(shè)置有關(guān)。因?yàn)閁-Boot是從Flash中被引導(dǎo)啟動(dòng)的, 如果Flash設(shè)置不正確,U.BOot代碼讀取和執(zhí)行就會(huì)出現(xiàn)一些問(wèn)題。因此,還需要就Flash的相關(guān)寄存器設(shè)置進(jìn)行一些參數(shù)調(diào)試。同時(shí), 要注意串口收發(fā)芯片相關(guān)引腳工作波形。依據(jù)筆者調(diào)試情況,如果串口無(wú)輸出或出現(xiàn)亂碼, 一種可能就是該芯片損壞或工作不正常。
⑥ 與啟動(dòng)Flash相關(guān)的寄存器BR0、OR0的參數(shù)設(shè)置,應(yīng)根據(jù)目標(biāo)板Flash的數(shù)據(jù)手冊(cè)與BR0和OR0的相關(guān)位含義進(jìn)行合理設(shè)置。這不僅關(guān)系到Flash能否正常工作, 而且與串口調(diào)試有直接的關(guān)聯(lián)。
⑦ 關(guān)于CPLD電路。目標(biāo)板上是否有CPLD電路絲毫不會(huì)影響U-B 00t的移植與嵌入式操作系統(tǒng)的正常運(yùn)行。事實(shí)上,CPLD電路是一個(gè)集中將板上電路的一些邏輯關(guān)系可編程設(shè)置的一種實(shí)現(xiàn)方法。其本身所起的作用就是實(shí)現(xiàn)一些目標(biāo)板所需的脈沖信號(hào)和電路邏輯, 其功能完全可以用一些邏輯電路與CPU口線來(lái)實(shí)現(xiàn)。
⑧ SDRAM的驅(qū)動(dòng)。串口能輸出以后,U.Boot移植是否順利基本取決于SDRAM 的驅(qū)動(dòng)是否正確。與串口調(diào)試相比,這部分工作更為重要,難度更大。MPC8xx目標(biāo)板SDRAM 驅(qū)動(dòng)涉及三部分。一是相關(guān)寄存器的設(shè)置;二是UPM 表;三是SDRAM 上電初始化過(guò)程。任何一部分有問(wèn)題,都會(huì)影響U-BOot、嵌入式操作系統(tǒng)甚至應(yīng)用程序的穩(wěn)定、可靠運(yùn)行。所以說(shuō),SDRAM 的驅(qū)動(dòng)不僅關(guān)系到U-Boot本身能否正常運(yùn)行, 而且還與后續(xù)部分相關(guān), 是相當(dāng)關(guān)鍵的部分。
⑨ 補(bǔ)充功能的添加。在獲得一個(gè)能工作的U-BOot后, 就可以根據(jù)目標(biāo)板和實(shí)際開(kāi)發(fā)需要, 添加一些其它功能支持, 如以太網(wǎng)、L CD 、NVRAM 等。與串口和SDRAM 調(diào)試相比,在已有基礎(chǔ)之上,添加這些功能還是較為容易的。大多只是在參考現(xiàn)有源碼的基礎(chǔ)上, 進(jìn)行一些修改和配置。另外, 如果是在自主設(shè)計(jì)的主板上移植U-Boot, 那
么除了考慮上述軟件因素以外, 還需要排查目標(biāo)板硬件可能存在的問(wèn)題, 如原理設(shè)計(jì)、PCB布線、元件好壞。
在移植過(guò)程中, 敏銳判斷出故障態(tài)是硬件還是軟件問(wèn)題, 往往是關(guān)系到項(xiàng)目進(jìn)度甚至移植成敗的關(guān)鍵, 相應(yīng)
難度會(huì)增加許多。
結(jié)語(yǔ)
完成一個(gè)目標(biāo)板的移植工作后, 可考慮將移植結(jié)果以補(bǔ)丁的形式發(fā)送到U-Boot用戶郵件列表,尤其是一些參考板的移植結(jié)果。這是使用GPL代碼并遵循GPL條款的體現(xiàn)。可在閱讀README相關(guān)補(bǔ)丁說(shuō)明的基礎(chǔ)上,添加適當(dāng)?shù)淖⑨專瑢⒆约毫腥牍鈽s榜(CREDITS)。如果愿意承擔(dān)所移植板的后續(xù)更新工作, 可以考慮加入維護(hù)人員(MAINTAINERS)開(kāi)發(fā)隊(duì)伍行列。
在實(shí)際的U-Boot移植中,無(wú)法避免地會(huì)遇到一些難以預(yù)料的問(wèn)題, 甚至出現(xiàn)倒退, 尤其是U.BOOt移植新手, 更會(huì)平添諸多難度。但筆者相信, 在逐步熟悉U.BOOt的移植方法和過(guò)程中,隨著自身經(jīng)驗(yàn)的不斷積累,加之有眾多熱衷于開(kāi)放源碼人士的鼎立相助, 堅(jiān)冰終會(huì)消融。
參考文獻(xiàn)
1 http://cvs.sourceforge.net/viewcvs.py/u-boot/u-boot/
2 http://www.denx.de/twiki/bin/view/DULG/Manual
3 Motorola.PowerPC MPC823 IJser,S Manual
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -