其实Freescale的BSP移植文档已经将u-boot的移植步骤讲述的非常详细了,但为了以后方便查阅,还是按照自己的理解记录在这里。
获取源码
根据前一篇文章搭建好LTIB环境后就可以非常方便的导出u-boot源码了。切换到ltib目录,并运行如下指令:
./ltib -m prep -p u-boot
该指令执行需要一些时间,指令执行完成后Freescale维护的u-boot-2009.8就会出现在rpm/BUILD目录下。
为TQIMX6Q开发板创建相应的单板目录,可以参考sabresd相关的目录进行,下面是具体的步骤。
Step1. 创建board目录
创建board目录需要以下几步:
(1) 拷贝mx6q_sabresd目录为mx6q_tqimx6q,作为TQIMX6Q的board目录,指令如下:
cp -R board/freescale/mx6q_sabresd board/freescale/mx6q_tqimx6q
(2) 将该目录下mx6q_sabresd.c改名为mx6q_tqimx6q.c,指令如下:
cp board/freescale/mx6q_sabresd.c board/freescale/mx6q_tqimx6q.c
(3) 修改下该目录下的u-boot.lds文件,将该文件中的sabresd全部替换为tqimx6q。可以使用自己熟悉的文本编辑器完成该操作。
(4) 确认该目录下的Makefile文件。官方的Freescale的BSP移植手册所讲的,需要将Makefile中的sabresd替换为tqimx6q,但实际上Makefile使用的都是环境变量${board},所以不需要修改,如果您的Makefile有直接使用sabresd的话,需要替换为tqimx6q或者${board}。
至此,就完成了board目录的创建。
Step2. 创建单板配置文件
cp include/configs/mx6q_sabresd.h include/configs/mx6q_tqimx6q.h
Step3. 在u-boot根目录下的Makefile文件中添加配置项
mx6q_tqimx6q_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 mx6q_tqimx6q freescale mx6
Step4. 编译测试
export ARCH=arm
export CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-
make mx6q_tqimx6q_config
make -j8
如果以上步骤没有出错的话,此处应该是可以编译通过的。
修改内存参数
不同的开发板的内存参数不同,为了适应这块开发板,需要需改board/freescale/flash-header.S中的DCD参数。要理解这些数据的含义,需要阅读I.MX6Q和内存芯片的用户手册,这里就不一一解释了,具体的修改如下:
... ...
#else /* i.MX6Q */
dcd_hdr: .word 0x40a002D2 /* Tag=0xD2, Len=83*8 + 4 + 4, Ver=0x40 */
write_dcd_cmd: .word 0x049c02CC /* Tag=0xCC, Len=83*8 + 4, Param=0x04 */
/* DCD */
MXC_DCD_ITEM(1, IOMUXC_BASE_ADDR + 0x798, 0x000C0000)
MXC_DCD_ITEM(2, IOMUXC_BASE_ADDR + 0x758, 0x00000000)
MXC_DCD_ITEM(3, IOMUXC_BASE_ADDR + 0x588, 0x00000030)
MXC_DCD_ITEM(4, IOMUXC_BASE_ADDR + 0x594, 0x00000030)
MXC_DCD_ITEM(5, IOMUXC_BASE_ADDR + 0x56c, 0x00000030)
MXC_DCD_ITEM(6, IOMUXC_BASE_ADDR + 0x578, 0x00000030)
MXC_DCD_ITEM(7, IOMUXC_BASE_ADDR + 0x74c, 0x00000030)
MXC_DCD_ITEM(8, IOMUXC_BASE_ADDR + 0x57c, 0x00000030)
MXC_DCD