i.MX6DL学习记录---uboot移植

软件版本:uboot-2013-04

硬件版本:i.MX6DL-Sabreasd


源码获取:

Freescale的内核和uboot都是使用git管理的 【http://git.freescale.com/git/cgit.cgi】,在这里都可以浏览到,也可以选择任意版本的源码下载


这里选择imx系列的


uboot移植:

由于这里的uboot源码都是由Freescale官方一直维护的,这里使用的也是Freescale的芯片imx6dl,所以uboot的移植还是挺简单的,而且Freescale也给出了详细的指导文档"i.MX 6 BSP Porting Guide",其实imx6dl系列和imx6q系列差不多,不做移植仅仅修改一些地方就可以让板子启动了,这里为了更加清晰源码结构所以参照imx6q系列做移植,具体移植步骤如下:

1》创建板子目录

[cpp]  view plain  copy
 
  1. cp board/freescale/mx6qsabresd board/freescale/mx6dlsabresd  


2》修改board相关文件

[cpp]  view plain  copy
 
  1. mv board/freescale/mx6dlsabresd/mx6qsabresd.c  board/freescale/mx6dlsabresd/mx6qsabresd.c  

3》修改board/freescale/mx6dlsabresd/Makefile

[cpp]  view plain  copy
 
  1. COBJS  := mx6qsabresd.o  

修改成

[cpp]  view plain  copy
 
  1. COBJS  := mx6dlsabresd.o  

4》创建板子配置文件

[cpp]  view plain  copy
 
  1. cp include/configs/mx6qsabresd.h include/configs/mx6dlsabresd.h  

5》 添加编译选项。打开文件boards.cfg,找到mx6dlsabresd这一行,把mx6qsabresd的字符修改成mx6dlsabresd

[cpp]  view plain  copy
 
  1. -mx6dlsabresd                 arm         armv7       mx6qsabresd         freescale      mx6            mx6qsabresd:IMX_CONFIG=board/freescale/mx6qsabresd/mx6dl_4x_mt41j128.cfg,MX6DL,DEFAULT_FDT_FILE="imx6dl-sabresd.dtb",DDR_MB=1024,SYS_USE_SPINOR  
  2. +mx6dlsabresd                 arm         armv7       mx6dlsabresd         freescale      mx6           mx6dlsabresd:IMX_CONFIG=board/freescale/mx6dlsabresd/mx6dl_4x_mt41j128.cfg,MX6DL,DEFAULT_FDT_FILE="imx6dl-sabresd.dtb",DDR_MB=1024,SYS_USE_SPINOR  

6》修改SD卡的引脚定义

[cpp]  view plain  copy
 
  1. --- a/board/freescale/mx6dlsabresd/mx6dlsabresd.c  
  2. +++ b/board/freescale/mx6dlsabresd/mx6dlsabresd.c  
  3. @@ -178,11 +178,11 @@ iomux_v3_cfg_t const usdhc3_pads[] = {  
  4.         MX6_PAD_SD3_DAT1__USDHC3_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  5.         MX6_PAD_SD3_DAT2__USDHC3_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  6.         MX6_PAD_SD3_DAT3__USDHC3_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  7. -       MX6_PAD_SD3_DAT4__USDHC3_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  8. -       MX6_PAD_SD3_DAT5__USDHC3_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  9. -       MX6_PAD_SD3_DAT6__USDHC3_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  10. -       MX6_PAD_SD3_DAT7__USDHC3_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  11. -       MX6_PAD_NANDF_D0__GPIO_2_0    | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */  
  12. +//     MX6_PAD_SD3_DAT4__USDHC3_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  13. +//     MX6_PAD_SD3_DAT5__USDHC3_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  14. +//     MX6_PAD_SD3_DAT6__USDHC3_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  15. +//     MX6_PAD_SD3_DAT7__USDHC3_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),  
  16. +    MX6_PAD_GPIO_6__GPIO_1_6      | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */  
  17.  };  
  18.    
  19.  iomux_v3_cfg_t const usdhc4_pads[] = {  
  20. @@ -435,7 +435,7 @@ int mmc_get_env_devno(void)  
  21.    
  22.    
  23.  #define USDHC2_CD_GPIO IMX_GPIO_NR(2, 2)  
  24. -#define USDHC3_CD_GPIO IMX_GPIO_NR(2, 0)  
  25. +#define USDHC3_CD_GPIO IMX_GPIO_NR(1, 6)  
  26.    


7》编译uboot,执行如下编译脚本

[cpp]  view plain  copy
 
  1. #!/bin/bash  
  2. export ARCH=arm  
  3. export CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-  
  4.   
  5. #make distclean;  
  6.   
  7. make mx6dlsabresd_config  
  8.   
  9. make    

烧写启动
这里采用SD卡启动,这也是为什么上面为什么要修改SD卡引脚定义,在PC端插入SD卡,执行以下命令

[cpp]  view plain  copy
 
  1. sudo dd if=u-boot.imx of=/dev/sdx bs=512 seek=2   
注:  x根据具体的节点而定

启动logo:

[cpp]  view plain  copy
 
  1. U-Boot 2013.04-04989-g6bb0820-dirty (Jul 20 2016 - 16:22:43)  
  2.   
  3. CPU:   Freescale i.MX6DL rev1.1 at 792 MHz  
  4. CPU:   Temperature 51 C, calibration data: 0x5aa50e69  
  5. Reset cause: POR  
  6. Board: MX6Q/SDL-SabreSD  
  7. I2C:   ready  
  8. DRAM:  1 GiB  
  9. MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2  
  10. No panel detected: default to Hannstar-XGA  
  11. Display: Hannstar-XGA (1024x768)  
  12. In:    serial  
  13. Out:   serial  
  14. Err:   serial  
  15. mmc1 is current device  
  16. Net:   Phy not found  
  17. PHY reset timed out  
  18. FEC [PRIME]  
  19. Warning: failed to set MAC address  
  20.   
  21. Normal Boot  
  22. Hit any key to stop autoboot:  0   
  23. mmc1 is current device  
  24.   
  25. MMC read: dev # 1, block # 2048, count 12288 ... 12288 blocks read: OK  
  26.   
  27. MMC read: dev # 1, block # 20480, count 2048 ... 2048 blocks read: OK  
  28. Wrong Image Format for bootm command  
  29. ERROR: can't get kernel image!  
  30. U-Boot >   

总结:
uboot移植其实没什么工作量,毕竟这里只做了让芯片启动的工作,但是需要注意的一点有,这里使用的DDR参数是默认的是因为使用的DDR芯片是和 Freescale原厂的demo板是一样的,如果严谨一点的话,是需要做DDR压力测试然后得到DDR参数,这里就省略了,关于Freescale的DDR压力测试可以网上搜索【飞思卡尔i.MX6平台DRAM接口高阶应用指导-DDR3篇】


你可能感兴趣的:(i.MX6DL学习记录---uboot移植)