3 U-Boot的移植
U-Boot在设计时已考虑到支持使用不同CPU处理器的开发板,根据具体板级硬件配置的设计要求,修改与其相关的源代码,将U-Boot移植到新的开发板上。这里开发板TDS8265外围接口主要有100 M网口、RS232串口和JTAG调试接口等。
3.1 修改U-Boot源代码
为了简化移植工作,可在U-Boot源码中选择一个与开发板接近的参考平台,然后从移植U-Boot的要求和开发板能正常启动的角度出发进行修改。
这里以在U-Boot/board目录下为TDS8265开发板新建文件夹TDS8265为例进行说明。
1)修改头文件TDS8265.h路径是U-Boot/include/configs/TDS8265.h,是开发板的主要配置元件,配置CPU、系统时钟、SDRAM、Flash以及其他开发板相关信息。设置CPU寄存器参数,需仔细对照处理器datasheet中各寄存器的定义、参考设置、目标板实际情况等做出选择并测试。MPC82xx系列处理器较为关键的寄存器有SIUMCR、PS-DMR、SCCR、BRx、ORx等。设置CPU寄存器基地址IMMR时,注意与硬件配置相对应。如:
设置与Flash控制相关的寄存器BR0、OR0时,根据目标板所用Flash的数据手册与BR0和OR0的相关位含义合理设置,这不仅关系到Flash能否正常工作,而且与串口调试直接相关。设置Flash、SDRAM,包括基址、大小、环境变量的偏移,内存刷新周期。设置环境变量,网络接口,IP地址,MAC地址,用于网络下载和启动;设置Linux内核启动参数init=/sbin/init。
2)编写tds8265.c文件 路径是U-Boot/board/tds8265/tds8265.c。tds8265.c是目标板的SDRAM的驱动程序,涉及I/0端口表、相关寄存器的设置及SDRAM上电初始化过程3个主要部分。任何一部分有问题,都会影响U-Boot、嵌入式操作系统甚至应用程序的运行,所以SDRAM的驱动不仅关系到U-Boot本身能否正常运行,而且还与后续部分相关。根据MPC8265处理器datasheet和开发板的硬件电路图,配置8265的I/0端口表;设置寄存器PSDMR和BRl、0R1;向SDRAM中写入8次以初始化SDRAM等。SDRAM的初始化是由/lib_ppc/board.c中的board_init_f()调用的,入口为tds8265.c的函数initdram。
3)修改config.mk文件 路径是U-Boot/board/tds8265/config.mk。修改中,对该文件中的TEXT_BASE赋值应与TDS8265.h中对CF-G_FLASH_BASE的赋值保持一致。
4)编写flash.c文件 路径是U-Boot/board/tds8265/flash.c。flash.c是Flash的驱动程序,是U-Boot读/写、删除Flash的源代码
文件,其中包括多个函数,以实现不同的操作。如:
编写flash.c文件时需参考Flash的数据手册,严格按照其中的说明实现Flash的各种操作。
5)创建U-boot.lds,U-boot.lds.debug,makefile文件 这些文件均在目录U-Boot/board/tds8265之下。设置U-boot中各个目标文件的连接地址。
6)修改MAKEALL文件 路径是U-Boot/MAKEALL。因为使用的是MPC8265,属于82xx系列,所以在“LIST_82xx”下加入目标板名称“TDS8265”。
7)修改Makefile文件 路径是U-Boot/Makefile。在Makefile文件中增加TDS8265开发板的配置行,指定交叉编译器的完整路径名。