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
复制代码
设置 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 启动的时候可以输出板子信息。
 
第 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 的速度为多少。

 
 

第 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_SYS_MMC_ENV_PART 为模式分区,默认为第 0 个分区。
 
 

宏 CONFIG_MMCROOT 设置进入 linux 系统的根文件系统所在的分区,这里设置为"/dev/mmcblk1p2",也就是 EMMC 设备的第 2 个分区。

第 0 个分区保存 uboot,第 1 个分区保存 linux 镜像和设备树,第 2 个分区为 Linux 系统的根文件系统。

 
与 NAND 有关的宏定义,如果使用 NAND 的话。
 
宏 CONFIG_ENV_SIZE 为环境变量大小,默认为 8KB。
 
 

宏 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。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @   眉间  阅读(211)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示