iMX8MM linux5.15.32移植
我移植的板子是讯为i.MX8MM开发板,参考板为官方 8MMINILPD4-EVK开发板。
- iMX8MM uboot2021.04 linux5.15.32移植
- iMX8MM启动流程
- iMX8MM u-boot2021.04移植
- iMX8MM linux5.15.32移植
- iMX8MM buildroot-2022.02.5构建根文件系统
1. 添加板子
Linux移植我们只需要添加配置文件和设备树。
1.1 添加配置文件
官方是相同arm架构的板子公用一个配置文件,自己板子的配置文件最好单独存一份,每次修改配置最好保存,在源码目录下执行下列命令创建我们自己板子的配置文件。
$ cd arch/arm64/configs/
$ cp imx_v8_defconfig imx8mm_topeet_defconfig
1.2 添加设备树
复制参考板的设备树文件,在源码目录下执行下列命令创建我们自己板子的设备树文件。
$ cd arch/arm64/boot/dts/freescale/
$ cp imx8mm-evk.dts imx8mm-topeet.dts
$ cp imx8mm-evk.dtsi imx8mm-topeet.dtsi
修改arch/arm64/boot/dts/freescale/imx8mm-topeet.dts文件
// 文件arch/arm64/boot/dts/freescale/imx8mm-topeet.dts
#include "imx8mm-evk.dtsi"
// 改为
#include "imx8mm-topeet.dtsi"
//根节点下的这两个属性改为
/ {
model = "FSL i.MX8MM TOPEET board";
compatible = "fsl,imx8mm-topeet", "fsl,imx8mm";
};
修改arch/arm64/boot/dts/freescale/Makefile文件
# 在文件最后加下面一行
dtb-$(CONFIG_ARCH_MXC) += imx8mm-topeet.dtb
2. 修改设备树
这部分和uboot一样,修改网卡和SD卡的一个引脚。
2.1 修改网卡
讯为i.MX8MM开发板使用的phy芯片和官方iMX8MM EVK开发板是同系列,只有设计上略有不同。讯为i.MX8MM开发板的phy芯片复位引脚接到了GPIO2_IO10上,所以要对phy配置复位引脚。因为这个引脚官方开发板被usdhc1用在了WiFi上,我们先不使用WiFi把usdhc1失能掉。
// 文件arch/arm64/boot/dts/freescale/imx8mm-topeet.dtsi
&iomuxc {
pinctrl_fec1: fec1grp {
fsl,pins = <
/* MX8MM_IOMUXC_SAI2_RXC_GPIO4_IO22 0x19 */
MX8MM_IOMUXC_SD1_RESET_B_GPIO2_IO10 0x19
>;
};
};
// 文件arch/arm64/boot/dts/freescale/imx8mm-topeet.dts
&usdhc1 {
// status这个属性改为disabled
status = "disabled";
};
2.2 修改SD卡
讯为i.MX8MM开发板和官方iMX8MM EVK开发板SD卡,只有SD2_DET引脚不同。讯为i.MX8MM开发板SD2_DET引脚接到了GPIO2_IO12上,所以要对SD配置CD引脚。
// 文件arch/arm64/boot/dts/freescale/imx8mm-topeet.dtsi
&usdhc2 {
// 更改cd引脚属性
cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
};
&iomuxc {
pinctrl_usdhc2_gpio: usdhc2grpgpiogrp {
fsl,pins = <
MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12 0x1c4
>;
};
};
2.3 关闭屏幕
因为我没有屏幕,所以需要失能屏幕。
// 文件arch/arm64/boot/dts/freescale/imx8mm-topeet.dtsi
&lcdif {
status = "disabled";
};
&mipi_dsi {
status = "disabled";
};
3. 编译验证
3.1 编译
利用之前安装的工具链,执行下列命令完成编译。
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- imx8mm_topeet_defconfig
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j12
3.2 验证
进入uboot命令行设置服务器地址,并保存。
=> setenv serverip 192.168.0.100
=> saveenv
把arch/arm64/boot/Image
和arch/arm64/boot/dts/freescale/imx8mm-topeet.dtb
复制到tftp服务器文件夹中,重启开发板会自动下载linux镜像和设备树并启动。
linux启动成功,无法挂载NFS文件系统。
4. 总结
linux移植就完成了,下面将利用buildroot构建一个根文件系统。本文仅供学习参考,如有问题欢迎指正。
移植源码获取:
git clone https://github.com/Sonboy97/linux.git -b imx
版本:21e809b958baca89d0e0e7c1668408e0ae0e00bd