aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar James Hilliard <james.hilliard1@gmail.com>2019-03-16 06:26:37 +0800
committerGravatar Thomas Petazzoni <thomas.petazzoni@bootlin.com>2019-03-17 13:46:55 +0100
commit6f28ce5322259b563c8a0f1056c38aab2d9ad8a2 (patch)
tree639ecca0f17e721a363c1dd83d5369f54b703641
parent4a04886a6423b78e8adf72bb6c22a50c8ed45459 (diff)
downloadbuildroot-6f28ce5322259b563c8a0f1056c38aab2d9ad8a2.tar.gz
buildroot-6f28ce5322259b563c8a0f1056c38aab2d9ad8a2.tar.bz2
package/systemd: enable building of systemd-boot
systemd-boot is the integration of gummiboot into systemd, when gummiboot is no longer maintained [0]. Add an option to build systemd-boot as part of the systemd build. Install the boot files, that can serve as a template for the user to tweak for their system. [0] https://cgit.freedesktop.org/gummiboot/commit/?id=55df1539c9d330732e88bd196afee386db6e4a1d Signed-off-by: James Hilliard <james.hilliard1@gmail.com> [yann.morin.1998@free.fr: - add missing depends on i386 || x86_64 - add missing dependency to gnu-efi - add missing boot files ] Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
-rw-r--r--package/systemd/Config.in28
-rw-r--r--package/systemd/boot-files/buildroot.conf3
-rw-r--r--package/systemd/boot-files/loader.conf2
-rw-r--r--package/systemd/systemd.mk33
4 files changed, 66 insertions, 0 deletions
diff --git a/package/systemd/Config.in b/package/systemd/Config.in
index 490222f376..63d9ea52e3 100644
--- a/package/systemd/Config.in
+++ b/package/systemd/Config.in
@@ -78,6 +78,34 @@ if BR2_PACKAGE_SYSTEMD
config BR2_PACKAGE_PROVIDES_UDEV
default "systemd"
+config BR2_PACKAGE_SYSTEMD_BOOT
+ bool "systemd-boot"
+ depends on BR2_i386 || BR2_x86_64
+ select BR2_PACKAGE_GNU_EFI
+ help
+ systemd-boot is a simple UEFI boot manager which executes
+ configured EFI images. The default entry is selected by a
+ configured pattern (glob) or an on-screen menu.
+
+ systemd-boot operates on the EFI System Partition (ESP)
+ only. Configuration file fragments, kernels, initrds, other
+ EFI images need to reside on the ESP. Linux kernels need to
+ be built with CONFIG_EFI_STUB to be able to be directly
+ executed as an EFI image.
+
+ See the Grub2 help text for details on preparing an EFI
+ capable disk image using systemd-boot: the instructions are
+ exactly the same, except that the systemd-boot configuration
+ files will be located in /loader/ inside the EFI partition.
+
+ https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/
+
+config BR2_PACKAGE_SYSTEMD_BOOT_EFI_ARCH
+ string
+ default "ia32" if BR2_i386
+ default "x64" if BR2_x86_64
+ depends on BR2_PACKAGE_SYSTEMD_BOOT
+
config BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY
bool "HTTP server for journal events"
select BR2_PACKAGE_LIBMICROHTTPD
diff --git a/package/systemd/boot-files/buildroot.conf b/package/systemd/boot-files/buildroot.conf
new file mode 100644
index 0000000000..16d4d85f4a
--- /dev/null
+++ b/package/systemd/boot-files/buildroot.conf
@@ -0,0 +1,3 @@
+title Buildroot
+linux /bzImage
+options root=/dev/sda2 rootwait console=tty1
diff --git a/package/systemd/boot-files/loader.conf b/package/systemd/boot-files/loader.conf
new file mode 100644
index 0000000000..93b77b8f93
--- /dev/null
+++ b/package/systemd/boot-files/loader.conf
@@ -0,0 +1,2 @@
+timeout 3
+default buildroot
diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk
index 928e2dc1b6..5389b7ae3a 100644
--- a/package/systemd/systemd.mk
+++ b/package/systemd/systemd.mk
@@ -26,6 +26,7 @@ SYSTEMD_CONF_OPTS += \
-Dima=false \
-Defi=false \
-Dgnu-efi=false \
+ -Dlibcryptsetup=false \
-Dldconfig=false \
-Ddefault-dnssec=no \
-Dtests=false \
@@ -352,6 +353,34 @@ else
SYSTEMD_CONF_OPTS += -Dhibernate=false
endif
+ifeq ($(BR2_PACKAGE_SYSTEMD_BOOT),y)
+SYSTEMD_INSTALL_IMAGES = YES
+SYSTEMD_DEPENDENCIES += gnu-efi
+SYSTEMD_CONF_OPTS += \
+ -Defi=true \
+ -Dgnu-efi=true \
+ -Defi-cc=$(TARGET_CC) \
+ -Defi-ld=$(TARGET_LD) \
+ -Defi-libdir=$(STAGING_DIR)/usr/lib \
+ -Defi-ldsdir=$(STAGING_DIR)/usr/lib \
+ -Defi-includedir=$(STAGING_DIR)/usr/include/efi
+
+SYSTEMD_BOOT_EFI_ARCH = $(call qstrip,$(BR2_PACKAGE_SYSTEMD_BOOT_EFI_ARCH))
+define SYSTEMD_INSTALL_BOOT_FILES
+ $(INSTALL) -D -m 0644 $(@D)/build/src/boot/efi/systemd-boot$(SYSTEMD_BOOT_EFI_ARCH).efi \
+ $(BINARIES_DIR)/efi-part/EFI/BOOT/boot$(SYSTEMD_BOOT_EFI_ARCH).efi
+ echo "boot$(SYSTEMD_BOOT_EFI_ARCH).efi" > \
+ $(BINARIES_DIR)/efi-part/startup.nsh
+ $(INSTALL) -D -m 0644 $(SYSTEMD_PKGDIR)/boot-files/loader.conf \
+ $(BINARIES_DIR)/efi-part/loader/loader.conf
+ $(INSTALL) -D -m 0644 $(SYSTEMD_PKGDIR)/boot-files/buildroot.conf \
+ $(BINARIES_DIR)/efi-part/loader/entries/buildroot.conf
+endef
+
+else
+SYSTEMD_CONF_OPTS += -Defi=false -Dgnu-efi=false
+endif # BR2_PACKAGE_SYSTEMD_BOOT == y
+
SYSTEMD_FALLBACK_HOSTNAME = $(call qstrip,$(BR2_TARGET_GENERIC_HOSTNAME))
ifneq ($(SYSTEMD_FALLBACK_HOSTNAME),)
SYSTEMD_CONF_OPTS += -Dfallback-hostname=$(SYSTEMD_FALLBACK_HOSTNAME)
@@ -376,6 +405,10 @@ SYSTEMD_POST_INSTALL_TARGET_HOOKS += \
SYSTEMD_INSTALL_MACHINEID_HOOK \
SYSTEMD_INSTALL_RESOLVCONF_HOOK
+define SYSTEMD_INSTALL_IMAGES_CMDS
+ $(SYSTEMD_INSTALL_BOOT_FILES)
+endef
+
define SYSTEMD_USERS
- - input -1 * - - - Input device group
- - systemd-journal -1 * - - - Journal