本帖最后由 白菜爱吃白菜 于 2016-10-21 14:56 编辑
官方提供的开发环境是基于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
|