iMX6ULL linux5.15.32移植
我移植的板子是讯为的TERMINATOR_V1.1开发板,参考板为官方 i.MX6ULL EVK开发板。
- iMX6ULL uboot2021.04 linux5.15.32移植
- iMX6ULL启动流程
- iMX6ULL u-boot2021.04移植
- iMX6ULL linux5.15.32移植
- iMX6ULL buildroot-2022.02.5构建根文件系统
1. 添加板子
Linux移植我们只需要添加配置文件和设备树。
1.1 添加配置文件
官方是相同arm架构的板子公用一个配置文件,自己板子的配置文件最好单独存一份,每次修改配置最好保存,在源码目录下执行下列命令创建我们自己板子的配置文件。
$ cd arch/arm/configs/
$ cp imx_v7_defconfig imx6ull_topeet_defconfig
1.12添加设备树
复制参考板的设备树文件,在源码目录下执行下列命令创建我们自己板子的设备树文件。
$ cd arch/arm/boot/dts/
$ cp imx6ull-14x14-evk.dts imx6ull-14x14-topeet.dts
$ cp imx6ul-14x14-evk.dtsi imx6ul-14x14-topeet.dtsi
修改arch/arm/boot/dts/imx6ull-14x14-topeet.dts文件为,usdhc2节点是复制imx6ull-14x14-evk-emmc.dts中的,我们的板子有EMMC本应复制imx6ull-14x14-evk-emmc.dts,不想创建太多文件所以如此。
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
//
// Copyright (C) 2016 Freescale Semiconductor, Inc.
/dts-v1/;
#include "imx6ull.dtsi"
#include "imx6ul-14x14-topeet.dtsi"
/ {
model = "Freescale i.MX6 ULL 14x14 TOPEET Board";
compatible = "fsl,imx6ull-14x14-topeet", "fsl,imx6ull";
};
&clks {
assigned-clocks = <&clks IMX6UL_CLK_PLL3_PFD2>,
<&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
assigned-clock-rates = <320000000>, <786432000>;
};
&csi {
status = "okay";
};
&ov5640 {
status = "okay";
};
&usdhc2 {
pinctrl-names = "default", "state_100mhz", "state_200mhz";
pinctrl-0 = <&pinctrl_usdhc2_8bit>;
pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>;
pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>;
bus-width = <8>;
non-removable;
status = "okay";
};
/delete-node/ &sim2;
修改arch/arm/boot/dts/Makefile文件
dtb-$(CONFIG_SOC_IMX6UL) += \
# 此处代码省略
imx6ulz-14x14-evk-emmc.dtb \
#添加我们的板子
imx6ull-14x14-topeet.dtb
2. 修改设备树
这部分和uboot一样,修改网卡和LCD。
2.1 修改网卡
讯为的TERMINATOR_V1.1开发板使用的phy芯片和官方EVK开发板相同,只有设计上略有不同。TERMINATOR_V1.1开发板的两个phy芯片复位引脚分别接到了GPIO5_IO07和GPIO5_IO08上,所以要对phy配置复位引脚。GPIO5_IO07和GPIO5_IO08被复用为了SPI4的引脚,我们先失能SPI4。
// arch/arm/boot/dts/imx6ul-14x14-topeet.dtsi
/ {
spi4 {
status = "disabled"; // 失能SPI4
};
};
&fec1 {
// 追加下面两个属性
phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>;
phy-reset-duration = <200>;
};
&fec2 {
// 追加下面两个属性
phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
phy-reset-duration = <200>;
};
&iomuxc {
pinctrl_enet1: enet1grp {
fsl,pins = <
// 追加下面一行
MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10b0 /* RST */
>;
};
pinctrl_enet2: enet2grp {
fsl,pins = <
// 追加下面一行
MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10b0 /* RST */
>;
};
};
2.2 修改LCD
本文对RGB-LCD修改,其他显示设备不支持。
// arch/arm/boot/dts/imx6ul-14x14-topeet.dtsi
&lcdif {
display0: display@0 {
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
// 修改下面这些参数
clock-frequency = <25000000>;
hactive = <1024>;
vactive = <600>;
hfront-porch = <120>;
hback-porch = <130>;
hsync-len = <70>;
vback-porch = <15>;
vfront-porch = <17>;
vsync-len = <3>;
};
};
};
};
3. 编译验证
3.1 编译
利用之前安装的工具链,执行下列命令完成编译。
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6ull_topeet_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
3.2 验证
进入uboot命令行设置服务器地址,并保存。
=> setenv serverip 192.168.0.100
=> saveenv
把arch/arm/boot/zImage
和arch/arm/boot/dts/imx6ull-14x14-topeet.dtb
复制到tftp服务器文件夹中,重启开发板会自动下载linux镜像和设备树并启动。
linux启动成功,无法挂载NFS文件系统。
4. 总结
linux移植就没有板级文件,设备树修改基本和uboot一样。本文仅供学习参考,如有问题欢迎指正。
移植源码获取:
git clone https://github.com/Sonboy97/linux.git -b imx
版本:a63a045bec48772b09e9fe5a9fbd5dd25f73d03f