热度 14
2015-5-8 10:33
1385 次阅读|
0 个评论
配合天嵌最新推出的开发平台TQI.MX6Q,天嵌近期推出一系列关于TQI.MX6Q的嵌入式分享文章。本文由技术博主girlkoo编写,详述新版BSP之u-boot移植流程。 为了提高移植效率,还是考虑移植Freescale维护的3.10版本的内核。 源码获取 Freescale维护的3.10的内核是使用git管理的,但是直接使用git下载代码会比较慢,下面是我下载好的uboot和kernel: I.MX6Q BSP源码(Freescale官方维护) 代码下载好后,先将u-boot解压到工作目录,然后在终端下切换到uboot根目录。由于这个版本的bsp是使用git管理的,因此,需要切换到指定分支。执行指令: git branch -a 可以查看freescale维护的uboot的各个分支,我们checkout的分支是“remotes/origin/imx_v2013.04_3.10.17_1.0.0_ga”,执行指令: git checkout -b tqimx6q imx_v2013.04_3.10.17_1.0.0_ga 这样,就在本地创建的分支tqimx6q并将远程分支imx_v2013.04_3.10.17_1.0.0_ga上的代码checkout到这个本地分支。我们之后的修改在tqimx6q分支进行即可。 U-Boot移植 新版U-Boot移植也不麻烦,主要是freescale给出了详细的官方手册"i.MX 6 BSP Porting Guide",具体的移植步骤如下: Step1. 创建board目录。由于imx6q的很多代码是共通的,跟之前的移植一样,可以参考mx6qsabresd进行的,执行指令: cp board/freescale/mx6qsabresd/ board/freescale/mx6q_tqimx6q -r Step2. 修改board相关文件的名称: cp board/freescale/mx6q_tqimx6q/mx6qsabresd.c board/freescale/mx6q_tqimx6q/mx6q_tqimx6q.c Step3. 修改Makefile中的文件名。打开board/freescale/Makefile,将mx6qsabresd替换为mx6q_tqimx6q.c。 Step4. 创建board配置文件。同样参考mx6qsabresd,执行如下指令: cp include/configs/mx6qsabresd.h include/configs/mx6q_tqimx6q.h Step5. 添加编译选项。打开文件boards.cfg,找到配置项"mx6qsabresd"(如果没有改动的话,在277行),复制该行配置并添加在下面,然后修改为如下内容: mx6q_tqimx6q arm armv7 mx6q_tqimx6q freescale mx6 mx6qsabresd:IMX_CONFIG=board/freescale/mx6q_tqimx6q/mx6q_tqimx6q_ddr.cfg,MX6Q,DEFAULT_FDT_FILE="imx6q-tqimx6q.dtb",DDR_MB=1024,SYS_USE_SPINOR Step6. 定制DDR配置。其实DDR相关的参数在之前的移植文章中已经有了。 cp board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg board/freescale/mx6q_tqimx6q/mx6q_tqimx6q_ddr.cfg 然后修改文件mx6q_tqimx6q_ddr.cfg,修改后的文件内容如下: http://pan.baidu.com/s/1nt5ji0h Step7. 定制board端子。其实有影响的端子在移植老版的uboot时已经知道,因此修改起来也是比较容易。 (1) 修改串口端子。具体修改内容如下: iomux_v3_cfg_t const uart1_pads = { MX6_PAD_SD2_CLK__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), MX6_PAD_SD2_CMD__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), MX6_PAD_SD2_DAT0__USDHC2_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), MX6_PAD_SD2_DAT1__USDHC2_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), MX6_PAD_SD2_DAT2__USDHC2_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), MX6_PAD_SD2_DAT3__USDHC2_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), // MX6_PAD_NANDF_D4__USDHC2_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL), // MX6_PAD_NANDF_D5__USDHC2_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL), // MX6_PAD_NANDF_D6__USDHC2_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL), // MX6_PAD_NANDF_D7__USDHC2_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL), // MX6_PAD_NANDF_D2__GPIO_2_2 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */ }; iomux_v3_cfg_t const usdhc3_pads Warning: failed to set MAC address Normal Boot Hit any key to stop autoboot: 0 MMC: no card present mmc0(part 0) is current device MMC: no card present Booting from net ... *** ERROR: `ethaddr' not set *** ERROR: `ethaddr' not set Wrong Image Format for bootm command ERROR: can't get kernel image! U-Boot 总结 经过上文介绍的移植,u-boot已经可以正常启动了。其实,这个版本的uboot移植与之前版本的uboot移植没有太大区别,思路差不多。有什么问题可以留言。 相关产品: TQI.MX6Q套装:http://www.embedsky.com/Index.php?s=/Product/show/id/83.html