im6ull-uboot(2021.07)移植(一)

声明

  • 在下文中将修改的文件的名字简述为自己的,这个根据自己的需要命名。
  • 这仅仅是自己根据正点原子的文档进行修改,正点原子教程中使用的uboot版本较低,于是自己想试试高版本的。
  • uboot版本为: 2021.07
  • 交叉编译器版本: 11.3.1
  • 编译主机: ubuntu 18.04
  • 开发板: 正点原子 I.MX6U-MINI v1.8

1 获取源码

1.1 从u-boot官网获取

u-boot官网

使用官方的u-boot的前提是芯片厂商已经将芯片适配相关的代码开源到u-boot官方源码中(要不从头构建太麻烦了,对于现在学习都费劲的我实在是完不成)。

1.2 从芯片厂商获取

从芯片厂商处获得的u-boot一定是对相关芯片适配过的。

去NXP的官网下载u-boot。

1.3 从开发板厂商获取

对于学习使用的开发板,开发板厂商一定会对相关板子进行适配(直接拿来就能用的那种)。

2 修改顶层Makefile

在编译的u-boot源码时需要向Makefile传递两个参数,分别为ARCHCROSS_COMPILE两个参数。

每次使用make编译的时候都需要添加这两个参数,所以直接修改Makefile将两个参数直接添加到Makefile中。

Makefile

ifeq (arm, arm)
CROSS_COMPILE ?= arm-linux-gnueabihf-
endif

表示一直使用arm-linux-gnueabihf-gcc编译。

3 xxx_defconfig配置文件

3.1 拷贝生成自己的配置文件

所有的配置文件在configs配置文件夹下。

  1. 进入到configs文件夹下

  2. 查看文件夹下的配置文件,找到自己板子的默认配置文件

  3. im6ull的默认配置文件为mx6ull_14x14_evk_defconfig,拷贝默认配置文件,并将其重命名。

    cp mx6ull_14x14_evk_defconfig mx6ull_dang_defconfig #拷贝生成自己的配置文件
    

3.2 修改defconfig文件

3.2.1 查看defconfig文件

CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_SYS_TEXT_BASE=0x87800000
CONFIG_NR_DRAM_BANKS=1
CONFIG_SYS_MEMTEST_START=0x80000000
CONFIG_SYS_MEMTEST_END=0x88000000
CONFIG_ENV_SIZE=0x2000
CONFIG_ENV_OFFSET=0xC0000
CONFIG_MX6ULL=y
CONFIG_TARGET_MX6ULL_14X14_EVK=y
CONFIG_DM_GPIO=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"
CONFIG_SUPPORT_RAW_INITRD=y
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg"
CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_HUSH_PARSER=y
CONFIG_CMD_BOOTZ=y
CONFIG_CMD_MEMTEST=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_OF_CONTROL=y
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_MMC=y
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_SYS_MMC_ENV_DEV=1
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_BOUNCE_BUFFER=y
CONFIG_DM_74X164=y
CONFIG_DM_I2C=y
CONFIG_FSL_USDHC=y
CONFIG_MTD=y
CONFIG_DM_SPI_FLASH=y
CONFIG_SF_DEFAULT_MODE=0
CONFIG_SF_DEFAULT_SPEED=40000000
CONFIG_SPI_FLASH_STMICRO=y
CONFIG_PHYLIB=y
CONFIG_PHY_MICREL=y
CONFIG_PHY_MICREL_KSZ8XXX=y
CONFIG_DM_ETH=y
CONFIG_DM_ETH_PHY=y
CONFIG_FEC_MXC=y
CONFIG_MII=y
CONFIG_PINCTRL=y
CONFIG_PINCTRL_IMX6=y
CONFIG_DM_REGULATOR=y
CONFIG_DM_REGULATOR_FIXED=y
CONFIG_DM_REGULATOR_GPIO=y
CONFIG_MXC_UART=y
CONFIG_SPI=y
CONFIG_DM_SPI=y
CONFIG_FSL_QSPI=y
CONFIG_IMX_THERMAL=y

3.2.2 修改defconfig文件

需要修改的主要是下面的内容

CONFIG_TARGET_MX6ULL_14X14_EVK=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg"

将其修改为

CONFIG_TARGET_MX6ULL_DANG=y #将CONFIG_TARGET_MX6ULL_DANG配置成y,自己的编译选项
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-dang" #设备树
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_dang/imximage.cfg" #指明板级配置文件

3.3 添加其他配置文件

3.3.1 添加配置头文件

拷贝 include/configs文件夹下的mx6ullevk.h生成自己的头文件。

cd include/configs
cp mx6ullevk.h mx6ull_dang.h

修改mx6ull_dang.h的内容,将头文件中的宏

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H

改为

#ifndef __MX6ULL_DANG_CONFIG_H
#define __MX6ULL_DANG_CONFIG_H

3.3.2 添加对应的板级文件夹

拷贝生成自己的板级文件夹

cd board/freescale/
cp mx6ullevk/ mx6ull_dang -r

3.3.3 修改板级文件夹中的内容

  1. /board/freescale/mx6ull_dang 中的mx6ullevk.c重命名为mx6ull_dang.c

    cd mx6ull_dang/
    mv mx6ullevk.c mx6ull_dang.c 
    

    mx6ull_dang.c中有个打印Board的语句,可以将其改为自己的(可改可不改)

    int checkboard(void)
    {
    	if (is_cpu_type(MXC_CPU_MX6ULZ))
    		puts("Board: MX6ULZ 14x14 EVK\n");
    	else
    		puts("Board: Dang MX6ULL\n"); //改为自己的
    
    	return 0;
    }
    
  2. 修改mx6ull_dang文件夹下的Makefile文件,将Makefile修改为

    # SPDX-License-Identifier: GPL-2.0+
    # (C) Copyright 2016 Freescale Semiconductor, Inc.
    
    obj-y  := mx6ull_dang.o
    

    需要将obj-y := mx6ullevk.o 修改为obj-y := mx6ull_dang.o,这样才会编译mx6ull_dang.c

  3. 修改mx6ull_dang文件夹下的imximage.cfg文件

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

    改为

    #ifdef CONFIG_USE_IMXIMG_PLUGIN
    /*PLUGIN    plugin-binary-file    IRAM_FREE_START_ADDR*/
    PLUGIN	board/freescale/mx6ull_dang/plugin.bin 0x00907000
    
  4. 修改mx6ull_dang文件夹下的Kconfig文件

    if TARGET_MX6ULL_14X14_EVK
    
    config SYS_BOARD
    	default "mx6ullevk"
    
    config SYS_VENDOR
    	default "freescale"
    
    config SYS_CONFIG_NAME
    	default "mx6ullevk"
    
    endif
    

    改为

    if TARGET_MX6ULL_DANG
    
    config SYS_BOARD
    	default "mx6ull_dang"
    
    config SYS_VENDOR
    	default "freescale"
    
    config SYS_CONFIG_NAME
    	default "mx6ull_dang"
    
    endif
    
  5. 修改mx6ull_dang文件夹下的 MAINTAINERS文件

    MX6ULLEVK BOARD
    M:	Peng Fan <peng.fan@nxp.com>
    S:	Maintained
    F:	board/freescale/mx6ullevk/
    F:	include/configs/mx6ullevk.h
    F:	configs/mx6ull_14x14_evk_defconfig
    F:	configs/mx6ull_14x14_evk_plugin_defconfig
    F:	configs/mx6ulz_14x14_evk_defconfig
    

    改为

    MX6ULL_DANG BOARD
    M:	Peng Fan <peng.fan@nxp.com>
    S:	Maintained
    F:	board/freescale/mx6ull_dang/
    F:	include/configs/mx6ull_dang.h
    F:	configs/mx6ull_damg_defconfig
    F:	configs/mx6ull_dang_plugin_defconfig
    F:	configs/mx6ulz_dang_defconfig
    

    主要修改的是第1、4、5、6行,最后两行可以不改,删除也行。

  6. 修改U-Boot图形配置界面配置文件

    arch/arm/mach-imx/mx6文件夹下的Kconfig文件中添加

    image-20230829111654718

    image-20230829111856481

    config TARGET_MX6ULL_DANG
    	bool "Support mx6ull_dang"
    	depends on MX6ULL
    	select BOARD_LATE_INIT
    	select DM
    	select DM_THERMAL
    	imply CMD_DM
    
    
    source "board/freescale/mx6ull_dang/Kconfig"
    

4 拷贝设备树

4.1 拷贝参考板的设备树

拷贝参考板的设备树生成自己的设备树,对设备树的操作都在自己的设备树相关文件中进行改动,不要直接修改参考板的设备树

cd arch/arm/dts 
cp imx6ull-14x14-evk.dts imx6ull-dang.dts
cp imx6ul-14x14-evk.dtsi imx6ul-dang.dtsi

4.2 修改设备树

4.2.1 修改imx6ull-dang.dts

以下是未修改的代码块

// SPDX-License-Identifier: (GPL-2.0 OR MIT)
//
// Copyright (C) 2016 Freescale Semiconductor, Inc.

/dts-v1/;

#include "imx6ull.dtsi"
#include "imx6ul-14x14-evk.dtsi"

/ {
	model = "Freescale i.MX6 UltraLiteLite 14x14 EVK Board";
	compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull";
};

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

将上述文件内容修改为

// SPDX-License-Identifier: (GPL-2.0 OR MIT)
//
// Copyright (C) 2016 Freescale Semiconductor, Inc.

/dts-v1/;

#include "imx6ull.dtsi"
#include "imx6ul-dang.dtsi"

/ {
	model = "DANG Freescale i.MX6 UltraLiteLite 14x14 EVK Board";
	compatible = "fsl,imx6ull-dang", "fsl,imx6ull";
};

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

imx6ull-dang.dts主要修改的是第8行,将include的dtsi文件修改为自己的dtsi文件.

因为接下来接下来将修改dtsi文件中的内容,如果不将其换为自己的文件,那么自己修改的文件不会被编译。

4.3 修改dts目录下的Makefile

修改Makefile,添加生成自己设备树文件的选项。

image-20230829113824983

dtb-$(CONFIG_MX6ULL) += \
	imx6ull-14x14-evk.dtb \
	imx6ull-dang.dtb \
	imx6ull-colibri.dtb \
	imx6ull-myir-mys-6ulx-eval.dtb \
	imx6ull-seeed-npi-imx6ull-dev-board.dtb \
	imx6ull-phytec-segin-ff-rdk-emmc.dtb \
	imx6ull-dart-6ul.dtb \
	imx6ull-somlabs-visionsom.dtb \
	imx6ulz-14x14-evk.dtb

第三行的为添加的内容。

在文件行末的\后不能有空格等。

5 编译、下载、启动

5.1 编译

前面已经修改过Makefile了,所以编译的时候就不用使用这么多参数了.

  1. 生成配置文件

    make clean  #清除之前的编译文件
    make mx6ull_dang_defconfig #编译生成配置文件
    
  2. 编译工程

    make -j4
    

5.2 下载

  1. 查看生成文件

    查看是否生成对应的uboot文件

  2. 下载到开发板中

    按照自己的方法下载到开发板中就行,

5.3 启动

启动,查看打印的信息

image-20230829121725948

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将U-Boot 2021移植到i.MX6ULL上,需要进行以下步骤: 1. 获取U-Boot 2021源代码,并解压缩。 2. 进入U-Boot源代码目录,执行make mx6ull_config命令,生成配置文件。 3. 执行make命令编译U-Boot。 4. 将编译好的U-Boot烧录到i.MX6ULL的启动设备上,例如SD卡或eMMC。 5. 在i.MX6ULL上启动U-Boot,可以通过串口或网络连接进行调试和配置。 需要注意的是,U-Boot移植需要根据具体的硬件平台进行调整和配置,例如时钟、存储器、网络等参数。同时,还需要根据具体的应用场景进行功能定制和优化。 ### 回答2: 如何移植uboot2021到imx6ull平台上呢?这里主要分为以下几个步骤: 1. 准备工作:获取uboot2021源码,编译工具链及imx6ull开发板。 2. 配置uboot:将uboot源码解压到本地目录,进入该目录执行make distclean命令清除旧的编译结果,接着执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_defconfig命令生成初始配置文件,该命令将生成一个.config文件,保存uboot的各种配置选项。若需要重新配置uboot,可以执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig命令,进入ncurses界面进行配置。 3. 编译uboot:执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-命令编译uboot。编译完成后会生成u-boot.bin文件及其他相关文件。 4. 烧写uboot:将编译好的u-boot.bin文件烧写到imx6ull开发板上,可以使用JTAG或SD卡等方式进行烧写操作。 5. 测试uboot:烧写完成后重启开发板,在uboot命令行模式下执行命令,如printenv、boot等,验证uboot是否能够正常工作。 在这个过程中需要注意以下几点: 1. 在配置uboot时,需要参考imx6ull开发板的硬件配置文件进行相应的配置,如串口、网卡等。 2. 在编译uboot时,需要指定交叉编译工具链的路径及前缀,例如arm-linux-gnueabihf-。 3. 在烧写uboot前,需要确保imx6ull开发板已处于烧写模式,并准备好相应的烧写工具。 总结来说,移植uboot2021到imx6ull平台上需要对uboot进行配置、编译和烧写等操作,需要了解相关的硬件配置和交叉编译工具链等知识,同时需要注意进行正确的操作步骤和验证步骤。 ### 回答3: imx6ull是一款基于ARM Cortex-A7架构的嵌入式处理器,它广泛应用于物联网、智能家居、医疗设备等领域。移植U-Boot可以为imx6ull的开发和应用提供更多的功能和扩展性。本文将介绍如何移植U-Boot 2021到imx6ull平台上。 移植步骤: 1. 准备工具和环境:交叉编译工具、串口调试器和开发板。安装交叉编译工具,设置环境变量。 2. 下载U-Boot源码,并解压缩。 3. 选择imx6ull配置文件:从U-Boot源码中找到与imx6ull对应的配置文件,具体位置在“configs/”目录下。可以通过“make menuconfig”命令进行配置,或者手动复制对应的配置文件到“config/”目录下。 4. 编译U-Boot:执行“make”命令进行编译,输出“u-boot.bin”文件。 5. 烧录U-Boot:通过串口调试器将U-Boot烧录到开发板的Flash中。连接串口调试器,并使用命令“sudo minicom -s”打开串口设置界面。设置串口设备、波特率等参数,保存退出。使用“sudo minicom”命令即可进入串口终端,输入“Ctrl + C”进入U-Boot命令行模式。通过“mmc dev 0”和“mmc part”命令设置分区和卡设备。使用“fatls mmc 0:1”或“ext2ls mmc 0:1”查看文件系统,确认烧录地址和文件名。 6. 烧录软件:使用命令“fatload mmc 0:1 ${loadaddr} u-boot.bin”将U-Boot软件烧录到开发板中,然后通过“go ${loadaddr}”命令运行U-Boot。 注意事项: 1. 在选择配置文件时,要注意选择与开发板硬件一致的配置文件,否则可能会出现不可预知的问题。 2. 在烧录过程中,注意确认文件名和烧录地址是否正确,以免造成不可恢复的损失。 3. 在调试过程中,可以使用“printenv”命令查看环境变量,使用“setenv”命令设置和修改环境变量。 总结: 移植U-Boot需要使用交叉编译工具和串口调试器,选取开发板对应的配置文件,然后进行编译和烧录。在调试过程中要注意环境变量和文件名,避免出现不可预知的问题。U-Boot为开发者提供了更多的扩展性和功能,可以大大提高开发效率和应用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值