6 U-Boot移植主要修改的文件
从移植U—Boot最小要求,U.Boot能正常启动的角度
出发, 主要考虑修改如下文件。
① <目标板>.h头文件,如include/con gs/RPxlite.h。可以是U-Boot源码中已有的目标板头文件,也可以是新命名的配置头文件;大多数的寄存器参数都是在这一文
件中设置完成的。
② <目标板>.C文件,如board/RPXlite/RPXlite.C。它是SDRAM 的驱动程序,主要完成SDRAM 的UPM 表设
置, 上电初始化。
③ Flash的驱动程序,如board/RPXlite/flash.C或
common/cfi
— flash.C。可在参考已有Flash驱动的基础上,
结合目标板Flash数据手册,进行适当修改;
④ 串口驱动,如修改cpu/mpc8xx/seria1.c串口收发器芯片使能部分。
7 U-Boot移植要点
① BDI2000的配置文件。如果采用第二种移植方法,即先烧入Flash的方法,配置项只需很少几个,就可以
进行U-Boot的烧写与调试了。对PPC 8xx系列的主板,可参考DULG文档中TQM8xx的配置文件进行相应的修改。下面,笔者以美国Embedded Planet公司的RPXlite
Dw 板为例,给出在嵌入式Linux交叉开发环境下的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移植参考板,这是进行U.Boot移植首先要明确的。可以根据目标板上CPU、Flash、SDRAM的情况, 以尽可能相一致为原则,先找出一个与所移植目标板为同一个或同一系列处理器的u.Boot支持板为移植参考板。如RPXlite DW 板可选择U.Boot源码中RPXlite板作为U-Boot移植参考板。对U.Boot移植新手, 建议依照循序渐进的原则, 目标板文件名暂时先用移植参考板的名称,在逐步熟悉U-BOOt移植基础上, 再考虑给目标板重新命名。在实际移植过程中,可用Linux命令查找移植参考板的特定代码,如grep.r RPXlite./可确定出在U-Boot中与RPXlite板有关的代码,依此对照目标板实际进行屏蔽或修改。同时, 应不局限于移植参考板中的代码, 要广泛借鉴U.BOOt中已有的代码, 更好地实现一些具体的功能。
③ U-Boot烧写地址。不同目标板,对U-Boot在Flash中存放地址的要求不尽相同。事实上,这是由处理器中断复位向量来决定的, 与主板硬件相关。对MPC8xx主板来讲,就是由硬件配置字(HRCW)决定的。也就是说,U-Boot烧写具体位置是由硬件决定的, 而不是程序设计来选择的。程序中相应U-Boot起始地址必须与硬件所确定的硬件复位向量相吻合,如RPXlite DW 板的中断复位向量设置为0x00000100。因此,U.Boot的BIN镜像文件必须烧写到Flash的起始位置。事实上, 大多数的PPC系列的处理器中断复位向量是0x00000100和0xfff00100。这也是一般所说的高位启动和低位启动的Bootloader所在位置。可通过修改u-BOot源码<目标板>.h头文件中CFG MONITOR BASE和board/<目标板>/config.mk中的TEX T
— BASE的设置来与硬件配置相对应。
④ CPU寄存器参数设置。根据处理器系列、类型不同, 寄存器名称与作用有一定差别, 必须根据目标板的实际进行合理配置。一个较为可行和有效的方法是, 借鉴参考移植板的配置,再根据目标板实际,进行合理修改。这是一个较费功夫和考验耐力的过程, 需要仔细对照处理器各寄存器定义、参考设置、目标板实际作出选择并不断测试。MPC 8XX处理器较为关键的寄存器设置为SIUMCR、PLPRCR、SCCR、BRx和ORx。
⑤ 串口调试。能从串口输出信息,即使是乱码,也可以说U.Boot移植取得了实质性突破。依据笔者调试经历, 串口是否有输出,除了与串口驱动相关外,还与Flash相关的寄存器设置有关。因为U-Boot是从Flash中被引导启动的, 如果Flash设置不正确,U.BOot代码读取和执行就会出现一些问题。因此,还需要就Flash的相关寄存器设置进行一些参数调试。同时, 要注意串口收发芯片相关引脚工作波形。依据笔者调试情况,如果串口无输出或出现乱码, 一种可能就是该芯片损坏或工作不正常。
⑥ 与启动Flash相关的寄存器BR0、OR0的参数设置,应根据目标板Flash的数据手册与BR0和OR0的相关位含义进行合理设置。这不仅关系到Flash能否正常工作, 而且与串口调试有直接的关联。
⑦ 关于CPLD电路。目标板上是否有CPLD电路丝毫不会影响U-B 00t的移植与嵌入式操作系统的正常运行。事实上,CPLD电路是一个集中将板上电路的一些逻辑关系可编程设置的一种实现方法。其本身所起的作用就是实现一些目标板所需的脉冲信号和电路逻辑, 其功能完全可以用一些逻辑电路与CPU口线来实现。
⑧ SDRAM的驱动。串口能输出以后,U.Boot移植是否顺利基本取决于SDRAM 的驱动是否正确。与串口调试相比,这部分工作更为重要,难度更大。MPC8xx目标板SDRAM 驱动涉及三部分。一是相关寄存器的设置;二是UPM 表;三是SDRAM 上电初始化过程。任何一部分有问题,都会影响U-BOot、嵌入式操作系统甚至应用程序的稳定、可靠运行。所以说,SDRAM 的驱动不仅关系到U-Boot本身能否正常运行, 而且还与后续部分相关, 是相当关键的部分。
⑨ 补充功能的添加。在获得一个能工作的U-BOot后, 就可以根据目标板和实际开发需要, 添加一些其它功能支持, 如以太网、L CD 、NVRAM 等。与串口和SDRAM 调试相比,在已有基础之上,添加这些功能还是较为容易的。大多只是在参考现有源码的基础上, 进行一些修改和配置。另外, 如果是在自主设计的主板上移植U-Boot, 那
么除了考虑上述软件因素以外, 还需要排查目标板硬件可能存在的问题, 如原理设计、PCB布线、元件好坏。
在移植过程中, 敏锐判断出故障态是硬件还是软件问题, 往往是关系到项目进度甚至移植成败的关键, 相应
难度会增加许多。
结语
完成一个目标板的移植工作后, 可考虑将移植结果以补丁的形式发送到U-Boot用户邮件列表,尤其是一些参考板的移植结果。这是使用GPL代码并遵循GPL条款的体现。可在阅读README相关补丁说明的基础上,添加适当的注释,将自己列入光荣榜(CREDITS)。如果愿意承担所移植板的后续更新工作, 可以考虑加入维护人员(MAINTAINERS)开发队伍行列。
在实际的U-Boot移植中,无法避免地会遇到一些难以预料的问题, 甚至出现倒退, 尤其是U.BOOt移植新手, 更会平添诸多难度。但笔者相信, 在逐步熟悉U.BOOt的移植方法和过程中,随着自身经验的不断积累,加之有众多热衷于开放源码人士的鼎立相助, 坚冰终会消融。
参考文献
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
1 2