[I.MX6UL] U-Boot移植(三) 在 U-Boot 中添加自己的开发板

2023-11-10 15:10
文章标签 移植 boot 开发板 mx6ul

本文主要是介绍[I.MX6UL] U-Boot移植(三) 在 U-Boot 中添加自己的开发板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

添加开发板默认配置文件

①先在 configs 目录下创建默认配置文件,复制 mx6ull_14x14_evk_emmc_defconfig,然后重命名为 mx6ull_mybsp_emmc_defconfig,命令如下:

cd configs
cp mx6ull_14x14_evk_emmc_defconfig  mx6ull_mybsp_emmc_defconfig

在这里插入图片描述

终端输入:sudo gedit mx6ull_mybsp_emmc_defconfig
然后将文件 mx6ull_mybsp_emmc_defconfig 中的内容改成下面的:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_mybsp_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_MYBSP_EMMC=y
CONFIG_CMD_GPIO=y

在这里插入图片描述
提示:尾巴不要带空格,否则.imx无法编译成功

添加开发板对应的头文件

在 目 录 include/configs 下 添 加 I.MX6ULL-ALPHA 开 发 板 对 应 的 头 文 件 , 复 制include/configs/mx6ullevk.h,并重命名为 mx6ull_mybsp_emmc.h,命令如下:

cp include/configs/mx6ullevk.h include/configs/mx6ull_mybsp_emmc.h
gedit include/configs/mx6ull_mybsp_emmc.h

拷贝完成以后将:

#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H

改为:

#ifndef __MX6ULL_MYBSP_EMMC_CONFIG_H
#define __MX6ULL_MYBSP_EMMC_CONFIG_H
在这里插入图片描述

修改LED屏幕型号

TFT43AB 改为 TFT7016

在这里插入图片描述

"if test $board_name = EVK && test $board_rev = 9X9; then "
"setenv fdt_file imx6ull-9x9-evk.dtb; fi; "
"if test $board_name = EVK && test $board_rev = 14X14; then "
"setenv fdt_file imx6ull-14x14-evk.dtb; fi; "
"if test $fdt_file = undefined; then "
"echo WARNING: Could not determine dtb to use; fi; " \

修改为:

"setenv fdt_file imx6ull-mybsp-emmc.dtb; " \

在这里插入图片描述

修改网口为0,且使用SMSC芯片。

CONFIG_FEC_MXC_PHYADDR 0x2 改 0x0
#define CONFIG_PHY_MICREL 改 #define CONFIG_PHY_SMSC

在这里插入图片描述

追加宏定义。
#define CONFIG_FAT_WRITE /* 使能fatwrite命令 */
在这里插入图片描述

到此为止,uboot修改完毕。

下面介绍这份配置文件含义:

第 14 行, 添加了头文件 mx6_common.h,如果在 mx6ull_mybsp_emmc.h 中没有发现有配置某个功能或命令,但是实际却存在的话,可以到 mx6_common.h 文件里面去找一下。
第 29~39 行, 设置 DRAM 的大小,宏 PHYS_SDRAM_SIZE 就是板子上 DRAM 的大小,如果用的NXP官方的9X9 EVK开发板的话DRAM大小就为256MB。 否则的话默认为512MB,正点原子的 I.MX6U-ALPHA 开发板用的是 512MB DDR3。
第 50 行, 定义宏 CONFIG_DISPLAY_CPUINFO,uboot 启动的时候可以输出 CPU 信息。
第 51 行, 定义宏 CONFIG_DISPLAY_BOARDINFO, uboot 启动的时候可以输出板子信息。
第 54 行, CONFIG_SYS_MALLOC_LEN 为 malloc 内存池大小,这里设置为 16MB。
第 56 行, 定义宏 CONFIG_BOARD_EARLY_INIT_F,这样 board_init_f 函数就会调用board_early_init_f 函数。
第 57 行, 定义宏 CONFIG_BOARD_LATE_INIT,这样 board_init_r 函数就会调用
board_late_init 函数。
第 59、60 行, 使能 I.MX6ULL 的串口功能,宏 CONFIG_MXC_UART_BASE 表示串口寄存器基地址,这里使用的串口 1,基地址为 UART1_BASE,UART1_BASE 定义在文件arch/arm/include/asm/arch-mx6/imx-regs.h 中,imx-regs.h 是 I.MX6ULL 寄存器描述文件,根据imx-regs.h 可得到 UART1_BASE 的值如下:

UART1_BASE = (ATZ1_BASE_ADDR + 0x20000) = AIPS1_ARB_BASE_ADDR + 0x20000 = 0x02000000 +  0x20000 = 0X02020000 

在这里插入图片描述
第63、 64行, EMMC接在I.MX6ULL的USDHC2上, 宏CONFIG_SYS_FSL_ESDHC_ADDR为 EMMC 所使用接口的寄存器基地址,也就是 USDHC2 的基地址。

第 67~72 行, 跟 NAND 相关的宏,因为 NAND 和 USDHC2 的引脚冲突,因此如果使用NAND 的只能使用一个 USDHC 设备(SD 卡)。如果没有使用 NAND,那么就有两个 USDHC 设备(EMMC 和 SD 卡), 宏 CONFIG_SYS_FSL_USDHC_NUM 表示 USDHC 数量。 EMMC 版本的核心版没有用到 NAND,所以 CONFIG_SYS_FSL_USDHC_NUM=2。

第 75~81, 和 I2C 有关的宏定义,用于控制使能哪个 I2C,I2C 的速度为多少。

第 92~96 行, NAND 的分区设置,如果使用 NAND 的话,默认的 NAND 分区为:"mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) ",分区结果如表所示:
在这里插入图片描述NAND 的分区是可以调整的, 比如 boot 分区我们用不了 64M 这么大, 因此可以将其改小,其他的分区一样的。

第 98~111 行, 宏 CONFIG_MFG_ENV_SETTINGS 定义了一些环境变量,使用 MfgTool 烧写系统时候会用到这里面的环境变量。

第 113~202 行 , 通 过 条 件 编 译 来 设 置 宏 CONFIG_EXTRA_ENV_SETTINGS , 宏CONFIG_EXTRA_ENV_SETTINGS 也是设置一些环境变量,此宏会设置 bootargs 这个环境变量,后面我们会详细分析这个宏定义。

第 204~217 行, 设置宏 CONFIG_BOOTCOMMAND,此宏就是设置环境变量 bootcmd 的值。后面会详细的分析这个宏定义。

第 220~222 行, 设置命令 memtest 相关宏定义,比如使能命令 memtest,设置 memtest 测试的内存起始地址和内存大小。

第 224 行, 宏 CONFIG_SYS_LOAD_ADDR 表示 linux kernel 在 DRAM 中的加载地址,也就是 linux kernel 在 DRAM 中的存储首地址,CONFIG_LOADADDR=0X80800000。

第 225 行, 宏 CONFIG_SYS_HZ 为系统时钟频率,这里为 1000Hz。

第 227 行, 宏 CONFIG_STACKSIZE 为栈大小,这里为 128KB。

第 230 行, 宏 CONFIG_NR_DRAM_BANKS 为 DRAM BANK 的数量,I.MX6ULL 只有一个DRAM BANK,我们也只用到了一个 BANK,所以为 1。

第 231 行, 宏 PHYS_SDRAM 为 I.MX6ULL 的 DRAM 控制器 MMDC0 所管辖的 DRAM 范围起始地址,也就是 0X80000000。

第 233 行, 宏 CONFIG_SYS_SDRAM_BASE 为 DRAM 的起始地址。

第 234 行, 宏 CONFIG_SYS_INIT_RAM_ADDR 为 I.MX6ULL 内部 IRAM 的起始地址(也就是 OCRAM 的起始地址),为 0X00900000。

第 235 行, 宏 CONFIG_SYS_INIT_RAM_SIZE 为 I.MX6ULL 内部 IRAM 的大小(OCRAM的大小),为 0X00040000=128KB。

第 237~240 行, 宏 CONFIG_SYS_INIT_SP_OFFSET 和 CONFIG_SYS_INIT_SP_ADDR 与初始 SP 有关,第一个为初始 SP 偏移,第二个为初始 SP 地址。

第256行, 宏CONFIG_SYS_MMC_ENV_DEV为默认的MMC设备, 这里默认为USDHC2,也就是 EMMC。

**第 257 行,**宏 CONFIG_SYS_MMC_ENV_PART 为模式分区,默认为第 0 个分区。

第 258 行, 宏 CONFIG_MMCROOT 设置进入 linux 系统的根文件系统所在的分区, 这里设置为"/dev/mmcblk1p2",也就是 EMMC 设备的第 2 个分区。第 0 个分区保存 uboot,第 1 个分区保存 linux 镜像和设备树,第 2 个分区为 Linux 系统的根文件系统。

**第 277~291 行,**与 NAND 有关的宏定义,如果使用 NAND 的话。

第 293 行, 宏 CONFIG_ENV_SIZE 为环境变量大小,默认为 8KB。

第 294~308 行, 宏 CONFIG_ENV_OFFSET 为环境变量偏移地址,这里的偏移地址是相对于存储器的首地址。如果环境变量保存在 EMMC 中的话,环境变量偏移地址为 1264KB。如果环境变量保存在 SPI FLASH 中的话,偏移地址为 7681024。如果环境变量保存在 NAND 中的话,偏移地址为 60<<20(60MB),并且重新设置环境变量的大小为 128KB。

第 312~323 行, 与 USB 相关的宏定义。

第 325~342 行, 与网络相关的宏定义,比如使能 dhcp、ping 等命令。第 331 行的宏CONFIG_FEC_ENET_DEV 指定 uboot 所使用的网口,I.MX6ULL 有两个网口,为 0 的时候使用 ENET1,为 1 的时候使用 ENET2。宏 IMX_FEC_BASE 为 ENET 接口的寄存器首地址,宏CONFIG_FEC_MXC_PHYADDR 为网口 PHY 芯片的地址。宏 CONFIG_FEC_XCV_TYPE 为PHY 芯片所使用的接口类型,I.MX6U-ALPHA 开发板的两个 PHY 都使用的 RMII 接口。

第 344~END, 剩下的都是一些配置宏,比如 CONFIG_VIDEO 宏用于开启 LCD,CONFIG_VIDEO_LOGO 使能 LOGO 显示,CONFIG_CMD_BMP 使能 BMP 图片显示指令。这样就可以在 uboot 中显示图片了,一般用于显示 logo。

/** Copyright (C) 2016 Freescale Semiconductor, Inc.** Configuration settings for the Freescale i.MX6UL 14x14 EVK board.** SPDX-License-Identifier:	GPL-2.0+*/
#ifndef __MX6ULL_MYBSP_EMMC_CONFIG_H
#define __MX6ULL_MYBSP_EMMC_CONFIG_H#include <asm/arch/imx-regs.h>
#include <linux/sizes.h>
#include "mx6_common.h"
#include <asm/imx-common/gpio.h>/* uncomment for PLUGIN mode support */
/* #define CONFIG_USE_PLUGIN *//* uncomment for SECURE mode support */
/* #define CONFIG_SECURE_BOOT */#ifdef CONFIG_SECURE_BOOT
#ifndef CONFIG_CSF_SIZE
#define CONFIG_CSF_SIZE 0x4000
#endif
#endif#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 CONFIG_BOOTARGS_CMA_SIZE   "cma=96M "
#else
#define PHYS_SDRAM_SIZE		SZ_512M
#define CONFIG_BOOTARGS_CMA_SIZE   ""
/* DCDC used on 14x14 EVK, no PMIC */
#undef CONFIG_LDO_BYPASS_CHECK
#endif/* SPL options */
/* We default not support SPL* #define CONFIG_SPL_LIBCOMMON_SUPPORT* #define CONFIG_SPL_MMC_SUPPORT* #include "imx6_spl.h"
*/#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG#define CONFIG_DISPLAY_CPUINFO
#define CONFIG_DISPLAY_BOARDINFO/* Size of malloc() pool */
#define CONFIG_SYS_MALLOC_LEN		(16 * SZ_1M)#define CONFIG_BOARD_EARLY_INIT_F
#define CONFIG_BOARD_LATE_INIT#define CONFIG_MXC_UART
#define CONFIG_MXC_UART_BASE		UART1_BASE/* MMC Configs */
#ifdef CONFIG_FSL_USDHC
#define CONFIG_SYS_FSL_ESDHC_ADDR	USDHC2_BASE_ADDR/* NAND pin conflicts with usdhc2 */
#ifdef CONFIG_SYS_USE_NAND
#define CONFIG_SYS_FSL_USDHC_NUM	1
#else
#define CONFIG_SYS_FSL_USDHC_NUM	2
#endif
#endif/* I2C configs */
#define CONFIG_CMD_I2C
#ifdef CONFIG_CMD_I2C
#define CONFIG_SYS_I2C
#define CONFIG_SYS_I2C_MXC
#define CONFIG_SYS_I2C_MXC_I2C1		/* enable I2C bus 1 */
#define CONFIG_SYS_I2C_MXC_I2C2		/* enable I2C bus 2 */
#define CONFIG_SYS_I2C_SPEED		100000/* PMIC only for 9X9 EVK */
#define CONFIG_POWER
#define CONFIG_POWER_I2C
#define CONFIG_POWER_PFUZE3000
#define CONFIG_POWER_PFUZE3000_I2C_ADDR  0x08
#endif#define CONFIG_SYS_MMC_IMG_LOAD_PART	1#ifdef CONFIG_SYS_BOOT_NAND
#define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) "
#else
#define CONFIG_MFG_NAND_PARTITION ""
#endif#define CONFIG_MFG_ENV_SETTINGS \"mfgtool_args=setenv bootargs console=${console},${baudrate} " \CONFIG_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 "\"g_mass_storage.iSerialNumber=\"\" "\CONFIG_MFG_NAND_PARTITION \"clk_ignore_unused "\"\0" \"initrd_addr=0x83800000\0" \"initrd_high=0xffffffff\0" \"bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \

#if defined(CONFIG_SYS_BOOT_NAND)
#define CONFIG_EXTRA_ENV_SETTINGS \CONFIG_MFG_ENV_SETTINGS \"panel=TFT7016\0" \"fdt_addr=0x83000000\0" \"fdt_high=0xffffffff\0"	  \"console=ttymxc0\0" \"bootargs=console=ttymxc0,115200 ubi.mtd=4 "  \"root=ubi0:rootfs rootfstype=ubifs "		     \CONFIG_BOOTARGS_CMA_SIZE \"mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs)\0"\"bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\"nand read ${fdt_addr} 0x5000000 0x100000;"\"bootz ${loadaddr} - ${fdt_addr}\0"#else
#define CONFIG_EXTRA_ENV_SETTINGS \CONFIG_MFG_ENV_SETTINGS \"script=boot.scr\0" \"image=zImage\0" \"console=ttymxc0\0" \"fdt_high=0xffffffff\0" \"initrd_high=0xffffffff\0" \"fdt_file=undefined\0" \"fdt_addr=0x83000000\0" \"boot_fdt=try\0" \"ip_dyn=yes\0" \"panel=TFT7016\0" \"mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \"mmcautodetect=yes\0" \"mmcargs=setenv bootargs console=${console},${baudrate} " \CONFIG_BOOTARGS_CMA_SIZE \"root=${mmcroot}\0" \"loadbootscript=" \"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \"bootscript=echo Running bootscript from mmc ...; " \"source\0" \"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \"mmcboot=echo Booting from mmc ...; " \"run mmcargs; " \"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \"if run loadfdt; then " \"bootz ${loadaddr} - ${fdt_addr}; " \"else " \"if test ${boot_fdt} = try; then " \"bootz; " \"else " \"echo WARN: Cannot load the DT; " \"fi; " \"fi; " \"else " \"bootz; " \"fi;\0" \"netargs=setenv bootargs console=${console},${baudrate} " \CONFIG_BOOTARGS_CMA_SIZE \"root=/dev/nfs " \"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \"netboot=echo Booting from net ...; " \"run netargs; " \"if test ${ip_dyn} = yes; then " \"setenv get_cmd dhcp; " \"else " \"setenv get_cmd tftp; " \"fi; " \"${get_cmd} ${image}; " \"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \"if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \"bootz ${loadaddr} - ${fdt_addr}; " \"else " \"if test ${boot_fdt} = try; then " \"bootz; " \"else " \"echo WARN: Cannot load the DT; " \"fi; " \"fi; " \"else " \"bootz; " \"fi;\0" \"findfdt="\"if test $fdt_file = undefined; then " \"setenv fdt_file imx6ull-mybsp-emmc.dtb; ""fi;\0" \#define CONFIG_BOOTCOMMAND \"run findfdt;" \"mmc dev ${mmcdev};" \"mmc dev ${mmcdev}; if mmc rescan; then " \"if run loadbootscript; then " \"run bootscript; " \"else " \"if run loadimage; then " \"run mmcboot; " \"else run netboot; " \"fi; " \"fi; " \"else run netboot; fi"
#endif/* Miscellaneous configurable options */
#define CONFIG_CMD_MEMTEST
#define CONFIG_SYS_MEMTEST_START	0x80000000
#define CONFIG_SYS_MEMTEST_END		(CONFIG_SYS_MEMTEST_START + 0x8000000)#define CONFIG_SYS_LOAD_ADDR		CONFIG_LOADADDR
#define CONFIG_SYS_HZ			1000#define CONFIG_STACKSIZE		SZ_128K/* Physical Memory Map */
#define CONFIG_NR_DRAM_BANKS		1
#define PHYS_SDRAM			MMDC0_ARB_BASE_ADDR#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM
#define CONFIG_SYS_INIT_RAM_ADDR	IRAM_BASE_ADDR
#define CONFIG_SYS_INIT_RAM_SIZE	IRAM_SIZE#define CONFIG_SYS_INIT_SP_OFFSET \(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
#define CONFIG_SYS_INIT_SP_ADDR \(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)/* FLASH and environment organization */
#define CONFIG_SYS_NO_FLASH#ifdef CONFIG_SYS_BOOT_QSPI
#define CONFIG_FSL_QSPI
#define CONFIG_ENV_IS_IN_SPI_FLASH
#elif defined CONFIG_SYS_BOOT_NAND
#define CONFIG_SYS_USE_NAND
#define CONFIG_ENV_IS_IN_NAND
#else
#define CONFIG_FSL_QSPI
#define CONFIG_ENV_IS_IN_MMC
#endif#define CONFIG_SYS_MMC_ENV_DEV		1   /* USDHC2 */
#define CONFIG_SYS_MMC_ENV_PART		0	/* user area */
#define CONFIG_MMCROOT			"/dev/mmcblk1p2"  /* USDHC2 */#define CONFIG_CMD_BMODE#ifdef CONFIG_FSL_QSPI
#define CONFIG_QSPI_BASE		QSPI0_BASE_ADDR
#define CONFIG_QSPI_MEMMAP_BASE		QSPI0_AMBA_BASE#define CONFIG_CMD_SF
#define CONFIG_SPI_FLASH
#define CONFIG_SPI_FLASH_BAR
#define CONFIG_SF_DEFAULT_BUS		0
#define CONFIG_SF_DEFAULT_CS		0
#define CONFIG_SF_DEFAULT_SPEED	40000000
#define CONFIG_SF_DEFAULT_MODE		SPI_MODE_0
#define CONFIG_SPI_FLASH_STMICRO
#endif/* NAND stuff */
#ifdef CONFIG_SYS_USE_NAND
#define CONFIG_CMD_NAND
#define CONFIG_CMD_NAND_TRIMFFS#define CONFIG_NAND_MXS
#define CONFIG_SYS_MAX_NAND_DEVICE	1
#define CONFIG_SYS_NAND_BASE		0x40000000
#define CONFIG_SYS_NAND_5_ADDR_CYCLE
#define CONFIG_SYS_NAND_ONFI_DETECTION/* DMA stuff, needed for GPMI/MXS NAND support */
#define CONFIG_APBH_DMA
#define CONFIG_APBH_DMA_BURST
#define CONFIG_APBH_DMA_BURST8
#endif#define CONFIG_ENV_SIZE			SZ_8K
#if defined(CONFIG_ENV_IS_IN_MMC)
#define CONFIG_ENV_OFFSET		(12 * SZ_64K)
#elif defined(CONFIG_ENV_IS_IN_SPI_FLASH)
#define CONFIG_ENV_OFFSET		(768 * 1024)
#define CONFIG_ENV_SECT_SIZE		(64 * 1024)
#define CONFIG_ENV_SPI_BUS		CONFIG_SF_DEFAULT_BUS
#define CONFIG_ENV_SPI_CS		CONFIG_SF_DEFAULT_CS
#define CONFIG_ENV_SPI_MODE		CONFIG_SF_DEFAULT_MODE
#define CONFIG_ENV_SPI_MAX_HZ		CONFIG_SF_DEFAULT_SPEED
#elif defined(CONFIG_ENV_IS_IN_NAND)
#undef CONFIG_ENV_SIZE
#define CONFIG_ENV_OFFSET		(60 << 20)
#define CONFIG_ENV_SECT_SIZE		(128 << 10)
#define CONFIG_ENV_SIZE			CONFIG_ENV_SECT_SIZE
#endif/* USB Configs */
#define CONFIG_CMD_USB
#ifdef CONFIG_CMD_USB
#define CONFIG_USB_EHCI
#define CONFIG_USB_EHCI_MX6
#define CONFIG_USB_STORAGE
#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
#define CONFIG_USB_HOST_ETHER
#define CONFIG_USB_ETHER_ASIX
#define CONFIG_MXC_USB_PORTSC  (PORT_PTS_UTMI | PORT_PTS_PTW)
#define CONFIG_MXC_USB_FLAGS   0
#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
#endif#ifdef CONFIG_CMD_NET
#define CONFIG_CMD_PING
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_MII
#define CONFIG_FEC_MXC
#define CONFIG_MII
#define CONFIG_FEC_ENET_DEV		1#if (CONFIG_FEC_ENET_DEV == 0)
#define IMX_FEC_BASE			ENET_BASE_ADDR
#define CONFIG_FEC_MXC_PHYADDR          0x0
#define CONFIG_FEC_XCV_TYPE             RMII
#elif (CONFIG_FEC_ENET_DEV == 1)
#define IMX_FEC_BASE			ENET2_BASE_ADDR
#define CONFIG_FEC_MXC_PHYADDR		0x1
#define CONFIG_FEC_XCV_TYPE		RMII
#endif
#define CONFIG_ETHPRIME			"FEC"#define CONFIG_PHYLIB
#define CONFIG_PHY_SMSC
#endif#define CONFIG_IMX_THERMAL#ifndef CONFIG_SPL_BUILD
#define CONFIG_VIDEO
#ifdef CONFIG_VIDEO
#define CONFIG_CFB_CONSOLE
#define CONFIG_VIDEO_MXS
#define CONFIG_VIDEO_LOGO
#define CONFIG_VIDEO_SW_CURSOR
#define CONFIG_VGA_AS_SINGLE_DEVICE
#define CONFIG_SYS_CONSOLE_IS_IN_ENV
#define CONFIG_SPLASH_SCREEN
#define CONFIG_SPLASH_SCREEN_ALIGN
#define CONFIG_CMD_BMP
#define CONFIG_BMP_16BPP
#define CONFIG_VIDEO_BMP_RLE8
#define CONFIG_VIDEO_BMP_LOGO
#define CONFIG_IMX_VIDEO_SKIP
#endif
#endif#define CONFIG_FAT_WRITE /* 使能fatwrite命令 */#define CONFIG_IOMUX_LPSR#if defined(CONFIG_ANDROID_SUPPORT)
#include "mx6ullevk_android.h"
#endif#endif

这篇关于[I.MX6UL] U-Boot移植(三) 在 U-Boot 中添加自己的开发板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383484

相关文章

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.