From b18c61bae4d7161c087a004bba3c696006f7a2f6 Mon Sep 17 00:00:00 2001 From: Mark Hatle Date: Thu, 28 Feb 2013 15:51:51 -0600 Subject: module.bbclass: Create a new depmodwrapper to assist cross-installs Previously the build path to STAGING_KERNEL_DIR was being embedded into the package post install scripts. We avoid this behavior by generating a special depmodwrapper script. This script contains that hard-coded path, ensuring that re-use of the sstate-cache (and/or packages) will always run through the wrapper generated by the current build with a checksum that includes STAGING_KERNEL_DIR. [ YOCTO #3962 ] Signed-off-by: Mark Hatle Signed-off-by: Bruce Ashfield Signed-off-by: Richard Purdie --- meta/classes/image.bbclass | 4 +- meta/classes/kernel.bbclass | 8 ++-- meta/classes/module.bbclass | 4 +- .../recipes-kernel/kmod/depmodwrapper-cross_1.0.bb | 43 ++++++++++++++++++++++ 4 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb (limited to 'meta') diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index dd78acb7be..19564d81b6 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -10,7 +10,7 @@ inherit gzipnative LICENSE = "MIT" PACKAGES = "" -DEPENDS += "${MLPREFIX}qemuwrapper-cross" +DEPENDS += "${MLPREFIX}qemuwrapper-cross ${MLPREFIX}depmodwrapper-cross" RDEPENDS += "${IMAGE_INSTALL} ${LINGUAS_INSTALL} ${NORMAL_FEATURE_INSTALL} ${ROOTFS_BOOTSTRAP_INSTALL}" RRECOMMENDS += "${NORMAL_FEATURE_INSTALL_OPTIONAL}" @@ -283,7 +283,7 @@ fakeroot do_rootfs () { KERNEL_VERSION=`cat ${STAGING_KERNEL_DIR}/kernel-abiversion` mkdir -p ${IMAGE_ROOTFS}/lib/modules/$KERNEL_VERSION - depmod -a -b ${IMAGE_ROOTFS} -F ${STAGING_KERNEL_DIR}/System.map-$KERNEL_VERSION $KERNEL_VERSION + depmodwrapper -a -b ${IMAGE_ROOTFS} $KERNEL_VERSION fi ${IMAGE_PREPROCESS_COMMAND} diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass index e8c585bb94..2bdc2fcdc5 100644 --- a/meta/classes/kernel.bbclass +++ b/meta/classes/kernel.bbclass @@ -1,7 +1,7 @@ inherit linux-kernel-base module_strip PROVIDES += "virtual/kernel" -DEPENDS += "virtual/${TARGET_PREFIX}gcc kmod-native" +DEPENDS += "virtual/${TARGET_PREFIX}gcc kmod-native depmodwrapper-cross" # we include gcc above, we dont need virtual/libc INHIBIT_DEFAULT_DEPS = "1" @@ -272,7 +272,7 @@ if [ ! -e "$D/lib/modules/${KERNEL_VERSION}" ]; then mkdir -p $D/lib/modules/${KERNEL_VERSION} fi if [ -n "$D" ]; then - depmod -a -b $D -F ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION} ${KERNEL_VERSION} + depmodwrapper -a -b $D ${KERNEL_VERSION} else depmod -a ${KERNEL_VERSION} fi @@ -282,7 +282,7 @@ pkg_postinst_modules () { if [ -z "$D" ]; then depmod -a ${KERNEL_VERSION} else - depmod -a -b $D -F ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION} ${KERNEL_VERSION} + depmodwrapper -a -b $D ${KERNEL_VERSION} fi } @@ -290,7 +290,7 @@ pkg_postrm_modules () { if [ -z "$D" ]; then depmod -a ${KERNEL_VERSION} else - depmod -a -b $D -F ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION} ${KERNEL_VERSION} + depmodwrapper -a -b $D ${KERNEL_VERSION} fi } diff --git a/meta/classes/module.bbclass b/meta/classes/module.bbclass index e2174a16fd..2c1888c8d2 100644 --- a/meta/classes/module.bbclass +++ b/meta/classes/module.bbclass @@ -28,7 +28,7 @@ module_pkg_postinst () { if [ -z "$D" ]; then depmod -a ${KERNEL_VERSION} else - depmod -a -b $D -F ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION} ${KERNEL_VERSION} + depmodwrapper -a -b $D ${KERNEL_VERSION} fi } @@ -36,7 +36,7 @@ module_pkg_postrm () { if [ -z "$D" ]; then depmod -a ${KERNEL_VERSION} else - depmod -a -b $D -F ${STAGING_KERNEL_DIR}/System.map-${KERNEL_VERSION} ${KERNEL_VERSION} + depmodwrapper -a -b $D ${KERNEL_VERSION} fi } diff --git a/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb b/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb new file mode 100644 index 0000000000..efb1cac4c6 --- /dev/null +++ b/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb @@ -0,0 +1,43 @@ +DESCRIPTION = "Depmod wrapper script" +LICENSE = "MIT" +PR = "r0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" + +# We need the following for the sstate code to process the wrapper +SSTATE_SCAN_FILES += "depmodwrapper" + +do_install() { + install -d ${D}${bindir_crossscripts}/ + + cat > ${D}${bindir_crossscripts}/depmodwrapper << EOF +#!/bin/sh +# Expected to be called as: depmodwrapper -a KERNEL_VERSION +if [ "\$1" != "-a" -o "\$2" != "-b" ]; then + echo "Usage: depmodwrapper -a -b rootfs KERNEL_VERSION" >&2 + exit 1 +fi +if [ ! -r ${STAGING_KERNEL_DIR}/kernel-abiversion ]; then + echo "Unable to read: ${STAGING_KERNEL_DIR}/kernel-abiversion" >&2 +else + kernelabi=\$(cat ${STAGING_KERNEL_DIR}/kernel-abiversion) + if [ "\$kernelabi" != "\$4" ]; then + echo "Error: Kernel version \$4 does not match kernel-abiversion (\$kernelabi)" >&2 + exit 1 + fi +fi + +if [ ! -r ${STAGING_KERNEL_DIR}/System.map-\$4 ]; then + echo "Unable to read: ${STAGING_KERNEL_DIR}/System.map-\$4" >&2 + exec env depmod "\$1" "\$2" "\$3" "\$4" +else + exec env depmod "\$1" "\$2" "\$3" -F "${STAGING_KERNEL_DIR}/System.map-\$4" "\$4" +fi +EOF + chmod +x ${D}${bindir_crossscripts}/depmodwrapper +} + +SYSROOT_PREPROCESS_FUNCS += "depmodwrapper_sysroot_preprocess" + +depmodwrapper_sysroot_preprocess () { + sysroot_stage_dir ${D}${bindir_crossscripts} ${SYSROOT_DESTDIR}${bindir_crossscripts} +} -- cgit 1.2.3-korg