From 78d0256f1d2bb09e4430f2bd56b58df78d54311b Mon Sep 17 00:00:00 2001 From: Marcello Sylvester Bauer Date: Sun, 11 Nov 2018 18:03:26 +0100 Subject: LinuxBoot: refactor payload Clean and refactor the structure of the LinuxBoot payload integration, to make it more modular and readable. The kernel and initramfs should handled in separated makefiles. tested with: - qemu-i440fx (x86, x86_64) - cavium CN8100 (arm64) Change-Id: I41d0275a5f7efb920e881f43b0acda29f41ee221 Signed-off-by: Marcello Sylvester Bauer Reviewed-on: https://review.coreboot.org/c/29581 Tested-by: build bot (Jenkins) Reviewed-by: Philipp Deppenwiese --- payloads/external/LinuxBoot/targets/linux.mk | 95 +++++++++++++++++++++++++++ payloads/external/LinuxBoot/targets/u-root.mk | 19 +++--- 2 files changed, 105 insertions(+), 9 deletions(-) create mode 100644 payloads/external/LinuxBoot/targets/linux.mk (limited to 'payloads/external/LinuxBoot/targets') diff --git a/payloads/external/LinuxBoot/targets/linux.mk b/payloads/external/LinuxBoot/targets/linux.mk new file mode 100644 index 0000000000..07700b8605 --- /dev/null +++ b/payloads/external/LinuxBoot/targets/linux.mk @@ -0,0 +1,95 @@ +## This file is part of the coreboot project. +## +## Copyright (C) 2017 Facebook Inc. +## Copyright (C) 2018 9elements Cyber Security +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; version 2 of the License. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## + +kernel_tarball=https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-$(CONFIG_LINUXBOOT_KERNEL_VERSION).tar.xz +project_dir=linuxboot +kernel_dir=$(project_dir)/kernel + +XGCCPATH?=$(PWD)/util/crossgcc/xgcc/bin +ifeq ($(CONFIG_LINUXBOOT_ARCH),i386) +LINUXBOOT_COMPILE?=$(XGCCPATH)/i386-linux- +ARCH?=x86 +else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64) +LINUXBOOT_COMPILE?=$(XGCCPATH)/x86_64-linux- +ARCH?=x86_64 +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) +LINUXBOOT_COMPILE?=$(XGCCPATH)/aarch64-linux- +ARCH?=arm64 +endif + +OBJCOPY:=$(LINUXBOOT_COMPILE)objcopy + +all: kernel + +toolchain: + if [[ ! -x "$(LINUXBOOT_COMPILE)gcc" ]]; then \ + echo "Toolchain '$(LINUXBOOT_COMPILE)*' is missing."; \ + exit 1; \ + fi + +$(kernel_dir)/.config: + echo " WWW Download Linux $(CONFIG_LINUXBOOT_KERNEL_VERSION)" + mkdir -p $(kernel_dir) +ifeq ("$(wildcard $(kernel_dir)/README)","") + curl -s $(kernel_tarball) | tar xJ -C $(kernel_dir) --strip 1 +endif + +config: $(kernel_dir)/.config + echo " CONFIG Linux $(CONFIG_LINUXBOOT_KERNEL_VERSION)" +ifneq ($(CONFIG_LINUXBOOT_KERNEL_CONFIGFILE),) + cp $(CONFIG_LINUXBOOT_KERNEL_CONFIGFILE) $(kernel_dir)/.config +else ifeq ($(CONFIG_LINUXBOOT_ARCH),i386) + cp x86/defconfig $(kernel_dir)/.config +else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64) + cp x86_64/defconfig $(kernel_dir)/.config +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) + cp arm64/defconfig $(kernel_dir)/.config +endif + +ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64)) +$(kernel_dir)/arch/x86/boot/bzImage: config toolchain +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) +$(kernel_dir)/vmlinux: config toolchain +endif + echo " MAKE Kernel $(CONFIG_LINUXBOOT_KERNEL_VERSION)" + $(MAKE) -C $(kernel_dir) olddefconfig CROSS_COMPILE=$(LINUXBOOT_COMPILE) ARCH=$(ARCH) + $(MAKE) -C $(kernel_dir) -j $(CPUS) CROSS_COMPILE=$(LINUXBOOT_COMPILE) ARCH=$(ARCH) + +ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64)) +$(project_dir)/bzImage: $(kernel_dir)/arch/x86/boot/bzImage + cp $< $@ +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) +$(project_dir)/vmlinux.bin: $(kernel_dir)/vmlinux + $(OBJCOPY) -O binary $< $@ + +$(project_dir)/target.dtb: $(PWD)/$(CONFIG_LINUXBOOT_DTB_FILE) + cp $< $@ + +$(project_dir)/vmlinux.bin.lzma: $(project_dir)/vmlinux.bin + xz -c -k -f --format=lzma --lzma1=dict=1MiB,lc=3,lp=0,pb=3 $< > $@ + +$(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 + mkimage -f $(project_dir)/kernel_fdt_lzma.its $@ +endif + +ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64)) +kernel: $(project_dir)/bzImage +else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) +kernel: $(project_dir)/uImage +endif + +.PHONY: kernel config toolchain diff --git a/payloads/external/LinuxBoot/targets/u-root.mk b/payloads/external/LinuxBoot/targets/u-root.mk index 27f184e41a..5cb19bb339 100644 --- a/payloads/external/LinuxBoot/targets/u-root.mk +++ b/payloads/external/LinuxBoot/targets/u-root.mk @@ -1,6 +1,7 @@ ## This file is part of the coreboot project. ## ## Copyright (C) 2017 Facebook Inc. +## Copyright (C) 2018 9elements Cyber Security ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by @@ -22,7 +23,7 @@ project_dir=$(shell pwd)/linuxboot project_name=u-root go_path_dir=$(shell pwd)/linuxboot/go -all: build +all: u-root check: ifeq ("$(go_version)","") @@ -66,29 +67,29 @@ $(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 -$(project_dir)/initramfs.cpio.xz: checkout $(uroot_dir)/u-root +$(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.cpio \ + -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.cpio \ + -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.cpio coreboot-app + -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.cpio coreboot-app + -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.cpio + xz -f --check=crc32 -9 --lzma2=dict=1MiB --threads=$(CPUS) $(project_dir)/initramfs_u-root.cpio -build: $(project_dir)/initramfs.cpio.xz +u-root: $(project_dir)/initramfs_u-root.cpio.xz -.PHONY: build checkout fetch all check +.PHONY: u-root checkout fetch all check -- cgit v1.2.3