summaryrefslogtreecommitdiff
path: root/payloads/external/LinuxBoot/targets
diff options
context:
space:
mode:
authorMarcello Sylvester Bauer <info@marcellobauer.com>2018-11-11 18:03:26 +0100
committerPhilipp Deppenwiese <zaolin.daisuki@gmail.com>2018-11-28 18:28:45 +0000
commit78d0256f1d2bb09e4430f2bd56b58df78d54311b (patch)
tree193c5725f2d51a6dba1454ccf7861566bffce6a3 /payloads/external/LinuxBoot/targets
parent5d8f02f3ef624e9055cc48cd354497a583133b1d (diff)
downloadcoreboot-78d0256f1d2bb09e4430f2bd56b58df78d54311b.tar.xz
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 <info@marcellobauer.com> Reviewed-on: https://review.coreboot.org/c/29581 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
Diffstat (limited to 'payloads/external/LinuxBoot/targets')
-rw-r--r--payloads/external/LinuxBoot/targets/linux.mk95
-rw-r--r--payloads/external/LinuxBoot/targets/u-root.mk19
2 files changed, 105 insertions, 9 deletions
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