package/petitboot: new package

Although this is a "boot loader", it really is a tool that should be
part of an image that acts as the bootloader. Thus, it is not in the
bootloader menu.

A UI is required and can be provided by ncurses, X11 or fbdev. Only
ncurses is supported for now. The other two use libtwin which isn't part
of Buildroot for now.

Adapted from https://github.com/glevand/petitboot--buildroot
Updated to work with m68k architecture rather than just PlayStation3
(focused on qemu-system-m68k virt machine)

Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Thomas Huth <huth@tuxfamily.org>
[Arnout:
 - Add missing arch and toolchain dependencies.
 - Remove nonexistent BR2_PACKAGE_NCURSES_TARGET_* selects.
 - Swap kexec/kexec-lite priority.
 - Add hash for license file.
 - Use version without v for VERSION.
 - Remove unnecessary --localstatedir=/var.
 - Add --disable-busybox.
 - Remove --enable-debug.
 - Remove --with-ncursesw and explicit libraries.
 - Add explicit arguments for all configure options.
 - Always select busybox tftp.
 - Add optional dependency on dtc.
 - Move dtc-specific options under a single condition.
 - Minor cleanups (whitespace, comments, ...).
]
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
This commit is contained in:
Laurent Vivier 2023-02-01 21:48:46 +01:00 committed by Arnout Vandecappelle
parent 3d7557d80f
commit a2f554c1bd
5 changed files with 98 additions and 0 deletions

View File

@ -1817,6 +1817,9 @@ F: package/aircrack-ng/
N: Laurent Charpentier <laurent_pubs@yahoo.com>
F: package/open-lldp/
N: Laurent Vivier <laurent@vivier.eu>
F: package/petitboot/
N: Lee Jones <lee.jones@linaro.org>
F: boot/afboot-stm32/

View File

@ -2684,6 +2684,7 @@ menu "System tools"
source "package/openrc/Config.in"
source "package/openvmtools/Config.in"
source "package/pamtester/Config.in"
source "package/petitboot/Config.in"
source "package/polkit/Config.in"
source "package/powerpc-utils/Config.in"
source "package/procps-ng/Config.in"

View File

@ -0,0 +1,31 @@
config BR2_PACKAGE_PETITBOOT
bool "petitboot"
# kexec-lite arch depends is a subset of kexec arch depends
depends on BR2_PACKAGE_KEXEC_ARCH_SUPPORTS
depends on BR2_USE_MMU # lvm2
depends on BR2_USE_WCHAR # elfutils
depends on !BR2_STATIC_LIBS # elfutils, lvm2
depends on BR2_TOOLCHAIN_HAS_THREADS # elfutils, lvm2
depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils
depends on BR2_PACKAGE_HAS_UDEV
select BR2_PACKAGE_ELFUTILS
select BR2_PACKAGE_LVM2 # devmapper
select BR2_PACKAGE_NCURSES
# run-time dependency only
select BR2_PACKAGE_KEXEC if !BR2_PACKAGE_KEXEC_LITE
# run-time dependency only
select BR2_PACKAGE_POWERPC_UTILS if ( BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le )
# run-time dependency only
select BR2_PACKAGE_NVME if ( BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le )
help
Petitboot is a small kexec-based bootloader
http://www.kernel.org/pub/linux/kernel/people/geoff/petitboot/petitboot.html
comment "petitboot needs a uClibc or glibc toolchain w/ wchar, dynamic library, threads, udev /dev management"
depends on BR2_PACKAGE_KEXEC_ARCH_SUPPORTS
depends on BR2_USE_MMU
depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS || \
BR2_TOOLCHAIN_HAS_THREADS || \
!(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC) || \
!BR2_PACKAGE_HAS_UDEV

View File

@ -0,0 +1,3 @@
# Locally computed
sha256 b42ae4fb2a81e9cf68f727c3f54c6312788c654bd97628ec9ba61b19a68990e6 petitboot-v1.13.tar.gz
sha256 204d8eff92f95aac4df6c8122bc1505f468f3a901e5a4cc08940e0ede1938994 COPYING

View File

@ -0,0 +1,60 @@
################################################################################
#
# petitboot
#
################################################################################
PETITBOOT_VERSION = 1.13
PETITBOOT_SOURCE = petitboot-v$(PETITBOOT_VERSION).tar.gz
PETITBOOT_SITE = https://github.com/open-power/petitboot/releases/download/v$(PETITBOOT_VERSION)
PETITBOOT_DEPENDENCIES = elfutils ncurses udev host-bison host-flex lvm2
PETITBOOT_LICENSE = GPL-2.0
PETITBOOT_LICENSE_FILES = COPYING
PETITBOOT_CONF_OPTS = \
--enable-crypt \
--enable-platform-auto \
--disable-mtd \
--with-ncurses \
--without-signed-boot \
--without-twin-fbdev \
--without-twin-x11 \
$(if $(BR2_PACKAGE_BUSYBOX),--enable-busybox,--disable-busybox) \
HOST_PROG_KEXEC=/usr/sbin/kexec \
HOST_PROG_SHUTDOWN=/usr/sbin/kexec-restart
# HPA and Busybox tftp are supported. HPA tftp is part of Buildroot's tftpd
# package.
ifeq ($(BR2_PACKAGE_TFTPD),y)
PETITBOOT_CONF_OPTS += --with-tftp=hpa
else ifeq ($(BR2_PACKAGE_BUSYBOX),y)
PETITBOOT_CONF_OPTS += --with-tftp=busybox
else
# This actually means "autodetect", there's no way to really disable.
PETITBOOT_CONF_OPTS += --without-tftp
endif
ifeq ($(BR2_PACKAGE_DTC),y)
PETITBOOT_DEPENDENCIES += dtc
PETITBOOT_CONF_OPTS += --with-fdt
define PETITBOOT_POST_INSTALL_DTB
$(INSTALL) -D -m 0755 $(@D)/utils/hooks/30-dtb-updates \
$(TARGET_DIR)/etc/petitboot/boot.d/30-dtb-updates
endef
PETITBOOT_POST_INSTALL_TARGET_HOOKS += PETITBOOT_POST_INSTALL_DTB
else
PETITBOOT_CONF_OPTS += --without-fdt
endif
define PETITBOOT_POST_INSTALL
$(INSTALL) -D -m 0755 $(@D)/utils/bb-kexec-reboot \
$(TARGET_DIR)/usr/libexec/petitboot/bb-kexec-reboot
$(INSTALL) -D -m 0755 $(@D)/utils/hooks/01-create-default-dtb \
$(TARGET_DIR)/etc/petitboot/boot.d/01-create-default-dtb
$(INSTALL) -D -m 0755 $(@D)/utils/hooks/90-sort-dtb \
$(TARGET_DIR)/etc/petitboot/boot.d/90-sort-dtb
endef
PETITBOOT_POST_INSTALL_TARGET_HOOKS += PETITBOOT_POST_INSTALL
$(eval $(autotools-package))