From 5135786fa32f957c6e912b1b899d4a886a7b1368 Mon Sep 17 00:00:00 2001 From: Lans Zhang Date: Mon, 3 Jul 2017 09:21:44 +0800 Subject: kernel-initramfs: define this package to include the initramfs image for kernel boot Signed-off-by: Lans Zhang --- .../recipes-kernel/linux/kernel-initramfs.bbappend | 58 +++++++++++++++++ meta/recipes-core/images/kernel-initramfs.bb | 74 ++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend create mode 100644 meta/recipes-core/images/kernel-initramfs.bb diff --git a/meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend b/meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend new file mode 100644 index 0000000..b68f201 --- /dev/null +++ b/meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend @@ -0,0 +1,58 @@ +inherit user-key-store deploy + +# Always fetch the latest initramfs image +do_install[nostamp] = "1" + +fakeroot python do_sign() { + initramfs = None + + if d.getVar('BUNDLE', True) == '0': + initramfs = d.expand('${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.cpio.gz') + else: + initramfs = d.expand('${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}') + + if initramfs == None or not os.path.exists(initramfs): + return + + uks_sel_sign(initramfs, d) +} +addtask sign after do_install before do_deploy do_package + +do_deploy() { + initramfs="" + initramfs_dest="" + + if [ "${BUNDLE}" = "0" ]; then + initramfs="${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.cpio.gz" + initramfs_dest="${DEPLOYDIR}/${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz" + else + initramfs="${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" + initramfs_dest="${DEPLOYDIR}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" + fi + + if [ -f "$initramfs.p7b" ]; then + install -d "${DEPLOYDIR}" + + install -m 0644 "$initramfs.p7b" "$initramfs_dest.p7b" + fi +} +addtask deploy after do_install before do_build + +pkg_postinst_${PN}_append() { + if [ "${BUNDLE}" = "1" ] ; then + update-alternatives --install "/boot/${KERNEL_IMAGETYPE}.p7b" \ + "${KERNEL_IMAGETYPE}.p7b" \ + "/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b" 50101 + fi + + true +} + +pkg_prerm_${PN}_append() { + if [ "${BUNDLE}" = "1" ] ; then + update-alternatives --remove "${KERNEL_IMAGETYPE}.p7b" \ + "${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b" + fi + + true +} diff --git a/meta/recipes-core/images/kernel-initramfs.bb b/meta/recipes-core/images/kernel-initramfs.bb new file mode 100644 index 0000000..1546421 --- /dev/null +++ b/meta/recipes-core/images/kernel-initramfs.bb @@ -0,0 +1,74 @@ +SUMMARY = "Initramfs kernel boot" +DESCRIPTION = "This package includes the initramfs for the kernel boot. \ +" +LICENSE = "MIT" + +DEPENDS = "virtual/kernel" + +PROVIDES = "virtual/kernel-initramfs" + +ALLOW_EMPTY_${PN} = "1" + +S = "${STAGING_KERNEL_DIR}" +B = "${WORKDIR}/${BPN}-${PV}" + +inherit linux-kernel-base kernel-arch + +INITRAMFS_BASE_NAME = "${KERNEL_IMAGETYPE}-initramfs-${PV}-${PR}-${MACHINE}-${DATETIME}" +INITRAMFS_BASE_NAME[vardepsexclude] = "DATETIME" +INITRAMFS_EXT_NAME = "-${@base_read_file('${STAGING_KERNEL_BUILDDIR}/kernel-abiversion')}" + +BUNDLE = "${@'1' if d.getVar('INITRAMFS_IMAGE', True) and \ + d.getVar('INITRAMFS_IMAGE_BUNDLE', True) == '1' \ + else '0'}" + +python() { + image = d.getVar('INITRAMFS_IMAGE', True) + if image: + d.appendVarFlag('do_install', 'depends', ' ${INITRAMFS_IMAGE}:do_rootfs') +} + +do_unpack[depends] += "virtual/kernel:do_deploy" +do_populate_lic[depends] += "virtual/kernel:do_deploy" + +do_install() { + [ -z "${INITRAMFS_IMAGE}" ] && exit 0 + + if [ "${BUNDLE}" = "0" ]; then + for suffix in cpio.gz cpio.lzo cpio.lzma cpio.xz; do + img="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$suffix" + + if [ -s "$img" ]; then + install -d "${D}/boot" + install -m 0644 "$img" \ + "${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.$suffix" + break + fi + done + else + if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" ]; then + install -d "${D}/boot" + install -m 0644 "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" \ + "${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" + fi + fi +} + +pkg_postinst_${PN}() { + if [ "${BUNDLE}" = "1" ]; then + update-alternatives --install "/boot/${KERNEL_IMAGETYPE}" \ + "${KERNEL_IMAGETYPE}" "/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" \ + 50101 || true + fi +} + +pkg_prerm_${PN}() { + if [ "${BUNDLE}" = "1" ]; then + update-alternatives --remove "${KERNEL_IMAGETYPE}" \ + "${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" || true + fi +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +FILES_${PN} = "/boot/*" -- cgit v1.2.3-54-g00ecf