i.mx6ull移植uboot(mx6ull_alientek_emmc.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 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




第 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 的速度为多少。



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

通过条件编译来设置宏 CONFIG_EXTRA_ENV_SETTINGS , 宏CONFIG_EXTRA_ENV_SETTINGS 也是设置一些环境变量,此宏会设置 bootargs 这个环境变量

设置宏 CONFIG_BOOTCOMMAND,此宏就是设置环境变量 bootcmd 的值。

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

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

宏 CONFIG_SYS_HZ 为系统时钟频率,这里为 1000Hz。
宏 CONFIG_STACKSIZE 为栈大小,这里为 128KB。
宏 CONFIG_NR_DRAM_BANKS 为 DRAM BANK 的数量,I.MX6ULL 只有一个 DRAM BANK,我们也只用到了一个 BANK,所以为 1。
宏 PHYS_SDRAM 为 I.MX6ULL 的 DRAM 控制器 MMDC0 所管辖的 DRAM 范围起始地址,也就是 0X80000000。
宏 CONFIG_SYS_SDRAM_BASE 为 DRAM 的起始地址。

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

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

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

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

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



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

与 USB 相关的宏定义。

与网络相关的宏定义,比如使能 dhcp、ping 等命令。
宏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 接口。

剩下的都是一些配置宏,
比如 CONFIG_VIDEO 宏用于开启 LCD,CONFIG_VIDEO_LOGO 使能 LOGO 显示,
CONFIG_CMD_BMP 使能 BMP 图片显示指令。这样就可以在 uboot 中显示图片了,一般用于显示 logo。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?