• uboot移植之mx6ull_alientek_nand.h文件详解


    一.  简介

    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文件调用的头文件如下:

    1. #include
    2. #include
    3. #include "mx6_common.h"
    4. #include
    这里调用了 mx6_common.h 头文件,应该是 IMX6系列通用的头文件。如果在 mx6ull_alientek_emmc.h 中没有发现配置 某个功能或命令,但是实际却存在的话,可以到 mx6_common.h 文件里面去找一下。

    2. 开发板的 DDR容量(即DRAM容量)

    下面一个重要的代码是 设置 DDR容量,如下:

    1. #ifdef CONFIG_TARGET_MX6ULL_9X9_EVK
    2. #define PHYS_SDRAM_SIZE SZ_256M
    3. #define CONFIG_BOOTARGS_CMA_SIZE "cma=96M "
    4. #else
    5. #define PHYS_SDRAM_SIZE SZ_256M
    6. #define CONFIG_BOOTARGS_CMA_SIZE ""
    7. /* DCDC used on 14x14 EVK, no PMIC */
    8. #undef CONFIG_LDO_BYPASS_CHECK
    9. #endif

    这里的 ALPHA开发板所使用的 IMX6ULL芯片,不是 9x9封装的,所以,就执行了else的代码: 正点原子ALPHA开发板 的 DDR容量是 256MB。

    3. 显示CPU信息,开发板信息,malloc 内存池大小

    代码如下:

    1. #define CONFIG_DISPLAY_CPUINFO
    2. #define CONFIG_DISPLAY_BOARDINFO
    3. /* Size of malloc() pool */
    4. #define CONFIG_SYS_MALLOC_LEN (16 * SZ_1M)
    5. #define CONFIG_BOARD_EARLY_INIT_F
    6. #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地址。
    1. #define CONFIG_MXC_UART
    2. #define CONFIG_MXC_UART_BASE UART1_BASE
    3. /* MMC Configs */
    4. #ifdef CONFIG_FSL_USDHC
    5. #define CONFIG_SYS_FSL_ESDHC_ADDR USDHC2_BASE_ADDR
    6. /* NAND pin conflicts with usdhc2 */
    7. #ifdef CONFIG_SYS_USE_NAND
    8. #define CONFIG_SYS_FSL_USDHC_NUM 1
    9. #else
    10. #define CONFIG_SYS_FSL_USDHC_NUM 2
    11. #endif
    12. #endif
    13. /* I2C configs */
    14. #define CONFIG_CMD_I2C
    15. #ifdef CONFIG_CMD_I2C
    16. #define CONFIG_SYS_I2C
    17. #define CONFIG_SYS_I2C_MXC
    18. #define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
    19. #define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
    20. #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 的分区设置
    1. #ifdef CONFIG_SYS_BOOT_NAND
    2. #define CONFIG_MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) "
    3. #else
    4. #define CONFIG_MFG_NAND_PARTITION ""
    5. #endif
    如果使用 NAND 的话,默认的 NAND 分区为:
    "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) "

    如下图所示:

    注意:NAND 的分区是可以调整的,比如 boot 分区我们用不了 64M 这么大,因此可以将其改小, 其他的分区一样的。

    6.  MFG工具涉及的环境变量
    1. #define CONFIG_MFG_ENV_SETTINGS \
    2. "mfgtool_args=setenv bootargs console=${console},${baudrate} " \
    3. CONFIG_BOOTARGS_CMA_SIZE \
    4. "rdinit=/linuxrc " \
    5. "g_mass_storage.stall=0 g_mass_storage.removable=1 " \
    6. "g_mass_storage.file=/fat g_mass_storage.ro=1 " \
    7. "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\
    8. "g_mass_storage.iSerialNumber=\"\" "\
    9. CONFIG_MFG_NAND_PARTITION \
    10. "clk_ignore_unused "\
    11. "\0" \
    12. "initrd_addr=0x83800000\0" \
    13. "initrd_high=0xffffffff\0" \
    14. "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \
    CONFIG_MFG_ENV_SETTINGS 定义了一些环境变量,MFG工具是恩智浦公司的烧录软件,使用 MfgTool 工具烧写系统时会用到这里面的环境变量。

  • 相关阅读:
    数据库及分类详细介绍
    光说不练假把式,一起Kafka业务实战。
    自媒体短视频运营常见的5个问题及解决方案
    什么是DNS缓存?DNS缓存有哪些作用?
    Python基础-3-列表
    做外贸用以下邮箱比较好
    大数据接私活200元,做个简易的HDFS浏览器(一)
    C++ thread库
    Java基础-继承性
    单个人工神经元模型示意图,人体神经元模型制作
  • 原文地址:https://blog.csdn.net/wojiaxiaohuang2014/article/details/133968128