From patchwork Tue Aug 17 03:31:41 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: coreboot kconfig Date: Tue, 17 Aug 2010 03:31:41 -0000 From: baiyin cai X-Patchwork-Id: 1758 Message-Id: To: coreboot hi all, Since the deadline of GSOC has passed, I would like to post my patch about coreboot kconfig. Thanks to Marc who help me lots of things. He told me lots of linux programming and coreboot building things. Also thanks to QingPei, who helps me a lot about the detailed things. Like the kconfig language learning, linux makefile rules etc. The patch which i send is trying to make coreboot kconfig building can load the payload configs and building payload like filo or coreinfo by one interface. The patch support two payload: Filo and coreinfo. If devs want to use coreboot as before, it's fine, the patch support the old method by use "make config/menuconfig/xconfig etc" and "make". Anyone who want to try the new feature can use "make config/menuconfig/xconfig PAYLOAD=filo/coreinfo" to config the coreboot+payload at one time. then use "make" to build the whole things. I know there may have any improper methods. But the method used is the way i can find. Any new method will be welcome. I will keep following these things, even GSOC is end. More consideration will be posted to the coreboot blogs later. Signed-off-by: Cai Bai Yin < caibaiyin.pku@gmail.com> Index: src/Kconfig =================================================================== --- src/Kconfig (revision 5685) +++ src/Kconfig (working copy) @@ -18,7 +18,14 @@ ## mainmenu "Coreboot Configuration" +config PRE_PAYLOAD + bool + default n +config COMPRESSED_PAYLOAD_NRV2B + bool + default n + menu "General setup" config EXPERT @@ -346,7 +353,7 @@ endmenu menu "Payload" - +depends on !PRE_PAYLOAD choice prompt "Add a payload" default PAYLOAD_NONE @@ -389,9 +396,6 @@ In order to reduce the size payloads take up in the ROM chip coreboot can compress them using the LZMA algorithm. -config COMPRESSED_PAYLOAD_NRV2B - bool - default n endmenu Index: util/kconfig/Makefile =================================================================== --- util/kconfig/Makefile (revision 5685) +++ util/kconfig/Makefile (working copy) @@ -13,22 +13,150 @@ Kconfig := src/Kconfig xconfig: $(objk)/qconf +ifeq ($(PAYLOAD),filo) + $(Q)make -C $(FILO_DIR) xconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) $(objk)/qconf $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=filo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=\"$(FILO_DIR)/build/filo.elf\"" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else +ifeq ($(PAYLOAD),coreinfo) + $(Q)make -C $(COREINFO_DIR) xconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) + $(objk)/qconf $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=filo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=\"$(COREINFO_DIR)/build/filo.elf\"" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default y/default n/}' $(Kconfig) + $(objk)/qconf $(Kconfig) +endif +endif gconfig: $(objk)/gconf +ifeq ($(PAYLOAD),filo) + $(Q)make -C $(FILO_DIR) gconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) $(objk)/gconf $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=filo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=\"$(FILO_DIR)/build/filo.elf\"" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else +ifeq ($(PAYLOAD),coreinfo) + $(Q)make -C $(COREINFO_DIR) gconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) + $(objk)/gconf $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=coreinfo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=\"$(COREINFO_DIR)/build/filo.elf\"" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default y/default n/}' $(Kconfig) + $(objk)/gconf $(Kconfig) +endif +endif menuconfig: $(objk)/mconf +ifeq ($(PAYLOAD),filo) + $(Q)make -C $(FILO_DIR) menuconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) $(objk)/mconf $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=filo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=\"$(FILO_DIR)/build/filo.elf\"" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else +ifeq ($(PAYLOAD),coreinfo) + $(Q)make -C $(COREINFO_DIR) menuconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) + $(objk)/mconf $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=coreinfo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=$(COREINFO_DIR)/build/coreinfo.elf" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default y/default n/}' $(Kconfig) + $(objk)/mconf $(Kconfig) +endif +endif + + config: $(objk)/conf +ifeq ($(PAYLOAD),filo) + $(Q)make -C $(FILO_DIR) config + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) $(objk)/conf $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=filo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=\"$(FILO_DIR)/build/filo.elf\"" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else +ifeq ($(PAYLOAD),coreinfo) + $(Q)make -C $(COREINFO_DIR) config + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) + $(objk)/conf $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=coreinfo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=$(COREINFO_DIR)/build/coreinfo.elf" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default y/default n/}' $(Kconfig) + $(objk)/conf $(Kconfig) +endif +endif oldconfig: $(objk)/conf +ifeq ($(PAYLOAD),filo) + $(Q)make -C $(FILO_DIR) oldconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) $(objk)/conf -o $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=filo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=\"$(FILO_DIR)/build/filo.elf\"" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else +ifeq ($(PAYLOAD),coreinfo) + $(Q)make -C $(COREINFO_DIR) oldconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) + $(objk)/conf -o $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=coreinfo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=$(COREINFO_DIR)/build/coreinfo.elf" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default y/default n/}' $(Kconfig) + $(objk)/conf -o $(Kconfig) +endif +endif silentoldconfig: $(objk)/conf +ifeq ($(PAYLOAD),filo) + $(Q)make -C $(FILO_DIR) silentoldconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) $(objk)/conf -s $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=filo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=\"$(FILO_DIR)/build/filo.elf\"" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else +ifeq ($(PAYLOAD),coreinfo) + $(Q)make -C $(COREINFO_DIR) silentoldconfig + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default n/default y/}' $(Kconfig) + $(objk)/conf -s $(Kconfig) + $(Q)echo "CONFIG_PAYLOAD=coreinfo" >> .config + $(Q)echo "CONFIG_PAYLOAD_ELF=y" >> .config + $(Q)echo "CONFIG_FALLBACK_PAYLOAD_FILE=$(COREINFO_DIR)/build/coreinfo.elf" >> .config + $(Q)echo "CONFIG_COMPRESSED_PAYLOAD_LZMA=y" >> .config +else + $(Q)sed -i '/config PRE_PAYLOAD/{n;n;s/default y/default n/}' $(Kconfig) + $(objk)/conf -s $(Kconfig) +endif +endif # --- UNUSED, ignore ---------------------------------------------------------- # Create new linux.pot file Index: Makefile =================================================================== --- Makefile (revision 5685) +++ Makefile (working copy) @@ -38,12 +38,14 @@ export obj ?= build export objutil ?= $(obj)/util export objk := $(objutil)/kconfig - - export KERNELVERSION := 4.0 export KCONFIG_AUTOHEADER := $(obj)/config.h export KCONFIG_AUTOCONFIG := $(obj)/auto.conf +export PAYLOAD ?= + +export FILO_DIR = $(top)/payloads/filo +export COREINFO_DIR = $(top)/payloads/coreinfo CONFIG_SHELL := sh KBUILD_DEFCONFIG := configs/defconfig UNAME_RELEASE := $(shell uname -r) @@ -304,7 +306,7 @@ CBFS_PAYLOAD_COMPRESS_NAME:=LZMA endif -coreboot: $(obj)/coreboot.rom +coreboot: payload $(obj)/coreboot.rom endif @@ -361,6 +363,16 @@ update: dongle.py -c /dev/term/1 $(obj)/coreboot.rom EOF +payload: +ifeq ($(CONFIG_PAYLOAD),filo) + make -C $(top)/payloads/filo +else +ifeq ($(CONFIG_PAYLOAD),coreinfo) + make -C $(top)/payloads/coreinfo +else + printf "No buildin payload\n" +endif +endif # This include must come _before_ the pattern rules below! # Order _does_ matter for pattern rules. include util/kconfig/Makefile