写在前头
*.版权声明:本篇文章为原创,可随意转载,转载请注明出处,谢谢!另我创建一个QQ群82642304,欢迎加入!
*.备注:整个系列基于官方的i.MX6soloX sabresd开发板,只是对我所学进行总结,记录我认为是关键的点,另我能力有限,难免出现疏漏错误,如果读者有发现请多指正,以免我误导他人!
前言
NXP官方对i.MX6系列的支持目前都是基于yocto开发环境,之前做i.MX6UL时有接触过,但是也只是仅限于应用,没有深入研究。
个人习惯是基于原生的代码上进行开发,主要因为:
- 项目紧张,对于刚接触yocto的,还需要一定的时间去学习
- 电脑老旧,用的是十年前的电脑,硬盘空间不足,性能弱,编译yocto需要花20小时的时间
- 个人理念,习惯简单,基于yocto的开发过于复杂
所以这个系列的开发是基于原生代码上进行的。
代码获取
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-注意:交叉编译工具链的路径中的红色Linux实际上为linux,L是小写的,CSDN的markdown自动标成大写的我不知道如何修改,只能在此备注。
编译
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