Bootstrap

iMX6ULL linux5.15.32移植


我移植的板子是讯为的TERMINATOR_V1.1开发板,参考板为官方 i.MX6ULL EVK开发板。

  1. iMX6ULL uboot2021.04 linux5.15.32移植
  2. iMX6ULL启动流程
  3. iMX6ULL u-boot2021.04移植
  4. iMX6ULL linux5.15.32移植
  5. 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/zImagearch/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
;