创建 VSCode工程
使用 NXP 官方提供的 Linux 源码,将其移植到正点原子 I.MX6U-ALPHA 开发板上。使用FileZilla 将其发送到Ubuntu 中并解压,得到名为 linux-imx-rel_imx_4.1.15_2.1.0_ga 的目录
mv linux-imx-rel_imx_4.1.15_2.1.0_ga linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
完成以后创建 VSCode 工程,步骤和 Windows 下一样,重点是.vscode/settings.json 这个文件。
NXP 提供的 Linux 源码肯定是可以在自己的 I.MX6ULL EVK 开发板上运行下去的,所以我们肯定是以I.MX6ULL EVK 开发板为参考,然后将 Linux 内核移植到 I.MX6U-ALPHA 开发板上的。
修改顶层 Makefile
修改顶层 Makefile,直接在顶层 Makefile 文件里面定义 ARCH 和 CROSS_COMPILE 这两个的变量值为arm 和 arm-linux-gnueabihf-
图 37.2.1 中第 252 和 253 行分别设置了 ARCH 和 CROSS_COMPILE 这两个变量的值,这样在编译的时候就不用输入很长的命令了。
和 uboot 一样,在编译 Linux 内核之前要先配置 Linux 内核。每个板子都有其对应的默认配置文件, 这些默认配置文件保存在 arch/arm/configs 目录中。 imx_v7_defconfig 和
imx_v7_mfg_defconfig 都可作为 I.MX6ULL EVK 开发板所使用的默认配置文件。但是这里建议使用 imx_v7_mfg_defconfig 这个默认配置文件,首先此配置文件默认支持 I.MX6UL 这款芯片, 而且重要的一点就是此文件编译出来的 zImage 可以通过 NXP 官方提供的 MfgTool 工具烧写。
imx_v7_mfg_defconfig 中的“mfg”的意思就是 MfgTool。
进入到 Ubuntu 中的Linux 源码根目录下,执行如下命令配置Linux 内核
make clean //第一次编译Linux 内核之前先清理一下
make imx_v7_mfg_defconfig //配置 Linux 内核
配置完成以后就可以编译了,使用如下命令编译Linux 内核
make -j16 //编译 Linux 内核
Linux 内核编译完成以后会在 arch/arm/boot 目录下生成zImage 镜像文件,如果使用设备树的话还会在arch/arm/boot/dts 目录下开发板对应的.dtb(设备树)文件,比如 imx6ull-14x14-evk.dtb 就是NXP 官方的 I.MX6ULL EVK 开发板对应的设备树文件。至此我们得到两个文件:
①、Linux 内核镜像文件:zImage。
②、NXP 官方 I.MX6ULL EVK 开发板对应的设备树文件:imx6ull-14x14-evk.dtb。
**Linux 内核启动测试**
得到了 NXP 官方 I.MX6ULL EVK 开发板对应的 zImage 和 imx6ull- 14x14-evk.dtb 这两个文件。这两个文件能不能在正点原子的 I.MX6U-ALPHA EMMC 版开发板上启动呢?测试一下不就知道了,在测试之前确保uboot 中的环境变量bootargs 内容如下:
console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw
编译出来的 zImage 和 imx6ull-14x14-evk.dtb 复制到 Ubuntu 中的 tftp 目录下, 因为我们要在uboot 中使用 tftp 命令将其下载到开发板中,拷贝命令如下:
cp arch/arm/boot/zImage /home/zuozhongkai/linux/tftpboot/ -f
cp arch/arm/boot/dts/imx6ull-14x14-evk.dtb /home/zuozhongkai/linux/tftpboot/ -f
拷贝完成以后就可以测试了,启动开发板,进入 uboot 命令行模式,然后输入如下命令将zImage 和 imx6ull-14x14-evk.dtb 下载到开发板中并启动:
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-evk.dtb
bootz 80800000 - 83000000
结果图 所示:
此时 Linux 内核已经启动了,如果 EMMC 中的根文件系统存在, 我们就可以进入到Linux 系统里面使用命令进行操作如图