On 1/12/22 06:30, Bruce Ashfield wrote:
On Tue, Jan 11, 2022 at 6:59 PM Saul Wold <[email protected]> wrote:

Re-use the runstrip() code from oe.packaging, for the kernel
stripping process. Since runstrip() is python the kernel do_strip()
need to be converted to Python also. The stripped kernel image
will be used for deployment in do_deploy(). This will allow the
package.bbclass to split an unstripped kernel binary for the debug
information and extended packagedata. The extended package data is
used by create-spdx.

Signed-off-by: Saul Wold <[email protected]>
---
  meta/classes/kernel.bbclass | 44 ++++++++++++++++---------------------
  1 file changed, 19 insertions(+), 25 deletions(-)

diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 7685c6921fa..b2f9e3c8071 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -700,30 +700,19 @@ do_kernel_link_images() {
  }
  addtask kernel_link_images after do_compile before do_strip

-do_strip() {
-       if [ -n "${KERNEL_IMAGE_STRIP_EXTRA_SECTIONS}" ]; then
-               if ! (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux"); then
-                       bbwarn "image type(s) will not be stripped (not supported): 
${KERNEL_IMAGETYPES}"
-                       return
-               fi
-
-               cd ${B}
-               headers=`"$CROSS_COMPILE"readelf -S 
${KERNEL_OUTPUT_DIR}/vmlinux | \
-                         grep "^ \{1,\}\[[0-9 ]\{1,\}\] [^ ]" | \
-                         sed "s/^ \{1,\}\[[0-9 ]\{1,\}\] //" | \
-                         gawk '{print $1}'`
-
-               for str in ${KERNEL_IMAGE_STRIP_EXTRA_SECTIONS}; do {
-                       if ! (echo "$headers" | grep -q "^$str$"); then
-                               bbwarn "Section not found: $str";
-                       fi

We are losing this warning in the relocated / common routine. It looks
like something we could continue to detect and warn on, no ?

I guess do we care in this case? We still do the strip regardless, the strip command does not complain about a missing section.

-
-                       "$CROSS_COMPILE"strip -s -R $str 
${KERNEL_OUTPUT_DIR}/vmlinux
-               }; done
-
-               bbnote "KERNEL_IMAGE_STRIP_EXTRA_SECTIONS is set, stripping 
sections:" \
-                       "${KERNEL_IMAGE_STRIP_EXTRA_SECTIONS}"
-       fi;
+python do_strip() {
+    import shutil
+
+    strip = d.getVar('STRIP')
+    extra_sections = d.getVar('KERNEL_IMAGE_STRIP_EXTRA_SECTIONS')
+    kernel_image = d.getVar('B') + "/" + d.getVar('KERNEL_OUTPUT_DIR') + 
"/vmlinux"
+
+    if (extra_sections is not None and kernel_image.find('boot/vmlinux') != 
-1):

Minor 'nit .. I'd probably just write that as: if extra_sections
(versus the is not None) .. but maybe you have it that way due to that
check not working.

+        kernel_image_stripped = kernel_image + ".stripped"
+        shutil.copy2(kernel_image, kernel_image_stripped)
+        oe.package.runstrip((kernel_image_stripped, 8, strip, extra_sections))
+        bb.note ("KERNEL_IMAGE_STRIP_EXTRA_SECTIONS is set, stripping sections: 
" + \
+            extra_sections)

In theory, we could move the debug log to the common routine when it
detects the extra section argument

Sure this can move to bb.debug(), will do that.

  }
  do_strip[dirs] = "${B}"

@@ -768,7 +757,12 @@ kernel_do_deploy() {

         for imageType in ${KERNEL_IMAGETYPES} ; do
                 baseName=$imageType-${KERNEL_IMAGE_NAME}
-               install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType 
$deployDir/$baseName${KERNEL_IMAGE_BIN_EXT}
+
+               if [ -s ${KERNEL_OUTPUT_DIR}/$imageType.stripped ] ; then
+                       install -m 0644 
${KERNEL_OUTPUT_DIR}/$imageType.stripped 
$deployDir/$baseName${KERNEL_IMAGE_BIN_EXT}
+               else
+                       install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType 
$deployDir/$baseName${KERNEL_IMAGE_BIN_EXT}
+               fi

Is there a scenario when the ".stripped" image isn't available ?
Wouldn't that already be an error, and so the deploy should just be an
error, versus copying the non-stripped one ?

We only copy to .stripped when KERNEL_IMAGE_STRIP_EXTRA_SECTIONS is set, so in the non-set case we will have the un-stripped image that needs to get installed correctly.


Sau!
Bruce

                 if [ -n "${KERNEL_IMAGE_LINK_NAME}" ] ; then
                         ln -sf $baseName${KERNEL_IMAGE_BIN_EXT} 
$deployDir/$imageType-${KERNEL_IMAGE_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
                 fi
--
2.31.1




--
Sau!
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#160490): 
https://lists.openembedded.org/g/openembedded-core/message/160490
Mute This Topic: https://lists.openembedded.org/mt/88362607/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to