【北京迅为】i.MX6ULL终结者U-Boot移植
文章目录
1 编译NXP官方NAND版本u-boot
NXP官方已经把u-boot移植到了i.MX6ULL上,我们的工作就是要uboot移植到终结者开发板上。
1.1 环境搭建
解压:tar -vxf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 ,
将解压后的文件夹重命名:
mv uboot-imx-rel_imx_4.1.15_2.1.0_ga uboot -f
配置交叉编译环境,交叉编译器使用gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf,
在“2.获取u-boot”中已经解压好了源码,进入解压好的uboot源码目录,执行 make clean
1.2 更改默认环境变量值
默认的uboot环境变量flash分区和终结者的mfgtools设置烧写的分区不一致,我们要进入uboot源码,修改一下默认的bootargs参数,重新分区。
因为我们要编译imx6ull的nand版本,所以到源码目录下找相应的配置文件,找到了“mx6ull_14x14_evk_nand_defconfig”
打开mx6ull_14x14_evk_nand_defconfig,查看信息,发现板级文件在board/freescale/mx6ullevk/下,
进入board/freescale/mx6ullevk/,查看配置文件:
vi MAINTAINERS,查看到如下
头文件为”mx6ullevk.h”,里面保存着u-boot的默认参数,打开头文件,
vi include/configs/mx6ullevk.h,
搜索关键字“mtdparts=gpmi-nand”,
发现123行有宏定义“CONFIG_BOOTARGS_CMA_SIZE”,修改为:
“mtdparts=gpmi-nand:4m(u-boot),2m(u-boot-env),4m(logo),10m(kernel),2m(dtb),-(rootfs) rootwait rw ”,如图 1.2.4:
搜索“ubi.mtd”,如图 1.2.5:
改为“ubi.mtd=5”:
搜索“bootcmd”,如图 1.2.7:
修改一下地址,改为:nand read ${loadaddr} 0xA00000 0xA00000;nand read ${fdt_addr} 0x144B000 0xc800;bootz ${loadaddr} - ${fdt_addr},如图 1.2.8:
1.3 编译
将环境变量添加到Makefile中,make时自动设置环境变量,在Makefile中给ARCH和CROSS_COMPILE赋值,直接在248行添加:
ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-
回到uboot目录,NAND版本执行
make mx6ull_14x14_evk_nand_defconfig,
出现以下结果即配置成功:
步骤三:执行make编译,成功后u-boot.imx即为目标文件:
将生成的u-boot.imx拷贝到NXP官方的mfgtools烧写工具的mfgtools_for_6ULL\Profiles\Linux\OS Firmware\files\linux目录下,zImage和设备树使用的是迅为提供的内核镜像,rootfs.tar.bz2使用的是Buildroot生成的最小根文件系统(终结者ULL光盘资料\i.MX6ULL终结者光盘资料\08_开发板系统镜像\03_文件系统镜像\02_Buildroot文件系统),烧写:
烧写成功后进入uboot,根据前面章节有关uboot参数的分析设置自启动环境变量:
和我们在/include/configs/mx6ullevk.h改写的环境变量参数一致。
然后输入“boot”启动,
能正常进入文件系统说明u-boot镜像制作成功。测试能否保存环境变量,例如修改bootdelay环境变量
setenv bootdelay 10
saveenv
reset
发现自启动倒计时变成了10秒。能够保存环境变量,说明分区正常。
如果不能保存环境变量说明分区不正常。
用NXP源码编译eMMC版本和NAND过程相似,只有配置文件不同,NAND版本执行make mx6ull_14x14_evk_nand_defconfig,eMMC版本执行make mx6ull_14x14_evk_emmc_defconfig。
2 编译自定义eMMC版本u-boot
这章我们以编译eMMC版本u-boot镜像介绍如何在源码中编译自己的开发板,源码在光盘目录《终结者ULL光盘资料\i.MX6ULL终结者光盘资料\05_uboot linux源码\NXP官方原版Uboot和Linux》下。
2.1 环境搭建
将源码拷贝到Ubuntu,解压压缩包:
tar -vxf uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 ,将解压后的文件夹重命名为“uboot”:
mv uboot-imx-rel_imx_4.1.15_2.1.0_ga topeet_uboot -f
进入解压后的目录,执行清除命令:make distclean。
将环境变量添加到Makefile中,make时自动设置环境变量,在Makefile中给ARCH和CROSS_COMPILE赋值,直接在248行添加:
ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-
2.2 添加自己的板级文件夹
添加自己的imx6ull板级文件:进入board/freescale,复制官方mx6ullevk文件夹,cp mx6ullevk topeet_mx6ull_emmc -rf,新复制的topeet_mx6ull_emmc就是我们自己的板级文件夹。
更改mx6ullevk.c的名字为topeet_mx6ull_emmc.c:
mv mx6ullevk.c topeet_mx6ull_emmc.c,执行后如图 2.2.2:
修改board/freescale/topeet_mx6ull_emmc/Makefile第6行,
vi Makefile:
改为:obj-y := topeet_mx6ull_emmc.o
然后修改同一目录下的imximage.cfg,找到第34行,修改为自己的路径:
PLUGIN board/freescale/topeet_mx6ull_emmc/plugin.bin 0x00907000
2.3 增加开发板配置文件
在configs目录下添加自己开发板的配置文件:
cp mx6ull_14x14_evk_emmc_defconfig topeet_mx6ull_emmc_defconfig
修改配置文件的第1行第4行,换成自己开发板的路径:
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/topeet_mx6ull_emmc/imximage.cfg,MX6ULL
CONFIG_TARGET_TOPEET_MX6ULL_EMMC=y
2.4 添加头文件
添加自己开发板对应的头文件,进入uboot目录下include/configs/文件夹,复制mx6ullevk.h,
cp mx6ullevk.h topeet_mx6ull_emmc.h
然后vi topeet_mx6ull_emmc.h,修改文件头部的宏定义:
#ifndef __TOPEET_MX6ULL_EMMC_CONFIG_H
#define __TOPEET_MX6ULL_EMMC_CONFIG_H
完成后如图 2.4.2
然后搜索“fdt_file”,按实际情况修改设备树名字:
2.5 修改配置文件
修改board/freescale/topeet_mx6ull_emmc目录下的MAINTAINERS,改写路径,配置文件,头文件:
vi MAINTAINERS
修改 Kconfig,输入vi Kconfig ,改成如图 2.5.2所示:
修改图形配置文件,在uboot顶层目录执行
vi arch/arm/cpu/armv7/mx6/Kconfig
搜索 NXP官方的“MX6ULL_14x14_EVK”,然后在下方添加自己的板子:
搜索“mx6ullevk”,在下面添加:
source “board/freescale/topeet_mx6ull_emmc/Kconfig”,如图 2.5.4:
2.6 编译测试
最后回到源码根目录执行“ make topeet_mx6ull_emmc_defconfig”
执行make,编译成功后即可看到自己板子的u-boot.imx。
用迅为提供的烧写工具mfgtools_for_6ULL将生成的u-boot.imx文件烧写到开发板,启动后进入uboot,可以看到我们设置的fdt_file环境变量:
输入“boot”启动,成功进入文件系统: