[coreboot-gerrit] Change in ...coreboot[master]: LinuxBoot: refactor u-root.mk

Philipp Deppenwiese (Code Review) gerrit at coreboot.org
Wed Nov 28 19:32:44 CET 2018


Philipp Deppenwiese has submitted this change and it was merged. ( https://review.coreboot.org/c/coreboot/+/29778 )

Change subject: LinuxBoot: refactor u-root.mk
......................................................................

LinuxBoot: refactor u-root.mk

Clean the u-root initramfs integration and add essential flags as options.
Now u-root automatically fetch updates and rebuilts itself to apply changes.

Change-Id: Id978ed2ebeff96c5be4f74ae07df9be76e106a1b
Signed-off-by: Marcello Sylvester Bauer <info at marcellobauer.com>
Reviewed-on: https://review.coreboot.org/c/29778
Tested-by: build bot (Jenkins) <no-reply at coreboot.org>
Reviewed-by: Philipp Deppenwiese <zaolin.daisuki at gmail.com>
---
M payloads/external/LinuxBoot/Kconfig
M payloads/external/LinuxBoot/Makefile
M payloads/external/LinuxBoot/targets/linux.mk
M payloads/external/LinuxBoot/targets/u-root.mk
M payloads/external/Makefile.inc
5 files changed, 130 insertions(+), 72 deletions(-)

Approvals:
  build bot (Jenkins): Verified
  Philipp Deppenwiese: Looks good to me, approved



diff --git a/payloads/external/LinuxBoot/Kconfig b/payloads/external/LinuxBoot/Kconfig
index 046faef..3b8b70c 100644
--- a/payloads/external/LinuxBoot/Kconfig
+++ b/payloads/external/LinuxBoot/Kconfig
@@ -127,6 +127,7 @@
 	help
 	  Enable u-root linuxboot mode.
 	  See http://u-root.tk/ for more information.
+
 endchoice
 
 if LINUXBOOT_UROOT
@@ -135,37 +136,109 @@
 	prompt "U-root version"
 	default LINUXBOOT_UROOT_MASTER
 
+config LINUXBOOT_UROOT_CUSTOM
+	bool "custom"
+	help
+	  choose a custom u-root branch
+
 config LINUXBOOT_UROOT_MASTER
 	bool "master"
 	help
 	  Latest u-root version
+
+config LINUXBOOT_UROOT_V3_0_0
+	bool "v3.0.0"
+
+config LINUXBOOT_UROOT_V2_0_0
+	bool "v2.0.0"
+
+config LINUXBOOT_UROOT_V1_0_0
+	bool "v1.0.0"
+
 endchoice
 
+config LINUXBOOT_UROOT_CHECKOUT
+	string "U-root custom branch"
+	depends on LINUXBOOT_UROOT_CUSTOM
+
 config LINUXBOOT_UROOT_VERSION
 	string
+	default LINUXBOOT_UROOT_CHECKOUT if LINUXBOOT_UROOT_CUSTOM
 	default "master" if LINUXBOOT_UROOT_MASTER
+	default "v3.0.0" if LINUXBOOT_UROOT_V3_0_0
+	default "v2.0.0" if LINUXBOOT_UROOT_V2_0_0
+	default "v1.0.0" if LINUXBOOT_UROOT_V1_0_0
 
-config LINUXBOOT_UROOT_COMMANDS
-	string "Select u-root commands"
-	default ""
+choice
+	prompt "Build format"
+	default LINUXBOOT_UROOT_BB
 	help
-	  List of additional modules to include, separated by space. Otherwise
-	  all modules of u-root are included.
+	  u-root build format (e.g. bb or source). (default "bb")
+
+config LINUXBOOT_UROOT_BB
+	bool "bb"
+
+config LINUXBOOT_UROOT_SOURCE
+	bool "source (experimental)"
+
+endchoice
+
+config LINUXBOOT_UROOT_FORMAT
+	string
+	default "bb" if LINUXBOOT_UROOT_BB
+	default "source" if LINUXBOOT_UROOT_SOURCE
 
 config LINUXBOOT_UROOT_FILES
 	string "Add files to u-root base"
-	default ""
 	help
-	  Path to directory containing root structure for embedding into the
-	  initramfs.
+	  Additional files, directories, and binaries (with their ldd dependencies) to add to archive.
+	  Can be speficified multiple times.
+
+config LINUXBOOT_UROOT_INITCMD
+	string "Init target"
+	default "init"
+	help
+	  Symlink target for /init.
+	  Can be an absolute path or a u-root command name. (default "init")
+
+config LINUXBOOT_UROOT_SHELL
+	string "default shell"
+	default "elvish"
+	help
+	  Default shell.
+	  Can be an absolute path or a u-root command name. (default "elvish")
+
+config LINUXBOOT_UROOT_COMMANDS
+	string "U-root commands"
+	default "coreboot-app"
+	help
+	  List of additional modules to include,
+	  separated by space. (default "coreboot-app")
 
 endif #LINUXBOOT_UROOT
 
 endif #LINUXBOOT_BUILD_INITRAMFS
 
+choice LINUXBOOT_INITRAMFS_COMPRESSION
+	prompt "Initramfs compression format"
+	default LINUXBOOT_INITRAMFS_COMPRESSION_XZ
+
+config LINUXBOOT_INITRAMFS_COMPRESSION_NONE
+	bool "none"
+
+config LINUXBOOT_INITRAMFS_COMPRESSION_XZ
+	bool "xz compression"
+
+endchoice
+
 config LINUX_INITRD
 	string
-	default "payloads/external/LinuxBoot/linuxboot/initramfs_u-root.cpio.xz" if LINUXBOOT_UROOT
+	default "payloads/external/LinuxBoot/linuxboot/initramfs_u-root.cpio" if LINUXBOOT_UROOT
 	default LINUXBOOT_INITRAMFS_PATH if !LINUXBOOT_BUILD_INITRAMFS
 
+config LINUXBOOT_INITRAMFS_SUFFIX
+	string
+	default "" if LINUXBOOT_INITRAMFS_COMPRESSION_NONE
+	default ".xz" if LINUXBOOT_INITRAMFS_COMPRESSION_XZ
+
 endif #PAYLOAD_LINUXBOOT
diff --git a/payloads/external/LinuxBoot/Makefile b/payloads/external/LinuxBoot/Makefile
index a9b35fc..8016095 100644
--- a/payloads/external/LinuxBoot/Makefile
+++ b/payloads/external/LinuxBoot/Makefile
@@ -17,7 +17,6 @@
 kernel_dir=$(project_dir)/kernel
 
 unexport $(COREBOOT_EXPORTS)
-unexport MAKEFLAGS
 
 all: linuxboot
 
@@ -38,6 +37,11 @@
 endif
 endif
 
+initramfs_compressed: initramfs
+ifeq ($(CONFIG_LINUXBOOT_INITRAMFS_COMPRESSION_XZ),y)
+	xz --keep --force --lzma2=dict=1MiB $(top)/$(CONFIG_LINUXBOOT_INITRAMFS)
+endif
+
 ifeq ($(CONFIG_LINUXBOOT_COMPILE_KERNEL),y)
 ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64)
 kernel: initramfs
@@ -54,13 +58,14 @@
 	fi
 endif
 
-linuxboot: kernel initramfs
+linuxboot: kernel initramfs_compressed
 
 clean:
 	if [ -d "$(kernel_dir)" ]; then rm -rf $(kernel_dir); fi
-	rm -f $(project_dir)/initramfs.cpio.xz
+	rm -f $(project_dir)/u-root
+	rm -f $(project_dir)/initramfs*
 
 distclean:
 	rm -rf $(project_dir)
 
-.PHONY: linuxboot kernel initramfs u-root clean distclean
+.PHONY: linuxboot kernel initramfs_compressed initramfs u-root clean distclean
diff --git a/payloads/external/LinuxBoot/targets/linux.mk b/payloads/external/LinuxBoot/targets/linux.mk
index 07700b8..91118d4 100644
--- a/payloads/external/LinuxBoot/targets/linux.mk
+++ b/payloads/external/LinuxBoot/targets/linux.mk
@@ -82,7 +82,7 @@
 
 $(project_dir)/uImage: $(project_dir)/vmlinux.bin.lzma $(project_dir)/../arm64/kernel_fdt_lzma.its $(project_dir)/target.dtb
 	cp $(project_dir)/../arm64/kernel_fdt_lzma.its $(project_dir)
-	cp $(PWD)/$(CONFIG_LINUXBOOT_INITRAMFS) $(project_dir)/u-initramfs
+	cp $(PWD)/$(CONFIG_LINUXBOOT_INITRAMFS)$(CONFIG_LINUXBOOT_INITRAMFS_SUFFIX) $(project_dir)/u-initramfs
 	mkimage -f $(project_dir)/kernel_fdt_lzma.its $@
 endif
 
diff --git a/payloads/external/LinuxBoot/targets/u-root.mk b/payloads/external/LinuxBoot/targets/u-root.mk
index 5cb19bb..86c9019 100644
--- a/payloads/external/LinuxBoot/targets/u-root.mk
+++ b/payloads/external/LinuxBoot/targets/u-root.mk
@@ -13,19 +13,27 @@
 ## GNU General Public License for more details.
 ##
 
-uroot_git_repo=https://github.com/u-root/u-root.git
-uroot_dir=$(project_dir)/go/src/github.com/u-root/u-root
+project_dir=$(shell pwd)/linuxboot
+go_path_dir=$(project_dir)/go
+uroot_bin=$(project_dir)/u-root
+uroot_package=github.com/u-root/u-root
+
 go_version=$(shell go version | sed -nr 's/.*go([0-9]+\.[0-9]+.?[0-9]?).*/\1/p' )
 go_version_major=$(shell echo $(go_version) |  sed -nr 's/^([0-9]+)\.([0-9]+)\.?([0-9]*)$$/\1/p')
 go_version_minor=$(shell echo $(go_version) |  sed -nr 's/^([0-9]+)\.([0-9]+)\.?([0-9]*)$$/\2/p')
 
-project_dir=$(shell pwd)/linuxboot
-project_name=u-root
-go_path_dir=$(shell pwd)/linuxboot/go
+uroot_args+=-build=$(CONFIG_LINUXBOOT_UROOT_FORMAT)
+uroot_args+=-initcmd $(CONFIG_LINUXBOOT_UROOT_INITCMD)
+uroot_args+=-defaultsh $(CONFIG_LINUXBOOT_UROOT_SHELL)
+ifneq (CONFIG_LINUXBOOT_UROOT_FILES,)
+uroot_args+=$(foreach file,$(CONFIG_LINUXBOOT_UROOT_FILES),-files $(PWD)/$(file))
+endif
+
+uroot_cmds=$(CONFIG_LINUXBOOT_UROOT_COMMANDS)
 
 all: u-root
 
-check:
+version:
 ifeq ("$(go_version)","")
 	printf "\n<<Please install Golang >= 1.9 for u-root mode>>\n\n"
 	exit 1
@@ -37,59 +45,26 @@
 	exit 1
 endif
 endif
-	mkdir -p $(project_dir)/go/src/github.com/u-root
 
-$(uroot_dir)/.git:
-	echo "    Git        Cloning u-root $(CONFIG_LINUXBOOT_UROOT_VERSION)"
-	git clone $(uroot_git_repo) $(uroot_dir)
-
-fetch: check $(uroot_dir)/.git
-	-cd "$(uroot_dir)" && git fetch origin
-
-checkout: fetch
-	cd "$(uroot_dir)" && \
-	if ! git diff --quiet _cb_checkout "$(CONFIG_LINUXBOOT_UROOT_VERSION)" -- 2>/dev/null; \
-	then \
-		printf "    CHECKOUT    $(project_name) [$(CONFIG_LINUXBOOT_UROOT_VERSION)]\n"; \
-		git checkout $$(git rev-parse HEAD) >/dev/null 2>&1; \
-		git branch -f _cb_checkout "$(CONFIG_LINUXBOOT_UROOT_VERSION)" && \
-		git checkout _cb_checkout && \
-		$(if $(project_patches), \
-		for patch in $(project_patches); do \
-			printf "    PATCH       $$patch\n"; \
-			git am --keep-cr "$$patch" || \
-				( printf "Error when applying patches.\n"; \
-				  git am --abort; exit 1; ); \
-		done;,true;) \
+get: version
+	if [ -d "$(go_path_dir)/src/$(uroot_package)" ]; then \
+	git -C $(go_path_dir)/src/$(uroot_package) checkout --quiet master; \
+	GOPATH=$(go_path_dir) go get -d -u -v $(uroot_package) || \
+	echo -e "\n<<u-root package update failed>>\n"; \
+	else \
+	GOPATH=$(go_path_dir) go get -d -u -v $(uroot_package) || \
+	(echo -e "\n<<failed to get u-root package. Please check your internet access>>\n" && \
+	exit 1); \
 	fi
 
-$(uroot_dir)/u-root: $(uroot_dir)/u-root.go
-	echo "    GO        u-root"
-	cd $(uroot_dir); GOPATH=$(go_path_dir) go build u-root.go
+checkout: get
+	git -C $(go_path_dir)/src/$(uroot_package) checkout --quiet $(CONFIG_LINUXBOOT_UROOT_VERSION)
 
-$(project_dir)/initramfs_u-root.cpio.xz: checkout $(uroot_dir)/u-root
-	echo "    MAKE       u-root $(CONFIG_LINUXBOOT_UROOT_VERSION)"
-ifneq ($(CONFIG_LINUXBOOT_UROOT_COMMANDS),)
-ifneq ($(CONFIG_LINUXBOOT_UROOT_FILES),)
-	cd $(uroot_dir); GOARCH=$(CONFIG_LINUXBOOT_ARCH) GOPATH=$(go_path_dir) ./u-root \
-	-build=bb -files $(CONFIG_LINUXBOOT_UROOT_FILES) -o $(project_dir)/initramfs_u-root.cpio \
-	$(patsubst %,cmds/%,$(CONFIG_LINUXBOOT_UROOT_COMMANDS))
-else
-	cd $(uroot_dir); GOARCH=$(CONFIG_LINUXBOOT_ARCH) GOPATH=$(go_path_dir) ./u-root \
-	-build=bb -o $(project_dir)/initramfs_u-root.cpio \
-	$(patsubst %,cmds/%,$(CONFIG_LINUXBOOT_UROOT_COMMANDS))
-endif
-else
-ifneq ($(CONFIG_LINUXBOOT_UROOT_FILES),)
-	cd $(uroot_dir); GOARCH=$(CONFIG_LINUXBOOT_ARCH) GOPATH=$(go_path_dir) ./u-root \
-	-build=bb -files $(CONFIG_LINUXBOOT_UROOT_FILES) -o $(project_dir)/initramfs_u-root.cpio coreboot-app
-else
-	cd $(uroot_dir); GOARCH=$(CONFIG_LINUXBOOT_ARCH) GOPATH=$(go_path_dir) ./u-root \
-	-build=bb -o $(project_dir)/initramfs_u-root.cpio coreboot-app
-endif
-endif
-	xz -f --check=crc32 -9 --lzma2=dict=1MiB --threads=$(CPUS) $(project_dir)/initramfs_u-root.cpio
+build: checkout
+	GOPATH=$(go_path_dir) go build -o $(uroot_bin) $(uroot_package)
 
-u-root: $(project_dir)/initramfs_u-root.cpio.xz
+u-root: build
+	GOARCH=$(CONFIG_LINUXBOOT_ARCH) GOPATH=$(go_path_dir) $(uroot_bin) \
+	$(uroot_args) -o $(project_dir)/initramfs_u-root.cpio $(uroot_cmds)
 
-.PHONY: u-root checkout fetch all check
+.PHONY: all u-root build checkout get version
diff --git a/payloads/external/Makefile.inc b/payloads/external/Makefile.inc
index 54ff9ea..4fda725 100644
--- a/payloads/external/Makefile.inc
+++ b/payloads/external/Makefile.inc
@@ -38,7 +38,7 @@
 endif
 ifneq ($(strip $(call strip_quotes,$(CONFIG_LINUX_INITRD))),)
 ifneq ($(CONFIG_LINUXBOOT_ARM64),y)
-      ADDITIONAL_PAYLOAD_CONFIG+=-I $(CONFIG_LINUX_INITRD)
+      ADDITIONAL_PAYLOAD_CONFIG+=-I $(CONFIG_LINUX_INITRD)$(CONFIG_LINUXBOOT_INITRAMFS_SUFFIX)
       prebuilt-files += $(strip $(call strip_quotes,$(CONFIG_LINUX_INITRD)))
 endif
 endif
@@ -262,19 +262,24 @@
 		CONFIG_LINUXBOOT_ARCH=$(CONFIG_LINUXBOOT_ARCH) \
 		CONFIG_LINUXBOOT_KERNEL=$(CONFIG_PAYLOAD_FILE) \
 		CONFIG_LINUXBOOT_INITRAMFS=$(CONFIG_LINUX_INITRD) \
+		CONFIG_LINUXBOOT_INITRAMFS_SUFFIX=$(CONFIG_LINUXBOOT_INITRAMFS_SUFFIX) \
 		CONFIG_LINUXBOOT_COMPILE_KERNEL=$(CONFIG_LINUXBOOT_COMPILE_KERNEL) \
 		CONFIG_LINUXBOOT_BUILD_INITRAMFS=$(CONFIG_LINUXBOOT_BUILD_INITRAMFS) \
 		CONFIG_LINUXBOOT_KERNEL_VERSION=$(CONFIG_LINUXBOOT_KERNEL_VERSION) \
 		CONFIG_LINUXBOOT_KERNEL_CONFIGFILE=$(CONFIG_LINUXBOOT_KERNEL_CONFIGFILE) \
+		CONFIG_LINUXBOOT_INITRAMFS_COMPRESSION_XZ=$(CONFIG_LINUXBOOT_INITRAMFS_COMPRESSION_XZ) \
 		CONFIG_LINUXBOOT_UROOT=$(CONFIG_LINUXBOOT_UROOT) \
 		CONFIG_LINUXBOOT_UROOT_VERSION=$(CONFIG_LINUXBOOT_UROOT_VERSION) \
+		CONFIG_LINUXBOOT_UROOT_FORMAT=$(CONFIG_LINUXBOOT_UROOT_FORMAT) \
+		CONFIG_LINUXBOOT_UROOT_INITCMD=$(CONFIG_LINUXBOOT_UROOT_INITCMD) \
+		CONFIG_LINUXBOOT_UROOT_SHELL=$(CONFIG_LINUXBOOT_UROOT_SHELL) \
 		CONFIG_LINUXBOOT_UROOT_COMMANDS=$(CONFIG_LINUXBOOT_UROOT_COMMANDS) \
 		CONFIG_LINUXBOOT_UROOT_FILES=$(CONFIG_LINUXBOOT_UROOT_FILES) \
 		CONFIG_LINUXBOOT_DTB_FILE=$(CONFIG_LINUXBOOT_DTB_FILE)
 
 payloads/external/LinuxBoot/linuxboot/bzImage: linuxboot
 payloads/external/LinuxBoot/linuxboot/uImage: linuxboot
-payloads/external/LinuxBoot/linuxboot/initramfs_u-root.cpio.xz: linuxboot
+payloads/external/LinuxBoot/linuxboot/initramfs_u-root.cpio: linuxboot
 
 # Yabits
 

-- 
To view, visit https://review.coreboot.org/c/coreboot/+/29778
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Id978ed2ebeff96c5be4f74ae07df9be76e106a1b
Gerrit-Change-Number: 29778
Gerrit-PatchSet: 8
Gerrit-Owner: Marcello Sylvester Bauer <sylvblck at sylv.io>
Gerrit-Reviewer: Andrea Barberio <insomniac at slackware.it>
Gerrit-Reviewer: Jens Drenhaus <jens.drenhaus at 9elements.com>
Gerrit-Reviewer: Marcello Sylvester Bauer <sylvblck at sylv.io>
Gerrit-Reviewer: Martin Roth <martinroth at google.com>
Gerrit-Reviewer: Patrick Georgi <pgeorgi at google.com>
Gerrit-Reviewer: Patrick Rudolph <siro at das-labor.org>
Gerrit-Reviewer: Paul Menzel <paulepanter at users.sourceforge.net>
Gerrit-Reviewer: Philipp Deppenwiese <zaolin.daisuki at gmail.com>
Gerrit-Reviewer: Stefan Reinauer <stefan.reinauer at coreboot.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply at coreboot.org>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20181128/32cc38cb/attachment.html>


More information about the coreboot-gerrit mailing list