iMX6ULL u-boot2021.04移植

本文详细介绍了iMX6ULL U-Boot 2021.04版本的移植过程,包括添加板子配置文件、修改设备树以适配TERMINATOR_V1.1开发板,并完成了编译及下载验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我移植的板子是讯为的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. 添加板子

进入我们下载好的源码目录,需要复制每个板子特有的一些文件,添加完板子板级文件一般就不会修改了,主要是修改设备树和配置文件。这里直接修改完这些文件,基本都是将evk改为topeet,不做过多解释。

1.1 添加配置文件

添加配置文件我们只需要复制 i.MX6ULL EVK的默认配置文件,在源码目录下执行下列命令创建我们自己板子的配置文件。

$ cd configs/
$ cp mx6ull_14x14_evk_defconfig mx6ull_14x14_topeet_defconfig

修改configs/mx6ull_14x14_topeet_defconfig文件

# configs/mx6ull_14x14_topeet_defconfig

CONFIG_TARGET_MX6ULL_14X14_EVK=y
# 改为
CONFIG_TARGET_MX6ULL_14X14_TOPEET=y

CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"
# 改为
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-topeet"

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg"
# 改为
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_topeet/imximage.cfg"

1.2 添加板级文件

同样复制参考板的板级文件,在源码目录下执行下列命令创建我们自己板子的板级文件。

$ cd include/configs/
$ cp mx6ullevk.h mx6ull_topeet.h

$ cd ../../board/freescale/
$ cp -r mx6ullevk mx6ull_topeet
$ cd mx6ull_topeet/
$ mv mx6ullevk.c mx6ull_topeet.c
$ rm imximage_lpddr2.cfg

修改include/configs/mx6ull_topeet.h文件

// include/configs/mx6ull_topeet.h

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H
// 改为
#ifndef __MX6ULL_TOPEET_CONFIG_H
#define __MX6ULL_TOPEET_CONFIG_H

/* 删除注释代码
#define is_mx6ull_9x9_evk()	CONFIG_IS_ENABLED(TARGET_MX6ULL_9X9_EVK)

#ifdef CONFIG_TARGET_MX6ULL_9X9_EVK
#define PHYS_SDRAM_SIZE		SZ_256M
#define BOOTARGS_CMA_SIZE   "cma=96M "
#else
*/
#define PHYS_SDRAM_SIZE		SZ_512M
#define BOOTARGS_CMA_SIZE   ""
/* DCDC used on 14x14 EVK, no PMIC */
#undef CONFIG_LDO_BYPASS_CHECK
/* 删除注释代码
#endif
*/

// 把findfdt和findtee两个uboot环境变量改为如下
		"findfdt="\
			"if test $fdt_file = undefined; then " \
				"if test $board_name = TOPEET && test $board_rev = 14X14; then " \
					"setenv fdt_file imx6ull-14x14-topeet.dtb; fi; " \
				"if test $fdt_file = undefined; then " \
					"echo WARNING: Could not determine dtb to use; " \
				"fi; " \
			"fi;\0" \
		"findtee="\
			"if test $tee_file = undefined; then " \
				"if test $board_name = TOPEET && test $board_rev = 14X14; then " \
					"setenv tee_file uTee-6ull-topeet; fi; " \
				"if test $tee_file = undefined; then " \
					"echo WARNING: Could not determine tee to use; " \
				"fi; " \
			"fi;\0" \

修改board/freescale/mx6ull_topeet/mx6ull_topeet.c文件

// board/freescale/mx6ull_topeet/mx6ull_topeet.c

int board_late_init(void)
{
	/* 此处代码省略 */

// 下面代码修改为
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
	env_set("board_name", "TOPEET");
	env_set("board_rev", "14X14");
#endif

	/* 此处代码省略 */
}

// 下面函数修改为
int checkboard(void)
{
	puts("Board: MX6ULL 14x14 TOPEET\n");

	return 0;
}

修改board/freescale/mx6ull_topeet/imximage.cfg文件

// board/freescale/mx6ull_topeet/imximage.cfg

#ifdef CONFIG_USE_IMXIMG_PLUGIN
/*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
PLUGIN	board/freescale/mx6ullevk/plugin.bin 0x00907000
#else
// 改为
#ifdef CONFIG_USE_IMXIMG_PLUGIN
/*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
PLUGIN	board/freescale/mx6ull_topeet/plugin.bin 0x00907000
#else

修改board/freescale/mx6ull_topeet/plugin.S文件

// board/freescale/mx6ull_topeet/plugin.S

.macro imx6ull_ddr3_evk_setting
// 改为
.macro imx6ull_ddr3_setting

/* 删除注释代码
.macro imx6ull_lpddr2_evk_setting
	ldr r0, =IOMUXC_BASE_ADDR
	ldr r1, =0x00080000
	// 此处代码省略 
	ldr r1, =0x00000000
	str r1, [r0, #0x01C]
.endm
*/

.macro imx6_ddr_setting
#if defined (CONFIG_TARGET_MX6ULL_9X9_EVK)
	imx6ull_lpddr2_evk_setting
#else
	imx6ull_ddr3_evk_setting
#endif
.endm
// 改为
.macro imx6_ddr_setting
	imx6ull_ddr3_setting
.endm

修改board/freescale/mx6ull_topeet/Kconfig文件为

if TARGET_MX6ULL_14X14_TOPEET

config SYS_BOARD
	default "mx6ull_topeet"

config SYS_VENDOR
	default "freescale"

config SYS_CONFIG_NAME
	default "mx6ull_topeet"

config SYS_TEXT_BASE
	default 0x87800000
endif

修改board/freescale/mx6ull_topeet/MAINTAINERS文件为

MX6ULL_TOPEET BOARD
M:	Peng Fan <peng.fan@nxp.com>
S:	Maintained
F:	board/freescale/mx6ull_topeet/
F:	include/configs/mx6ull_topeet.h
F:	configs/mx6ull_14x14_topeet_defconfig

修改board/freescale/mx6ull_topeet/Makefile文件为

# SPDX-License-Identifier: GPL-2.0+
# (C) Copyright 2016 Freescale Semiconductor, Inc.

obj-y  := mx6ull_topeet.o

修改arch/arm/mach-imx/mx6/Kconfig文件

config TARGET_BRPPT2
	bool "brppt2"
	# 此处代码省略
        help
          Support
          B&R BRPPT2 platform
          based on Freescale's iMX6 SoC
# 在这里添加下面代码
config TARGET_MX6ULL_14X14_TOPEET
	bool "Support mx6ull_14x14_topeet"
	depends on MX6ULL
	select BOARD_LATE_INIT
	select DM
	select DM_THERMAL
	select IMX_MODULE_FUSE
	select OF_SYSTEM_SETUP
	imply CMD_DM

# 在最后endif上面添加下面一行
source "board/freescale/mx6ull_topeet/Kconfig"

1.3 添加设备树文件

复制参考板的设备树文件,在源码目录下执行下列命令创建我们自己板子的设备树文件。

$ cd arch/arm/dts/
$ cp imx6ull-14x14-evk.dts imx6ull-14x14-topeet.dts
$ cp imx6ul-14x14-evk.dtsi imx6ul-14x14-topeet.dtsi
$ cp imx6ul-14x14-evk-u-boot.dtsi imx6ul-14x14-topeet-u-boot.dtsi

修改arch/arm/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"
#include "imx6ul-14x14-topeet-u-boot.dtsi"

/ {
	model = "i.MX6 ULL 14x14 TOPEET Board";
	compatible = "fsl,imx6ull-14x14-topeet", "fsl,imx6ull";
};

&clks {
	assigned-clocks = <&clks IMX6UL_CLK_PLL3_PFD2>;
	assigned-clock-rates = <320000000>;
};

&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";
};

修改arch/arm/dts/Makefile文件

dtb-$(CONFIG_MX6ULL) += \
	# 此处代码省略
	imx6ulz-14x14-evk-gpmi-weim.dtb \
	#添加我们的板子
	imx6ull-14x14-topeet.dtb

2. 修改设备树

添加完板子之后对uboot的修改主要就是修改设备树,源码基本不需要修改。

2.1 修改网卡

讯为的TERMINATOR_V1.1开发板使用的phy芯片和官方EVK开发板相同,只有设计上略有不同。TERMINATOR_V1.1开发板的两个phy芯片复位引脚分别接到了GPIO5_IO07和GPIO5_IO08上,所以要对phy配置复位引脚。GPIO5_IO07和GPIO5_IO08被复用为了SPI4的引脚,我们先失能SPI4。

// arch/arm/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 */
		>;
	};
};

修改configs/mx6ull_14x14_topeet_defconfig文件

# configs/mx6ull_14x14_topeet_defconfig

# 最后添加,随机MAC地址
CONFIG_NET_RANDOM_ETHADDR=y

2.1 修改LCD

本文对RGB-LCD修改,其他显示设备不支持。

// arch/arm/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- mx6ull_14x14_topeet_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

编译完成,生成u-boot-dtb.imx是带有IVT的,可以烧写。
在这里插入图片描述

3.1 下载验证

使用uuu启动uboot,将拨码开关拨到串行下载模式,连接好串口和OTG。执行$ sudo uuu u-boot-dtb.imx命令,进行下载。
在这里插入图片描述
查看串口打印信息,uboot启动正常,屏幕显示正常,按Ctrl+C进入命令行。
在这里插入图片描述
连接ETHERNET2到路由器,dhcp获取ip,ping服务器成功。
在这里插入图片描述
按板子复位键,执行$ sudo uuu -b emmc u-boot-dtb.imx命令,将uboot下载到EMMC。设置拨码开关为EMMC启动,按复位键成功启动。
在这里插入图片描述

4. 总结

uboot移植添加了很多板级文件,这些都不是重要的(其他芯片可能没有这些)。修改设备树是移植的重中之重,但是TERMINATOR_V1.1开发板和官方imx6ullevk开发板比较接近,甚至官方demo板的镜像在讯为开发板直接可以跑起来,所以修改比较简单。本文仅供学习参考,如有问题欢迎指正。

移植源码获取:

git clone https://github.com/Sonboy97/uboot.git -b imx
版本:565439162d138ca8b57a4fda6b85c6513b4cd7f8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrSonboy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值