imx6ull开发环境之系统安装请参考:https://www.cnblogs.com/gxlblogs/p/14382547.html
imx6ull交叉编译工具链安装 请参数:https://www.cnblogs.com/gxlblogs/p/14382831.html
开发板:飞凌 OKMX6ULL-S + 7寸电阻屏
交叉编译工具链:gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf
linux内核:linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
一、内核编译
1、将内核通过ftp上传至linux虚拟机,解压:tar -jxvf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
2、修改Makefile
cd linux-imx-rel_imx_4.1.15_2.1.0_ga/
vi Makefile
跳至252行(252G),复制2行(2yy),在这两行下面粘贴(p),去掉注释#,修改为:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-
保存退出
3、试编译
make distclean
make imx_v7_mfg_defconfig
make
然后我们可以得到zImage和dtb文件,分别在./arch/arm/boot/zImage和./arch/arm/boot/dts/imx6ull-14x14-evk.dtb,这两个文件是我们需要的文件
4、移植说明
这里生成的zImage和dtb是NXP官方evk开发板所适应的,而对于飞凌开发板,dtb文件不够适应,需要修改,而zImage文件经过测试是适应的,后面如果缺少驱动时可通过make menuconfig配置即可;
这里提一下,为什么不直接用飞凌提供的内核,而非要从官方的移植,是因为使用飞凌提供的内核时,在移植tslib时,运行ts_calibrate时一直挂,怀疑与framebuffer有关,尝试了很多,ts_calibrate也不正常,故决定更换内核,结果问题得到解决;
但飞凌内核中的设备树文件还是和开发板适配的,故可参考其设备树文件进行修改官方内核的设备树;
5、创建自己的defconfig和dts文件
cd ./arch/arm/configs/
cp imx_v7_mfg_defconfig imx6ull_defconfig
cd ./arch/arm/boot/dts
cp imx6ull-14x14-evk.dts imx6ull-S-emmc-800x480cr7.dts
vi ./arch/arm/boot/dts/Makefile 找到dtb-$(CONFIG_SOC_IMX6ULL)在后面追加imx6ull-S-emmc-800x480cr7.dtb
参考飞凌的dts/imx6ull.dtsi,dts/imx6ull-14x14-evk.dts以及dts/imx6ull-S-emmc-800x480cr7.dts修改官方内核的dts/imx6ull.dtsi以及我们刚才复制的dts/imx6ull-S-emmc-800x480cr7.dts文件
飞凌在dtsi中有少量修改,在dts/imx6ull-14x14-evk.dts中有大量修改,而在dts/imx6ull-S-emmc-800x480cr7.dts中则是引用了dts/imx6ull-14x14-evk.dts文件,而我们直接使用文件对比工具对比,把差异都合并到dts/imx6ull-S-emmc-800x480cr7.dts即可
6、再次编译
make distclean
make imx6ull_defconfig
make
好,我们把生成的zImage和dtb文件复制到~/tftp中
cp arch/arm/boot/zImage ~/tftp/
cp arch/arm/boot/dts/imx6ull-S-emmc-800x480cr7.dtb ~/tftp/
二、内核测试
在uboot中配置好nfs启动(这里不详细介绍),将文件系统放于~/rootfs中(这里不详细介绍),给开发板上电,会看到加载zImage和dtb,并且也可以正常挂载nfs,即内核移植成功。