Patchwork coreboot kconfig

login
register
about
Submitter baiyin cai
Date 2010-08-17 03:31:41
Message ID <AANLkTikV=3usESCxbNQwy=3TOZWcHJS9ruoevW02QD3h@mail.gmail.com>
Download mbox | patch
Permalink /patch/1758/
State Rejected
Headers show

Comments

baiyin cai - 2010-08-17 03:31:41
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>

Patch

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