summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Vacek <patrickvacek@gmail.com>2020-06-22 09:39:49 +0200
committerGitHub <noreply@github.com>2020-06-22 09:39:49 +0200
commitcd27c8baa28c406e456c5d1dba2d790e414066bb (patch)
tree2d758548dfacf0f1f4935549a94b2cb186c9c1ee
parentbed1238b211417fa68bd8fcb301ce7d112da6ef1 (diff)
parent6eecf1593d31dc04566c646717f248b3fb0aa40d (diff)
downloadmeta-updater-cd27c8baa28c406e456c5d1dba2d790e414066bb.tar.gz
Merge pull request #681 from liuming50/introduce-ostree-kernel-initramfs
Introduce ostree kernel initramfs
-rw-r--r--classes/image_types_ostree.bbclass24
-rw-r--r--classes/sota.bbclass8
-rw-r--r--recipes-core/images/initramfs-ostree-image.bb2
-rw-r--r--recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_0.0.1.bb52
4 files changed, 60 insertions, 26 deletions
diff --git a/classes/image_types_ostree.bbclass b/classes/image_types_ostree.bbclass
index 051dcf9..0b928a3 100644
--- a/classes/image_types_ostree.bbclass
+++ b/classes/image_types_ostree.bbclass
@@ -3,14 +3,11 @@ inherit features_check
3 3
4REQUIRED_DISTRO_FEATURES = "usrmerge" 4REQUIRED_DISTRO_FEATURES = "usrmerge"
5 5
6OSTREE_KERNEL ??= "${KERNEL_IMAGETYPE}"
7OSTREE_ROOTFS ??= "${WORKDIR}/ostree-rootfs" 6OSTREE_ROOTFS ??= "${WORKDIR}/ostree-rootfs"
8OSTREE_COMMIT_SUBJECT ??= "Commit-id: ${IMAGE_NAME}" 7OSTREE_COMMIT_SUBJECT ??= "Commit-id: ${IMAGE_NAME}"
9OSTREE_COMMIT_BODY ??= "" 8OSTREE_COMMIT_BODY ??= ""
10OSTREE_COMMIT_VERSION ??= "${DISTRO_VERSION}" 9OSTREE_COMMIT_VERSION ??= "${DISTRO_VERSION}"
11OSTREE_UPDATE_SUMMARY ??= "0" 10OSTREE_UPDATE_SUMMARY ??= "0"
12OSTREE_DEPLOY_DEVICETREE ??= "0"
13OSTREE_DEVICETREE ??= "${KERNEL_DEVICETREE}"
14 11
15BUILD_OSTREE_TARBALL ??= "1" 12BUILD_OSTREE_TARBALL ??= "1"
16 13
@@ -135,27 +132,6 @@ IMAGE_CMD_ostree () {
135 132
136 ln -sf ../var/usrlocal usr/local 133 ln -sf ../var/usrlocal usr/local
137 134
138 if [ "${KERNEL_IMAGETYPE}" = "fitImage" ]; then
139 # this is a hack for ostree not to override init= in kernel cmdline -
140 # make it think that the initramfs is present (while it is in FIT image)
141 # since initramfs is fake file, it does not need to be included in checksum
142 checksum=$(sha256sum ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL} | cut -f 1 -d " ")
143 touch boot/initramfs-${checksum}
144 else
145 if [ ${@ oe.types.boolean('${OSTREE_DEPLOY_DEVICETREE}')} = True ] && [ -n "${OSTREE_DEVICETREE}" ]; then
146 checksum=$(cat ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL} ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES} ${OSTREE_DEVICETREE} | sha256sum | cut -f 1 -d " ")
147 for DTS_FILE in ${OSTREE_DEVICETREE}; do
148 DTS_FILE_BASENAME=$(basename ${DTS_FILE})
149 cp ${DEPLOY_DIR_IMAGE}/${DTS_FILE_BASENAME} boot/devicetree-${DTS_FILE_BASENAME}-${checksum}
150 done
151 else
152 checksum=$(cat ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL} ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES} | sha256sum | cut -f 1 -d " ")
153 fi
154 cp ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES} boot/initramfs-${checksum}
155 fi
156
157 cp ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL} boot/vmlinuz-${checksum}
158
159 # Copy image manifest 135 # Copy image manifest
160 cat ${IMAGE_MANIFEST} | cut -d " " -f1,3 > usr/package.manifest 136 cat ${IMAGE_MANIFEST} | cut -d " " -f1,3 > usr/package.manifest
161} 137}
diff --git a/classes/sota.bbclass b/classes/sota.bbclass
index 71bd303..dc18cbc 100644
--- a/classes/sota.bbclass
+++ b/classes/sota.bbclass
@@ -5,8 +5,11 @@ SOTA_CLIENT_PROV ??= "aktualizr-shared-prov"
5SOTA_DEPLOY_CREDENTIALS ?= "1" 5SOTA_DEPLOY_CREDENTIALS ?= "1"
6SOTA_HARDWARE_ID ??= "${MACHINE}" 6SOTA_HARDWARE_ID ??= "${MACHINE}"
7 7
8IMAGE_INSTALL_append_sota = " ostree os-release ${SOTA_CLIENT} ${SOTA_CLIENT_PROV}"
9IMAGE_CLASSES += " image_types_ostree image_types_ota image_repo_manifest" 8IMAGE_CLASSES += " image_types_ostree image_types_ota image_repo_manifest"
9IMAGE_INSTALL_append_sota = " ${SOTA_CLIENT} ${SOTA_CLIENT_PROV} \
10 ostree os-release ostree-kernel \
11 ${@'ostree-initramfs' if d.getVar('KERNEL_IMAGETYPE') != 'fitImage' else ''} \
12 ${@'ostree-devicetrees' if oe.types.boolean('${OSTREE_DEPLOY_DEVICETREE}') else ''}"
10 13
11IMAGE_FSTYPES += "${@bb.utils.contains('DISTRO_FEATURES', 'sota', 'ostreepush garagesign garagecheck ota-ext4 wic', ' ', d)}" 14IMAGE_FSTYPES += "${@bb.utils.contains('DISTRO_FEATURES', 'sota', 'ostreepush garagesign garagecheck ota-ext4 wic', ' ', d)}"
12IMAGE_FSTYPES += "${@bb.utils.contains('BUILD_OSTREE_TARBALL', '1', 'ostree.tar.bz2', ' ', d)}" 15IMAGE_FSTYPES += "${@bb.utils.contains('BUILD_OSTREE_TARBALL', '1', 'ostree.tar.bz2', ' ', d)}"
@@ -27,6 +30,9 @@ OSTREE_BRANCHNAME ?= "${SOTA_HARDWARE_ID}"
27OSTREE_OSNAME ?= "poky" 30OSTREE_OSNAME ?= "poky"
28OSTREE_BOOTLOADER ??= 'u-boot' 31OSTREE_BOOTLOADER ??= 'u-boot'
29OSTREE_BOOT_PARTITION ??= "/boot" 32OSTREE_BOOT_PARTITION ??= "/boot"
33OSTREE_KERNEL ??= "${KERNEL_IMAGETYPE}"
34OSTREE_DEPLOY_DEVICETREE ??= "0"
35OSTREE_DEVICETREE ??= "${KERNEL_DEVICETREE}"
30 36
31INITRAMFS_IMAGE ?= "initramfs-ostree-image" 37INITRAMFS_IMAGE ?= "initramfs-ostree-image"
32 38
diff --git a/recipes-core/images/initramfs-ostree-image.bb b/recipes-core/images/initramfs-ostree-image.bb
index bc21ed3..4af1548 100644
--- a/recipes-core/images/initramfs-ostree-image.bb
+++ b/recipes-core/images/initramfs-ostree-image.bb
@@ -20,7 +20,7 @@ IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
20# Avoid circular dependencies 20# Avoid circular dependencies
21EXTRA_IMAGEDEPENDS = "" 21EXTRA_IMAGEDEPENDS = ""
22 22
23inherit core-image 23inherit core-image nopackages
24 24
25IMAGE_ROOTFS_SIZE = "8192" 25IMAGE_ROOTFS_SIZE = "8192"
26 26
diff --git a/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_0.0.1.bb b/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_0.0.1.bb
new file mode 100644
index 0000000..fe8a9cc
--- /dev/null
+++ b/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_0.0.1.bb
@@ -0,0 +1,52 @@
1SUMMARY = "Ostree linux kernel, devicetrees and initramfs packager"
2DESCRIPTION = "Ostree linux kernel, devicetrees and initramfs packager"
3SECTION = "kernel"
4LICENSE = "GPLv2"
5LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
6
7# Whilst not a module, this ensures we don't get multilib extended (which would make no sense)
8inherit module-base kernel-artifact-names
9
10PACKAGES = "ostree-kernel ostree-initramfs ostree-devicetrees"
11
12ALLOW_EMPTY_ostree-initramfs = "1"
13ALLOW_EMPTY_ostree-devicetrees = "1"
14
15FILES_ostree-kernel = "${nonarch_base_libdir}/modules/*/vmlinuz"
16FILES_ostree-initramfs = "${nonarch_base_libdir}/modules/*/initramfs.img"
17FILES_ostree-devicetrees = "${nonarch_base_libdir}/modules/*/dtb/*"
18
19PACKAGE_ARCH = "${MACHINE_ARCH}"
20
21KERNEL_BUILD_ROOT = "${nonarch_base_libdir}/modules/"
22
23# There's nothing to do here, except install the artifacts where we can package them
24do_fetch[noexec] = "1"
25do_unpack[noexec] = "1"
26do_patch[noexec] = "1"
27do_configure[noexec] = "1"
28do_compile[noexec] = "1"
29deltask do_populate_sysroot
30
31do_install() {
32 kerneldir=${D}${KERNEL_BUILD_ROOT}${KERNEL_VERSION}
33 install -d $kerneldir
34
35 cp ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL} $kerneldir/vmlinuz
36
37 if [ "${KERNEL_IMAGETYPE}" != "fitImage" ]; then
38 if [ -n "${INITRAMFS_IMAGE}" ]; then
39 cp ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES} $kerneldir/initramfs.img
40 fi
41
42 if [ ${@ oe.types.boolean('${OSTREE_DEPLOY_DEVICETREE}')} = True ] && [ -n "${OSTREE_DEVICETREE}" ]; then
43 mkdir -p $kerneldir/dtb
44 for dts_file in ${KERNEL_DEVICETREE}; do
45 dts_file_basename=$(basename $dts_file)
46 cp ${DEPLOY_DIR_IMAGE}/$dts_file_basename $kerneldir/dtb/$dts_file_basename
47 done
48 fi
49 fi
50}
51do_install[vardepsexclude] = "KERNEL_VERSION"
52do_install[depends] = "virtual/kernel:do_deploy ${@['${INITRAMFS_IMAGE}:do_image_complete', ''][d.getVar('INITRAMFS_IMAGE') == '']}"