天天看点

关于 U-BOOT 中 SPL 的移植——基本配置

本文将介绍通过 SPL 从 NAND 加载 U-BOOT,需要做的基本配置。只介绍 SPL 的配置,其他暂不涉及。本文的前提是 U-BOOT 已经移植完,可以从 NOR 启动。这方面的文章网上有很多,读者可以自己查找。

1、在 /configs/xxxxxx_defconfig 文件中

加入

CONFIG_SPL = y

用于从全局上开启 SPL 功能。

2、在 /include/configs/xxxxxx.h 文件中

添加

#define CONFIG_SPL_TEXT_BASE 0x0000

#define CONFIG_SPL_MAX_SIZE 0x1000

#define CONFIG_SPL_STACK 0x1000

#define CONFIG_SPL_FRAMEWORK

#define CONFIG_SPL_LIBGENERIC_SUPPORT

#define CONFIG_SPL_NAND_BOOT

#define CONFIG_SPL_NAND_SUPPORT

#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x20000

对配置项进行简单说明

CONFIG_SPL_TEXT_BASE 用于配置 SPL 的代码段的基地址

CONFIG_SPL_MAX_SIZE    用于配置 SPL 的最大长度

CONFIG_SPL_STACK          用于配置 SPL 的栈起始地址

笔者使用的是三星 S3C2440 的开发板,选择 NAND 启动, S3C2440 的内部 SRAM 会被映射到 0x0000 的地址空间,所以 CONFIG_SPL_TEXT_BASE 为 0x0000。S3C2440 的内部 SRAM 大小为 4K ,所以 CONFIG_SPL_MAX_SIZE 为 0x10000 。将 SPL 的栈空间设置在 SRAM 的顶部,所以 CONFIG_SPL_STACK 为 0x1000 。

CONFIG_SPL_FRAMEWORK  用于支持 /common/ 目录下的内容,包含对 MMC NAND 和 YMODEM 等的支持。 

CONFIG_SPL_LIBGENERIC_SUPPORT 用于支持 /lib/ 目录下的内容,SPL 会使用到 /lib/ 目录中的 memset  hang 等函数。

下面的三个配置项与系统的启动介质有关系,笔者使用的是 NAND 启动,所以要配置这三个选项,如果要支持 MMC 或者 SD 卡等,就需要配置其他项。

编译,报错,有些函数找不到定义,后面的博文中将继续介绍。