summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLans Zhang <jia.zhang@windriver.com>2017-07-03 09:21:44 +0800
committerLans Zhang <jia.zhang@windriver.com>2017-07-03 09:21:44 +0800
commit5135786fa32f957c6e912b1b899d4a886a7b1368 (patch)
tree7b7a3500e954caddf1e852aa6e6f5fa8fa909d54
parent0551bc8d84fb533d0e129c94bd7028414b34e531 (diff)
downloadmeta-secure-core-5135786fa32f957c6e912b1b899d4a886a7b1368.tar.gz
kernel-initramfs: define this package to include the initramfs image for kernel boot
Signed-off-by: Lans Zhang <jia.zhang@windriver.com>
-rw-r--r--meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend58
-rw-r--r--meta/recipes-core/images/kernel-initramfs.bb74
2 files changed, 132 insertions, 0 deletions
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 @@
1inherit user-key-store deploy
2
3# Always fetch the latest initramfs image
4do_install[nostamp] = "1"
5
6fakeroot python do_sign() {
7 initramfs = None
8
9 if d.getVar('BUNDLE', True) == '0':
10 initramfs = d.expand('${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.cpio.gz')
11 else:
12 initramfs = d.expand('${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}')
13
14 if initramfs == None or not os.path.exists(initramfs):
15 return
16
17 uks_sel_sign(initramfs, d)
18}
19addtask sign after do_install before do_deploy do_package
20
21do_deploy() {
22 initramfs=""
23 initramfs_dest=""
24
25 if [ "${BUNDLE}" = "0" ]; then
26 initramfs="${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.cpio.gz"
27 initramfs_dest="${DEPLOYDIR}/${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz"
28 else
29 initramfs="${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}"
30 initramfs_dest="${DEPLOYDIR}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin"
31 fi
32
33 if [ -f "$initramfs.p7b" ]; then
34 install -d "${DEPLOYDIR}"
35
36 install -m 0644 "$initramfs.p7b" "$initramfs_dest.p7b"
37 fi
38}
39addtask deploy after do_install before do_build
40
41pkg_postinst_${PN}_append() {
42 if [ "${BUNDLE}" = "1" ] ; then
43 update-alternatives --install "/boot/${KERNEL_IMAGETYPE}.p7b" \
44 "${KERNEL_IMAGETYPE}.p7b" \
45 "/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b" 50101
46 fi
47
48 true
49}
50
51pkg_prerm_${PN}_append() {
52 if [ "${BUNDLE}" = "1" ] ; then
53 update-alternatives --remove "${KERNEL_IMAGETYPE}.p7b" \
54 "${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b"
55 fi
56
57 true
58}
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 @@
1SUMMARY = "Initramfs kernel boot"
2DESCRIPTION = "This package includes the initramfs for the kernel boot. \
3"
4LICENSE = "MIT"
5
6DEPENDS = "virtual/kernel"
7
8PROVIDES = "virtual/kernel-initramfs"
9
10ALLOW_EMPTY_${PN} = "1"
11
12S = "${STAGING_KERNEL_DIR}"
13B = "${WORKDIR}/${BPN}-${PV}"
14
15inherit linux-kernel-base kernel-arch
16
17INITRAMFS_BASE_NAME = "${KERNEL_IMAGETYPE}-initramfs-${PV}-${PR}-${MACHINE}-${DATETIME}"
18INITRAMFS_BASE_NAME[vardepsexclude] = "DATETIME"
19INITRAMFS_EXT_NAME = "-${@base_read_file('${STAGING_KERNEL_BUILDDIR}/kernel-abiversion')}"
20
21BUNDLE = "${@'1' if d.getVar('INITRAMFS_IMAGE', True) and \
22 d.getVar('INITRAMFS_IMAGE_BUNDLE', True) == '1' \
23 else '0'}"
24
25python() {
26 image = d.getVar('INITRAMFS_IMAGE', True)
27 if image:
28 d.appendVarFlag('do_install', 'depends', ' ${INITRAMFS_IMAGE}:do_rootfs')
29}
30
31do_unpack[depends] += "virtual/kernel:do_deploy"
32do_populate_lic[depends] += "virtual/kernel:do_deploy"
33
34do_install() {
35 [ -z "${INITRAMFS_IMAGE}" ] && exit 0
36
37 if [ "${BUNDLE}" = "0" ]; then
38 for suffix in cpio.gz cpio.lzo cpio.lzma cpio.xz; do
39 img="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$suffix"
40
41 if [ -s "$img" ]; then
42 install -d "${D}/boot"
43 install -m 0644 "$img" \
44 "${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.$suffix"
45 break
46 fi
47 done
48 else
49 if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" ]; then
50 install -d "${D}/boot"
51 install -m 0644 "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" \
52 "${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}"
53 fi
54 fi
55}
56
57pkg_postinst_${PN}() {
58 if [ "${BUNDLE}" = "1" ]; then
59 update-alternatives --install "/boot/${KERNEL_IMAGETYPE}" \
60 "${KERNEL_IMAGETYPE}" "/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" \
61 50101 || true
62 fi
63}
64
65pkg_prerm_${PN}() {
66 if [ "${BUNDLE}" = "1" ]; then
67 update-alternatives --remove "${KERNEL_IMAGETYPE}" \
68 "${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" || true
69 fi
70}
71
72PACKAGE_ARCH = "${MACHINE_ARCH}"
73
74FILES_${PN} = "/boot/*"