mirror of
https://git.yoctoproject.org/meta-arm
synced 2026-06-05 02:20:30 +00:00
arm: Enable Secure Boot in all required recipes
In the target, Secure Boot starts from the firmware (u-boot), adds the signing keys, and verifies the bootloader (systemd-boot) and kernel (Linux). sbsign bbclass is used to sign the binaries. sbsign is the name of the tool used to sign these binaries. Hence the name of this class to sbsign and variables with SBSIGN prefix. Signed-off-by: Javier Tia <javier.tia@linaro.org> Signed-off-by: Jon Mason <jon.mason@arm.com>
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
# Sign binaries for UEFI Secure Boot
|
||||
#
|
||||
# Usage in recipes:
|
||||
#
|
||||
# Set binary to sign per recipe:
|
||||
# SBSIGN_TARGET_BINARY = "${B}/binary_to_sign"
|
||||
#
|
||||
# Then call do_sbsign() in correct stage of the build
|
||||
# do_compile:append() {
|
||||
# do_sbsign
|
||||
# }
|
||||
|
||||
DEPENDS += 'gen-sbkeys'
|
||||
DEPENDS += "sbsigntool-native"
|
||||
|
||||
SBSIGN_KEY = "${SBSIGN_KEYS_DIR}/db.key"
|
||||
SBSIGN_CERT = "${SBSIGN_KEYS_DIR}/db.crt"
|
||||
SBSIGN_TARGET_BINARY ?= "binary_to_sign"
|
||||
|
||||
# Not adding as task since recipes may need to sign binaries at different
|
||||
# stages. Instead they can call this function when needed by calling this function
|
||||
do_sbsign() {
|
||||
bbnote "Signing ${PN} binary ${SBSIGN_TARGET_BINARY} with ${SBSIGN_KEY} and ${SBSIGN_CERT}"
|
||||
${STAGING_BINDIR_NATIVE}/sbsign \
|
||||
--key "${SBSIGN_KEY}" \
|
||||
--cert "${SBSIGN_CERT}" \
|
||||
--output "${SBSIGN_TARGET_BINARY}.signed" \
|
||||
"${SBSIGN_TARGET_BINARY}"
|
||||
cp "${SBSIGN_TARGET_BINARY}" "${SBSIGN_TARGET_BINARY}.unsigned"
|
||||
cp "${SBSIGN_TARGET_BINARY}.signed" "${SBSIGN_TARGET_BINARY}"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
|
||||
|
||||
SRC_URI += "file://uefi-secureboot.cfg"
|
||||
|
||||
inherit sbsign
|
||||
|
||||
DEPENDS += 'python3-pyopenssl-native'
|
||||
|
||||
do_compile:prepend() {
|
||||
export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
|
||||
|
||||
"${S}"/tools/efivar.py set -i "${S}"/ubootefi.var -n pk -d "${SBSIGN_KEYS_DIR}"/PK.esl -t file
|
||||
"${S}"/tools/efivar.py set -i "${S}"/ubootefi.var -n kek -d "${SBSIGN_KEYS_DIR}"/KEK.esl -t file
|
||||
"${S}"/tools/efivar.py set -i "${S}"/ubootefi.var -n db -d "${SBSIGN_KEYS_DIR}"/db.esl -t file
|
||||
"${S}"/tools/efivar.py set -i "${S}"/ubootefi.var -n dbx -d "${SBSIGN_KEYS_DIR}"/dbx.esl -t file
|
||||
"${S}"/tools/efivar.py print -i "${S}"/ubootefi.var
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
CONFIG_CMD_BOOTMENU=y
|
||||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="bootmenu"
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_EFI_VAR_BUF_SIZE=65536
|
||||
CONFIG_FIT_SIGNATURE=y
|
||||
CONFIG_EFI_SECURE_BOOT=y
|
||||
CONFIG_EFI_VARIABLES_PRESEED=y
|
||||
CONFIG_PREBOOT="setenv bootmenu_0 UEFI Boot Manager=bootefi bootmgr; setenv bootmenu_1 UEFI Maintenance Menu=eficonfig"
|
||||
CONFIG_PREBOOT_DEFINED=y
|
||||
@@ -2,3 +2,5 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
|
||||
|
||||
SRC_URI:append:qemuarm64-secureboot = " file://qemuarm64.cfg"
|
||||
SRC_URI:append:qemuarm-secureboot = " file://qemuarm.cfg"
|
||||
|
||||
require ${@bb.utils.contains('MACHINE_FEATURES', 'uefi-secureboot', 'u-boot-uefi-secureboot.inc', '', d)}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
inherit sbsign
|
||||
|
||||
SBSIGN_TARGET_BINARY = "${B}/src/boot/efi/systemd-boot${EFI_ARCH}.efi"
|
||||
|
||||
do_compile:append() {
|
||||
do_sbsign
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
require ${@bb.utils.contains('MACHINE_FEATURES', 'uefi-secureboot', 'systemd-boot-uefi-secureboot.inc', '', d)}
|
||||
@@ -0,0 +1 @@
|
||||
PACKAGECONFIG:append = " efi"
|
||||
@@ -0,0 +1 @@
|
||||
require ${@bb.utils.contains('MACHINE_FEATURES', 'efi', 'systemd-efi.inc', '', d)}
|
||||
@@ -25,3 +25,5 @@ SRC_URI:append:qemuarm = " \
|
||||
|
||||
FFA_TRANSPORT_INCLUDE = "${@bb.utils.contains('MACHINE_FEATURES', 'arm-ffa', 'arm-ffa-transport.inc', '' , d)}"
|
||||
require ${FFA_TRANSPORT_INCLUDE}
|
||||
|
||||
require ${@bb.utils.contains('MACHINE_FEATURES', 'uefi-secureboot', 'linux-yocto-uefi-secureboot.inc', '', d)}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
KERNEL_FEATURES += "cfg/efi-ext.scc"
|
||||
|
||||
inherit sbsign
|
||||
|
||||
# shell variable set inside do_compile task
|
||||
SBSIGN_TARGET_BINARY = "$KERNEL_IMAGE"
|
||||
|
||||
do_compile:append() {
|
||||
KERNEL_IMAGE=$(find ${B} -name ${KERNEL_IMAGETYPE} -print -quit)
|
||||
do_sbsign
|
||||
}
|
||||
|
||||
RRECOMMENDS:${PN} += "kernel-module-efivarfs"
|
||||
RRECOMMENDS:${PN} += "kernel-module-efivars"
|
||||
Reference in New Issue
Block a user