Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 2/2 v2] module.bbclass: Create a new depmodwrapper to assist cross-installs
@ 2013-02-28 20:48 Mark Hatle
  2013-02-28 21:04 ` Otavio Salvador
  0 siblings, 1 reply; 4+ messages in thread
From: Mark Hatle @ 2013-02-28 20:48 UTC (permalink / raw)
  To: openembedded-core

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 <mark.hatle@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
---
 meta/classes/image.bbclass                         |    4 +-
 meta/classes/kernel.bbclass                        |    8 ++--
 meta/classes/module.bbclass                        |    4 +-
 .../recipes-kernel/kmod/depmodwrapper-cross_1.0.bb |   44 ++++++++++++++++++++
 4 files changed, 52 insertions(+), 8 deletions(-)
 create mode 100644 meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index dd78acb..af17331 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 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 e8c585b..2bdc2fc 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 e2174a1..2c1888c 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 0000000..fd7d67d
--- /dev/null
+++ b/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "Depmod wrapper script"
+LICENSE = "MIT"
+PR = "r0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+# We need to evaluate it to the final path for vardeps to
+# work properly.
+STAGING_KERNEL_DIR := "${STAGING_KERNEL_DIR}"
+
+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" -a "\$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}
+}
-- 
1.7.1




^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2 v2] module.bbclass: Create a new depmodwrapper to assist cross-installs
  2013-02-28 20:48 [PATCH 2/2 v2] module.bbclass: Create a new depmodwrapper to assist cross-installs Mark Hatle
@ 2013-02-28 21:04 ` Otavio Salvador
  2013-02-28 21:09   ` Bruce Ashfield
  2013-02-28 21:10   ` Mark Hatle
  0 siblings, 2 replies; 4+ messages in thread
From: Otavio Salvador @ 2013-02-28 21:04 UTC (permalink / raw)
  To: Mark Hatle; +Cc: Patches and discussions about the oe-core layer

On Thu, Feb 28, 2013 at 5:48 PM, Mark Hatle <mark.hatle@windriver.com> wrote:
> 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 <mark.hatle@windriver.com>
> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
> ---
>  meta/classes/image.bbclass                         |    4 +-
>  meta/classes/kernel.bbclass                        |    8 ++--
>  meta/classes/module.bbclass                        |    4 +-
>  .../recipes-kernel/kmod/depmodwrapper-cross_1.0.bb |   44 ++++++++++++++++++++

Why you don't put the script in a file and get it in SRC_URI? It is
bad to read the script content in the recipe.

>  4 files changed, 52 insertions(+), 8 deletions(-)
>  create mode 100644 meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
>
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index dd78acb..af17331 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 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 e8c585b..2bdc2fc 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 e2174a1..2c1888c 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 0000000..fd7d67d
> --- /dev/null
> +++ b/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
> @@ -0,0 +1,44 @@
> +DESCRIPTION = "Depmod wrapper script"
> +LICENSE = "MIT"
> +PR = "r0"
> +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
> +
> +# We need to evaluate it to the final path for vardeps to
> +# work properly.
> +STAGING_KERNEL_DIR := "${STAGING_KERNEL_DIR}"
> +
> +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" -a "\$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}
> +}
> --
> 1.7.1
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core



-- 
Otavio Salvador                             O.S. Systems
E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2 v2] module.bbclass: Create a new depmodwrapper to assist cross-installs
  2013-02-28 21:04 ` Otavio Salvador
@ 2013-02-28 21:09   ` Bruce Ashfield
  2013-02-28 21:10   ` Mark Hatle
  1 sibling, 0 replies; 4+ messages in thread
From: Bruce Ashfield @ 2013-02-28 21:09 UTC (permalink / raw)
  To: Otavio Salvador; +Cc: Patches and discussions about the oe-core layer

On Thu, Feb 28, 2013 at 4:04 PM, Otavio Salvador
<otavio@ossystems.com.br> wrote:
> On Thu, Feb 28, 2013 at 5:48 PM, Mark Hatle <mark.hatle@windriver.com> wrote:
>> 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 <mark.hatle@windriver.com>
>> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
>> ---
>>  meta/classes/image.bbclass                         |    4 +-
>>  meta/classes/kernel.bbclass                        |    8 ++--
>>  meta/classes/module.bbclass                        |    4 +-
>>  .../recipes-kernel/kmod/depmodwrapper-cross_1.0.bb |   44 ++++++++++++++++++++
>
> Why you don't put the script in a file and get it in SRC_URI? It is
> bad to read the script content in the recipe.

string expansion. If it isn't embedded in the recipe, it's a two phase approach
of needing to fetch the script, and then do variable substitution (via
parameters,
sed, autoconf .. or whatever else people can dream up).

AFAIK this follows the convention of the other wrapper scripts as well.

Cheers,

Bruce

>
>>  4 files changed, 52 insertions(+), 8 deletions(-)
>>  create mode 100644 meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
>>
>> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
>> index dd78acb..af17331 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 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 e8c585b..2bdc2fc 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 e2174a1..2c1888c 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 0000000..fd7d67d
>> --- /dev/null
>> +++ b/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
>> @@ -0,0 +1,44 @@
>> +DESCRIPTION = "Depmod wrapper script"
>> +LICENSE = "MIT"
>> +PR = "r0"
>> +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
>> +
>> +# We need to evaluate it to the final path for vardeps to
>> +# work properly.
>> +STAGING_KERNEL_DIR := "${STAGING_KERNEL_DIR}"
>> +
>> +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" -a "\$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}
>> +}
>> --
>> 1.7.1
>>
>>
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.openembedded.org
>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
>
>
> --
> Otavio Salvador                             O.S. Systems
> E-mail: otavio@ossystems.com.br  http://www.ossystems.com.br
> Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core



-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end"



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2 v2] module.bbclass: Create a new depmodwrapper to assist cross-installs
  2013-02-28 21:04 ` Otavio Salvador
  2013-02-28 21:09   ` Bruce Ashfield
@ 2013-02-28 21:10   ` Mark Hatle
  1 sibling, 0 replies; 4+ messages in thread
From: Mark Hatle @ 2013-02-28 21:10 UTC (permalink / raw)
  To: Otavio Salvador; +Cc: Patches and discussions about the oe-core layer

On 2/28/13 3:04 PM, Otavio Salvador wrote:
> On Thu, Feb 28, 2013 at 5:48 PM, Mark Hatle <mark.hatle@windriver.com> wrote:
>> 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 <mark.hatle@windriver.com>
>> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
>> ---
>>   meta/classes/image.bbclass                         |    4 +-
>>   meta/classes/kernel.bbclass                        |    8 ++--
>>   meta/classes/module.bbclass                        |    4 +-
>>   .../recipes-kernel/kmod/depmodwrapper-cross_1.0.bb |   44 ++++++++++++++++++++
>
> Why you don't put the script in a file and get it in SRC_URI? It is
> bad to read the script content in the recipe.

Two reasons, the qemuwrapper doesn't do that and that is what I started with for 
an example... and with the ${STAGING_KERNEL_DIR} needing to be changed for each 
build, it seemed easier to avoid a sed operation on a src file, when I could 
just write it out inline.

(I don't see much of an advantage of having this code separately either...)


>>   4 files changed, 52 insertions(+), 8 deletions(-)
>>   create mode 100644 meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
>>
>> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
>> index dd78acb..af17331 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 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 e8c585b..2bdc2fc 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 e2174a1..2c1888c 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 0000000..fd7d67d
>> --- /dev/null
>> +++ b/meta/recipes-kernel/kmod/depmodwrapper-cross_1.0.bb
>> @@ -0,0 +1,44 @@
>> +DESCRIPTION = "Depmod wrapper script"
>> +LICENSE = "MIT"
>> +PR = "r0"
>> +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
>> +
>> +# We need to evaluate it to the final path for vardeps to
>> +# work properly.
>> +STAGING_KERNEL_DIR := "${STAGING_KERNEL_DIR}"
>> +
>> +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" -a "\$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}
>> +}
>> --
>> 1.7.1
>>
>>
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.openembedded.org
>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
>
>




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-02-28 21:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-28 20:48 [PATCH 2/2 v2] module.bbclass: Create a new depmodwrapper to assist cross-installs Mark Hatle
2013-02-28 21:04 ` Otavio Salvador
2013-02-28 21:09   ` Bruce Ashfield
2013-02-28 21:10   ` Mark Hatle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox