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 < [email protected]>
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
--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot