i.MX6的Uboot代码获取编译及烧写

时间:2016-11-28     作者:



官方提供的开发环境是基于yocto的,功能强大,配置灵活,使用简单。但是我个人电脑比较老旧,编译一次系统需要耗费很长时间,所以我选择了单独编译Uboot、Kernel和文件系统。
这篇文档里面介绍的是Uboot的代码获取、编译及烧写

代码获取

Uboot代码可以从git官方上获取
      git clone git://git.freescale.com/imx/uboot-imx.git
切换到远程的分支
      git checkout -b yourname origin/imx_v2015.04_4.1.15_1.0.0_ga

编译

需要下载官方的交叉编译工具gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12
进入uboot目录
设置环境变量
  export ARCH=arm 
  export CROSS_COMPILE=/path/to/yourdir/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-
编译
  mkdir build
  make mx6sxsabresd_defconfig O=build
  cd build
  make


生成 
 
生成的Uboot在build目录下: u-boot.imx

准备烧写

i.MX6上电启动流程可参照《IMX6Solo启动流程-从上电到Uboot》 ,u-boot.imx中包含了IVT,所以按照数据手册中,需要将u-boot.imx烧写到SD卡偏移量为1Kb的地址。
将SD卡通过读卡器插入电脑(主机是Debian Linux),假设识别为/dev/sdb,使用root用户使用fdisk进行分区,将SD卡分成两个区,第一个区为FAT32文件系统格式,第二个区为ext4格式。
  fdisk /dev/sdb  #分区,下面的操作都是在fdisk下
      p    #打印当前的所有分区
      d   #删除分区命令,d 1表示删除第一个分区
      n   #增加分区命令,按照命令交互提示对SD卡进行分区,第一个分区至少要10M,偏移量大于Uboot的大小
      w  #将修改的数据写入到SD卡
分区结束之后,重新拔插SD卡,对其进行格式化分区,使用root用户执行:
      mkfs.vfat /dev/sdb1
    mkfs.ext4 /dev/sdb2
分区1用于存放内核,设备树文件,M4镜像等,分区2用于文件系统,而Uboot放在起始地址为1Kb的位置,在第一个分区之前

烧写

      sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2 conv=fsync