diff options
author | Lans Zhang <jia.zhang@windriver.com> | 2017-07-03 09:21:44 +0800 |
---|---|---|
committer | Lans Zhang <jia.zhang@windriver.com> | 2017-07-03 09:21:44 +0800 |
commit | 5135786fa32f957c6e912b1b899d4a886a7b1368 (patch) | |
tree | 7b7a3500e954caddf1e852aa6e6f5fa8fa909d54 | |
parent | 0551bc8d84fb533d0e129c94bd7028414b34e531 (diff) | |
download | meta-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.bbappend | 58 | ||||
-rw-r--r-- | meta/recipes-core/images/kernel-initramfs.bb | 74 |
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 @@ | |||
1 | inherit user-key-store deploy | ||
2 | |||
3 | # Always fetch the latest initramfs image | ||
4 | do_install[nostamp] = "1" | ||
5 | |||
6 | fakeroot 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 | } | ||
19 | addtask sign after do_install before do_deploy do_package | ||
20 | |||
21 | do_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 | } | ||
39 | addtask deploy after do_install before do_build | ||
40 | |||
41 | pkg_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 | |||
51 | pkg_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 @@ | |||
1 | SUMMARY = "Initramfs kernel boot" | ||
2 | DESCRIPTION = "This package includes the initramfs for the kernel boot. \ | ||
3 | " | ||
4 | LICENSE = "MIT" | ||
5 | |||
6 | DEPENDS = "virtual/kernel" | ||
7 | |||
8 | PROVIDES = "virtual/kernel-initramfs" | ||
9 | |||
10 | ALLOW_EMPTY_${PN} = "1" | ||
11 | |||
12 | S = "${STAGING_KERNEL_DIR}" | ||
13 | B = "${WORKDIR}/${BPN}-${PV}" | ||
14 | |||
15 | inherit linux-kernel-base kernel-arch | ||
16 | |||
17 | INITRAMFS_BASE_NAME = "${KERNEL_IMAGETYPE}-initramfs-${PV}-${PR}-${MACHINE}-${DATETIME}" | ||
18 | INITRAMFS_BASE_NAME[vardepsexclude] = "DATETIME" | ||
19 | INITRAMFS_EXT_NAME = "-${@base_read_file('${STAGING_KERNEL_BUILDDIR}/kernel-abiversion')}" | ||
20 | |||
21 | BUNDLE = "${@'1' if d.getVar('INITRAMFS_IMAGE', True) and \ | ||
22 | d.getVar('INITRAMFS_IMAGE_BUNDLE', True) == '1' \ | ||
23 | else '0'}" | ||
24 | |||
25 | python() { | ||
26 | image = d.getVar('INITRAMFS_IMAGE', True) | ||
27 | if image: | ||
28 | d.appendVarFlag('do_install', 'depends', ' ${INITRAMFS_IMAGE}:do_rootfs') | ||
29 | } | ||
30 | |||
31 | do_unpack[depends] += "virtual/kernel:do_deploy" | ||
32 | do_populate_lic[depends] += "virtual/kernel:do_deploy" | ||
33 | |||
34 | do_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 | |||
57 | pkg_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 | |||
65 | pkg_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 | |||
72 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
73 | |||
74 | FILES_${PN} = "/boot/*" | ||