On 6/18/20 5:52 PM, Richard Purdie wrote:
On Thu, 2020-06-18 at 15:57 +0800, Xu, Yanfei wrote:
From: Yanfei Xu <[email protected]>

Some filesystems don't support symlink, then you will get failure when
you install or update the kernel rpm package. Now we use a copied iamge
for these filesystems instead of symlink.

Suggested-by: Bruce Ashfield <[email protected]>
Signed-off-by: Yanfei Xu <[email protected]>
---
  meta/classes/kernel.bbclass | 10 +++++++++-
  1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
index 41101a64a0..749d1a0f29 100644
--- a/meta/classes/kernel.bbclass
+++ b/meta/classes/kernel.bbclass
@@ -94,6 +94,14 @@ python __anonymous () {
          d.appendVar('RDEPENDS_%s-image' % kname, ' %s-image-%s' % (kname, 
typelower))
          d.setVar('PKG_%s-image-%s' % (kname,typelower), 
'%s-image-%s-${KERNEL_VERSION_PKG_NAME}' % (kname, typelower))
          d.setVar('ALLOW_EMPTY_%s-image-%s' % (kname, typelower), '1')
+        d.setVar('pkg_postinst_ontarget_%s-image-%s' % (kname,typelower), """
+set +e
+ln -sf %s-${KERNEL_VERSION} ${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1
+if [ $? -ne 0 ]; then
+    echo "Filesystem on ${KERNEL_IMAGEDEST}/ doesn't support symlinks, falling back 
to copied image (%s)."
+fi
+set -e
+""" % (type, type, type))
image = d.getVar('INITRAMFS_IMAGE')
      # If the INTIRAMFS_IMAGE is set but the INITRAMFS_IMAGE_BUNDLE is set to 
0,
@@ -386,7 +394,7 @@ kernel_do_install() {
        for imageType in ${KERNEL_IMAGETYPES} ; do
                install -m 0644 ${KERNEL_OUTPUT_DIR}/${imageType} 
${D}/${KERNEL_IMAGEDEST}/${imageType}-${KERNEL_VERSION}
                if [ "${KERNEL_PACKAGE_NAME}" = "kernel" ]; then
-                       ln -sf ${imageType}-${KERNEL_VERSION} 
${D}/${KERNEL_IMAGEDEST}/${imageType}
+                       install -m 0644 
${D}/${KERNEL_IMAGEDEST}/${imageType}-${KERNEL_VERSION} 
${D}/${KERNEL_IMAGEDEST}/${imageType}
                fi
        done
        install -m 0644 System.map ${D}/boot/System.map-${KERNEL_VERSION}

I am a bit concerned about this since whilst it solves one problem,
doesn't having two copies of the same file around significantly
increase the size of the packages and the update payloads updating such
systems would need? Are these two copies of the file in the same
package or not?

Perhaps the symlink creation should fall back to a copy on device
rather than having the copy at build time (as I understand it)?

I had a wrong understanding about the no-versioned Image in /boot
partation from wic. And I just verified that the no-versioned Image in
/boot partation seems doesn't from kernel image package. So you are
right, we don't need to have the other no-versioned image in packages.

I'll change the logic to having the copy at build time in v3.

Cheers,

Yanfei

Cheers,

Richard

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#139639): 
https://lists.openembedded.org/g/openembedded-core/message/139639
Mute This Topic: https://lists.openembedded.org/mt/74954288/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub  
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to