一. 简介
mx6ull_alientek_nand.h文件是 开发板的 uboot的一个配置文件。每个开发板都有一个 .h的配置文件。
mx6ull_alientek_nand.h文件其实是 之前针对正点原子ALPHA开发板移植的 Uboot配置文件。
本文简单分析一下 针对正点原子ALPHA开发板的 配置文件: mx6ull_alientek_nand.h。
二. mx6ull_alientek_nand.h文件详解
mx6ull_alientek_nand.h文件所在目录:uboot根目录下的 /include/configs
下面简单分析 mx6ull_alientek_nand.h文件内容。
1. mx6ull_alientek_nand.h文件调用的头文件
mx6ull_alientek_nand.h文件调用的头文件如下:
#include <asm/arch/imx-regs.h>
#include <linux/sizes.h>
#include "mx6_common.h"
#include <asm/imx-common/gpio.h>
这里调用了 mx6_common.h 头文件,应该是 IMX6系列通用的头文件。如果在 mx6ull_alientek_emmc.h
中没有发现配置
某个功能或命令,但是实际却存在的话,可以到
mx6_common.h
文件里面去找一下。
2. 开发板的 DDR容量(即DRAM容量)
下面一个重要的代码是 设置 DDR容量,如下:
#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_256M
#define CONFIG_BOOTARGS_CMA_SIZE ""
/* DCDC used on 14x14 EVK, no PMIC */
#undef CONFIG_LDO_BYPASS_CHECK
#endif
这里的 ALPHA开发板所使用的 IMX6ULL芯片,不是 9x9封装的,所以,就执行了else的代码: 正点原子ALPHA开发板 的 DDR容量是 256MB。
3. 显示CPU信息,开发板信息,malloc 内存池大小
代码如下:
#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
宏
CONFIG_DISPLAY_CPUINFO
,
uboot
启动的时候可以输出
CPU
信息。
宏
CONFIG_DISPLAY_BOARDINFO
,
uboot
启动的时候可以输出板子信息。
宏
CONFIG_SYS_MALLOC_LEN
为
malloc
内存池大小,这里设置为
16MB
。
宏
CONFIG_BOARD_EARLY_INIT_F
,这样
board_init_f
函数就会调用
board_early_init_f
函数。
宏
CONFIG_BOARD_LATE_INIT
,这样
board_init_r
函数就会调用
board_late_init
函数。
4. 串口地址,USB地址。
#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
第1~2行,使能
I.MX6ULL
的串口功能,宏
CONFIG_MXC_UART_BASE
表示串口寄
存器基地址,这里使用的串口
1
,基地址为
UART1_BASE
第5~6行,EMMC
接在
I.MX6ULL
的
USDHC2
上,宏
CONFIG_SYS_FSL_ESDHC_ADDR
为
EMMC
所使用接口的寄存器基地址,也就是
USDHC2
的基地址。
第
9~12
行,跟
NAND
相关的宏,因为
NAND
和
USDHC2
的引脚冲突,因此如果使用
NAND
的只能使用一个
USDHC
设备
(SD
卡
)
。
如果没有使用
NAND
,那么就有两个
USDHC
设
备
(EMMC
和
SD
卡
),CONFIG_SYS_FSL_USDHC_NUM宏 表示
USDHC
数量。
这里使用的 NAND,所以,只能使用一个 USDHC设备。
第
16~23行
,和
I2C
有关的宏定义,用于控制使能哪个
I2C
,
I2C
的速度为多少。
5. NAND 的分区设置
#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
如果使用
NAND
的话,默认的
NAND
分区为:
"mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) "
,
如下图所示:
注意:NAND 的分区是可以调整的,比如 boot 分区我们用不了 64M 这么大,因此可以将其改小, 其他的分区一样的。
6. MFG工具涉及的环境变量
#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" \
宏
CONFIG_MFG_ENV_SETTINGS
定义了一些环境变量,MFG工具是恩智浦公司的烧录软件,使用
MfgTool
工具烧写系统时会用到这里面的环境变量。