蜗窝科技

u-boot中CONFIG_SUPPORT_SPL、CONFIG_SPL和CONFIG_SPL_BUILD的作用

蜗窝讨论区存档 · Linux kernel技术问答 · 楼主 wowo · 2016-06-08 · 1 帖

本文是原「蜗窝讨论区」的历史存档(2016-06-08),来自版块「Linux kernel技术问答」,共 1 帖。讨论区已停止服务,此处仅供查阅。

wowo · 2016-06-08 21:42

QQ群上bruno同学提出了如下的问题:

** 写道:**

请问 uboot在编译的时候是不是用 config_spl_build 来区分 spl 和 uboot的啊?

看到有 config_spl ,是不是这个是用来开启spl功能, 而config_spl_build 用来编译过程控制,看了几个板子的config文件,都只有 config_spl=y ,那 config_spl_build是如何控制编译的啊?

想起在写“(/u-boot/boot_flow_1.html)”的时候,自己也有疑问,但是没有深究。多谢bruno提出来,又去看了下代码,记录如下: u-boot关于SPL有三个配置项,CONFIG_SUPPORT_SPL、CONFIG_SPL和CONFIG_SPL_BUILD,其中CONFIG_SUPPORT_SPL和CONFIG_SPL在Kconfig中定义,如下:


[== Undefined ==]
config SUPPORT_SPL
        bool

config SUPPORT_TPL bool

config SPL bool depends on SUPPORT_SPL prompt "Enable SPL" help If you want to build SPL as well as the normal image, say Y.

CONFIG_SUPPORT_SPL表示是否支持SPL功能,一般是在具体arch的Kconfig的版型菜单中,根据需要select,例如(可参考“(https://github.com/wowotechX/u-boot/blob/x_integration/arch/arm/Kconfig)”):


[== Undefined ==]
config TARGET_BUBBLEGUM
    bool "Support Bubblegum 96Board"
    select ARM64
    select SUPPORT_SPL
    select SPL
      help
      Support for Bubblegum 96boards platform based on Actions S900 Soc,
      with 4xA53 CPU, PowerVR G6230 GPU, 2GB RAM, and USB 3.0 support.

某个版型支持SPL了,并不代表使能了SPL,因此通过额外的CONFIG_SPL来决定是否使能 SPL,根据上面Kconfig的定义,只有在CONFIG_SPL是依赖CONFIG_SUPPORT_SPL的,因此只有select了SUPPORT_SPL,CONFIG_SPL的菜单项才会在menuconfig中看到。当然,我们也可以粗暴的直接select SPL,就像上面bubblegum一样。

最后,再看CONFIG_SPL_BUILD,它是在(https://github.com/wowotechX/u-boot/blob/x_integration/scripts/Makefile.spl)中以编译选项的形式定义的,如下:


[== Undefined ==]
KBUILD_CPPFLAGS += -DCONFIG_SPL_BUILD

有什么目的?因为u-boot中,无论是defconfig,还是include/configs/*.h中的配置项,是不区分u-boot和SPL的,因此SPL的编译控制选项无法用这种方法给出。而u-boot和SPL是分两次编译的,也就是说,二者的编译选项不同,因此,使用编译选项的方法,就可以区隔u-boot和SPL的代码了。