目录
1 Linux 4.1.15系统移植
我们使用NXP官方提供的Linux源码,移植到i.MX6UL终结者开发板上。官方Linux源码可以从网盘资料中获取,路径:i.MX6UL终结者光盘资料/05_uboot linux源码/NXP官方原版Uboot和Linux.zip。通过ssh将Linux内核源码发送到Ubuntu虚拟机中并解压,得到内核源码文件目录linux-imx-rel_imx_4.1.15_2.1.0_ga。图 1.1所示:
1.1 NXP官方Linux源码编译
NXP官方提供的Linux源码编译后只能在自己的开发板上运行,所以以NXP的开发板作为参考,将Linux内核移植到i.MX6UL终结者开发板上。
1.1.1 配置交叉编译工具链
进入内核目录linux-imx-rel_imx_4.1.15_2.1.0_ga下,修改Makefile文件,在Makefile文件中有ARCH 和CROSS_COMPILE 这两个的变量,通过这两个变量指定交叉编译工具。修改如图 1.1.1.1所示:
修改这两个变量的值后在编译时,就不用在指定编译工具了。
1.1.2 配置并编译Linux内核
每个板子都有对应的默认的配置文件,在编译Linux内核之前,需要根据目标开发板选择不同的配置文件,这些配置文件保存在arch/arm/configs目录下。NXP官方的开发板默认对应的配置文件是imx_v7_mfg_defconfig。
进入到Ubuntu虚拟机的Linux源码目录下,执行以下命令来配置内核:
make clean //编译之前先清理一下
make imx_v7_mfg_defconfig //配置Linux内核
配置完成后,会生成 .config文件,如图 1.1.2.1和图 1.1.2.2所示:
配置完成后就可以进行编译了,使用下面的命令:
make -j8 //编译Linux内核
编译完成如图 1.1.2.3所示:
编译完成后,我们会得到两个文件。
① Linux内核镜像文件:arch/arm/boot/zImage。
② 设备树文件:arch/arm/boot/dts/imx6ull-14x14-evk.dtb。
通过编译官方Linux源码得到了Linux内核和设备树文件。Linux内核源码的编译流程是一样的,不同开发板对应的配置文件和设备树文件不一样。因此在移植Linux源码到自己的开发板时需要添加对应的内核配置文件和设备树文件。
1.2 在Linux中添加自己的开发板
在上一节中我们介绍了如何编译Linux内核源码用于NXP的官方测试板,所以我们参考测试板的配置,在Linux内核源码中添加i.MX6UL终结者开发板的相关配置文件。
1.2.1 添加默认开发板内核配置文件
进入到arch/arm/configs目录下,复制一份imx_v7_mfg_defconfig文件,重命名为imx_topeet_defconfig,将其作为i.MX6UL终结者开发板的内核默认配置文件。命令如下:
cd arch/arm/configs
cp imx_v7_mfg_defconfig imx_topeet_defconfig
以后再次编译内核时执行下列命令来配置i.MX6UL终结者开发板的Linux内核:
make imx_topeet_defconfig
1.2.2 添加开发板对应的设备树文件
进入到arch/arm/boot/dts目录下,复制一份 imx6ull-14x14-evk.dts,将其重命名为 topeet_emmc_4_3.dts,命令如下:
cd arch/arm/boot/dts
cp imx6ull-14x14-evk.dts topeet_emmc_4_3.dts
注意:i.MX6UL终结者开发板分为emmc和nand flash版本,在本节中以emmc版本为例进行介绍,如果是nand flash版本的开发板,使用cp imx6ull-14x14-evk-gpmi-weim.dts imx6ul_topeet_nand.dts 然后设置屏幕显示为4.3寸,内核移植步骤和emmc版本相同。
创建设备树文件后,还需要修改文件arch/arm/boot/dts/Makefile,添加新创建的设备树文件,这样再次编译时,才会编译设备树文件生成.dtb文件。修改内容如下:
emmc版本如下:
400 dtb-$(CONFIG_SOC_IMX6ULL) += \
401 imx6ull-14x14-ddr3-arm2.dtb \
…
438 imx6ull-9x9-evk-ldo.dtb
439 topeet_emmc_4_3.dtb
nand flash版本如下:
400 dtb-$(CONFIG_SOC_IMX6ULL) += \
401 imx6ull-14x14-ddr3-arm2.dtb \
…
438 imx6ull-9x9-evk-ldo.dtb
439 imx6ul_topeet_nand.dts
1.2.3 编译开发板对应镜像
在前面两个小节添加了自己开发板对应的内核配置文件和设备树文件后,可以编译Linux内核源码生成镜像文件。命令如下:
make clean
make imx_topeet_defconfig
make -j8
编译完成后,我们会得到两个文件。
① Linux内核镜像文件:arch/arm/boot/zImage。
② 设备树文件:arch/arm/boot/dts/topeet_emmc_4_3.dtb。
注意:当使用新编译生成的zImage和dtb设备树文件下载时,参考镜像烧写章节,需要注意的是下载器中需要烧写不同屏幕尺寸对应的dtb文件,在内核移植测试阶段或者驱动测试阶段,只需要修改topeet_emmc_4_3.dts设备树文件即可,但是下载时其他的文件也要存在,否则不能下载。使用新的topeet_emmc_4_3.dtb文件替换即可。下载需要的dtb文件如图 1.2.3.1所示:
图 1.2.3.1
1.3 添加简单设备驱动
1.3.1 网卡驱动
修改编译好内核后,首先添加一下网卡驱动,方便后面使用。
1、添加pinctrl信息
打开topeet_emmc_4_3.dts设备树文件,首先添加GPIO引脚信息,在开发板上有两个网卡芯片,所以会有两组网卡GPIO引脚信息,内容如下:
309 pinctrl_enet1: enet1grp {
310 fsl,pins = <
311 MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0
312 MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0
313 MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
314 MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
315 MX6UL_PAD_ENET1_TX_EN