[NXP i.MX6ULL] UBOOT-2020.04

前提说明

操作系统:ubuntu 20.04

硬件环境:野火IMX6ULL NAND

注意有些路径为我自己的本地路径,后期我会完善一些过程。

交叉编译器

Linaro Releases

1. 下载最新版本

# 下载
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

# 解压
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

2. 配置环境变量

# 修改配置文件
vim ~/.bashrc

# 追加路径和添加环境变量
export PATH=$PATH:/home/bohao/Nand/tool/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

# 生效
source ~/.bashrc

3. 查看版本信息

# 查看版本信息
arm-linux-gnueabihf-gcc --version

# 显示如下信息
arm-linux-gnueabihf-gcc (Linaro GCC 7.5-2019.12) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

4. 安装相关工具 

$ sudo apt install bc build-essential git libncurses5-dev lzop perl libssl-dev bison flex

Uboot 编译和烧录

uboot-imx - i.MX U-Boot

1. 下载2020版本

$ git clone https://source.codeaurora.org/external/imx/uboot-imx -b imx_v2020.04_5.4.70_2.3.0

2. 修改配置文件

CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_2022ZZU=y
CONFIG_ENV_SIZE=0x100000
CONFIG_ENV_OFFSET=0x600000
CONFIG_DM_GPIO=y
CONFIG_NR_DRAM_BANKS=1
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/2022zzu/imximage.cfg"
CONFIG_NAND_BOOT=y
CONFIG_CMD_NAND=y
CONFIG_CMD_NAND_TRIMFFS=y
CONFIG_CMD_UBI=y
CONFIG_MTD=y
CONFIG_DM_MTD=y
CONFIG_MTD_RAW_NAND=y
CONFIG_CMD_MTDPARTS=y
CONFIG_MTDIDS_DEFAULT="nand0=gpmi-nand"
CONFIG_MTDPARTS_SKIP_INVALID=y
CONFIG_NAND=y
CONFIG_NAND_MXS=y
CONFIG_NAND_MXS_DT=y
CONFIG_ENV_IS_IN_NAND=y
CONFIG_BOOTDELAY=3
# CONFIG_CONSOLE_MUX is not set
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_SUPPORT_RAW_INITRD=y
CONFIG_BOUNCE_BUFFER=y
CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_HUSH_PARSER=y
CONFIG_CMD_BOOTZ=y
# CONFIG_CMD_IMLS is not set
CONFIG_CMD_MEMTEST=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_USB=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_BMP=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_NET=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_DEFAULT_DEVICE_TREE="2022zzu"
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_DM_74X164=y
CONFIG_DM_I2C=y
CONFIG_DM_MMC=y
CONFIG_FSL_USDHC=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_SPI=y
CONFIG_DM_SPI=y
CONFIG_SOFT_SPI=y
CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_USB_STORAGE=y
CONFIG_USB_HOST_ETHER=y
CONFIG_USB_ETHER_ASIX=y
CONFIG_DM_VIDEO=y
CONFIG_SYS_WHITE_ON_BLACK=y

CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_USB_GADGET_MANUFACTURER="FSL"
CONFIG_USB_GADGET_VENDOR_NUM=0x0525
CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
CONFIG_CI_UDC=y

CONFIG_CMD_FASTBOOT=y
CONFIG_USB_FUNCTION_FASTBOOT=y
CONFIG_FASTBOOT_UUU_SUPPORT=y
CONFIG_FASTBOOT=y
CONFIG_FASTBOOT_BUF_ADDR=0x86800000
CONFIG_FASTBOOT_BUF_SIZE=0x40000000
CONFIG_FASTBOOT_FLASH=y
CONFIG_EFI_PARTITION=y

CONFIG_LOCALVERSION_AUTO=n

3. 修改头文件

a. mtdparts

Nand Flahs分区信息,我这里要存了两个系统,因此我大概分了9块。

b. CONFIG_MFG_ENV_SETTINGS

这个参数供mfgtool工具使用,分区操作是由fireware文件夹中的uboot(逻辑上)完成的。

c. CONFIG_EXTRA_ENV_SETTINGS

uboot启动时,先从Flash中读取变量,如果Flash的环境变量CRC校验错误,则会使用以下默认变量。

$ cp include/configs/mx6ullevk.h include/configs/2022zzu.h

#ifndef __2022ZZU_CONFIG_H
#define __2022ZZU_CONFIG_H

#ifdef CONFIG_NAND_BOOT
#define MFG_NAND_PARTITION "mtdparts=gpmi-nand:6m(boot),1m(env),10m(kernel1),1m(dtb1),100m(rootfs1),10m(kernel2),1m(dtb2),100m(rootfs2),-(app) "
#else
#define MFG_NAND_PARTITION ""
#endif

#define CONFIG_MFG_ENV_SETTINGS \
	"mfgtool_args=setenv bootargs console=${console},${baudrate} " \
	    BOOTARGS_CMA_SIZE \
		"rdinit=/linuxrc " \
		"g_mass_storage.stall=0 g_mass_storage.removable=1 " \
		"g_mass_storage.file=/fat g_mass_storage.ro=1 " \
		"g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\
		MFG_NAND_PARTITION \
		"\0" \
	"initrd_addr=0x83800000\0" \
	"initrd_high=0xffffffff\0" \
	"bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \

#if defined(CONFIG_NAND_BOOT)
#define CONFIG_EXTRA_ENV_SETTINGS \
	CONFIG_MFG_ENV_SETTINGS \
	TEE_ENV \
	"splashimage=0x8c000000\0" \
	"fdt_addr=0x83000000\0" \
	"fdt_high=0xffffffff\0"	  \
	"tee_addr=0x84000000\0" \
	"console=ttymxc0\0" \
	"ethaddr=00:04:9f:04:d2:35\0" \
	"eth0addr=00:04:9f:04:d2:36\0" \
	"eth1addr=00:04:9f:04:d2:37\0" \
	"ipaddr=192.168.0.121\0" \
	"netmask=255.255.255.0\0" \
	"gatewayip=192.168.0.1\0" \
	"serverip=192.168.0.104\0" \
	"bootargs=console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs " \
		BOOTARGS_CMA_SIZE \
		MFG_NAND_PARTITION \
		"\0" \
	"bootcmd=nand read 0x80800000 0x700000 0xA00000;nand read 0x83000000 0x1100000 0x100000;bootz 0x80800000 - 0x83000000;\0"

4. 修改板级文件

$ cp board/freescale/mx6ullevk/ board/freescale/2022zzu -rf
$ mv board/freescale/2022zzu/mx6ullevk.c board/freescale/2022zzu/2022zzu.c

$ vim board/freescale/2022zzu/imximage_lpddr2.cfg
# 修改以下内容
PLUGIN	board/freescale/2022zzu/plugin.bin 0x00907000

$ vim board/freescale/2022zzu/imximage.cfg
# 修改以下内容
PLUGIN	board/freescale/2022zzu/plugin.bin 0x00907000

$ vim board/freescale/2022zzu/Kconfig
# 修改以下内容
if TARGET_2022ZZU

config SYS_BOARD
	default "2022zzu"

config SYS_VENDOR
	default "freescale"

config SYS_CONFIG_NAME
	default "2022zzu"

config SYS_TEXT_BASE
	default 0x87800000
endif


$ vim board/freescale/2022zzu/MAINTAINERS
修改以下内容
2022ZZU BOARD
M:	Peng Fan <peng.fan@nxp.com>
S:	Maintained
F:	board/freescale/2022zzu/
F:	include/configs/2022zzu.h
F:	configs/2022zzu_defconfig

$ vim board/freescale/2022zzu/Makefile
obj-y  := 2022zzu.o

5. 修改Kconfig文件

$ vim arch/arm/mach-imx/mx6/Kconfig

config TARGET_2022ZZU
	bool "Support 2022zzu"
	select BOARD_LATE_INIT
	select DM
	select DM_THERMAL
	select MX6ULL
	imply CMD_DM

source "board/freescale/2022zzu/Kconfig"

6. 修改设备树文件

我们主要用到了串口网络口,目前我们的板子和NXP的评估版一样,因此可以不修改。

$ cp arch/arm/dts/imx6ull-14x14-evk-gpmi-weim.dts arch/arm/dts/2022zzu.dts

$ vim arch/arm/dts/Makefile

dtb-$(CONFIG_MX6ULL) += \
    ... ...
	imx6ull-14x14-evk-gpmi-weim.dtb \
	2022zzu.dtb \
    ... ...

7. 编译烧录

uboot-dtb.imx文件分别下载到mfgtool工具的file文件夹和firmware文件夹。

U-Boot 2020.04+ (Apr 23 2022 - 11:04:23 -0700)

CPU:   i.MX6ULL rev1.1 792 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 49C
Reset cause: POR
Model: i.MX6 ULL 14x14 EVK Board
Board: MX6ULL ZZU GATEWAY
DRAM:  512 MiB
NAND:  512 MiB
MMC:   FSL_SDHC: 0
Loading Environment from NAND... OK
[*]-Video Link 0 (480 x 272)
        [0] lcdif@21c8000, video
In:    serial
Out:   serial
Err:   serial
Net:   eth1: ethernet@20b4000 [PRIME]Get shared mii bus on ethernet@2188000
, eth0: ethernet@2188000
Fastboot: Normal
Normal Boot
Hit any key to stop autoboot:  0
=>
=> ping 192.168.0.104
Using ethernet@20b4000 device
host 192.168.0.104 is alive

Uboot 原理分析

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值