bootwrapper runs before linking initrd
I have a BR config that includes the following:
BR2_LINUX_KERNEL=y
BR2_TARGET_ROOTFS_INITRAMFS=y
BR2_TARGET_BOOT_WRAPPER_AARCH64=y
I expect that Buildroot will:
1. build the kernel
2. build rootfs.cpio
3. link rootfs.cpio into the kernel as an initrd
4. run boot-wrapper-aarch64 on the kernel+initrd
When I do a build, however, I can clearly see that step 4 happens before step 3. In fact, "Rebuilding kernel with initramfs" is the very last step of the build. "boot-wrapper-aarch64 Installing to images directory" happened much earlier.
(Side note: the error is far more catastrophic than a simple "couldn't find root filesystem" panic; it looks like big chunks of the kernel's data section are zeroed, so that kernel messages aren't even logged, to say nothing of no serial output. I don't know why this is.)
A workaround is to remember to manually "make boot-wrapper-aarch64-rebuild" after a regular build has completed.
What's the real solution? Thanks!
Signature · 2 lines
Hollis Blanchard Mentor Graphics Emulation Division
Hollis,
Quoted 4 lines · Hollis Blanchard
I have a BR config that includes the following:
BR2_LINUX_KERNEL=y
BR2_TARGET_ROOTFS_INITRAMFS=y
BR2_TARGET_BOOT_WRAPPER_AARCH64=y
Yes, this is not working right now.
Quoted 17 lines
I expect that Buildroot will:
1. build the kernel
2. build rootfs.cpio
3. link rootfs.cpio into the kernel as an initrd
4. run boot-wrapper-aarch64 on the kernel+initrdWhen I do a build, however, I can clearly see that step 4 happens before step 3. In fact, "Rebuilding kernel with initramfs" is the very last step of the build. "boot-wrapper-aarch64 Installing to images directory" happened much earlier.
(Side note: the error is far more catastrophic than a simple "couldn't find root filesystem" panic; it looks like big chunks of the kernel's data section are zeroed, so that kernel messages aren't even logged, to say nothing of no serial output. I don't know why this is.)
Quoted 4 lines
A workaround is to remember to manually "make boot-wrapper-aarch64-rebuild" after a regular build has completed.
What's the real solution? Thanks!
See http://lists.busybox.net/pipermail/buildroot/2014-July/101052.html
for a possible solution. I remember we discussed this patch during the Buildroot Summer camp, but I thought we had sent some comments for Jeremy to improve the patch. But it seems it wasn't done. Arnout, do you remember the conclusion of our discussion?
I must say I'm not thrilled by making such major changes to Buildroot just for the sake of this very specific use-case. But we probably don't have much choice.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas Petazzoni <[email protected]> writes:
Hi,
Quoted 9 lines
See http://lists.busybox.net/pipermail/buildroot/2014-July/101052.html
for a possible solution. I remember we discussed this patch during the Buildroot Summer camp, but I thought we had sent some comments for Jeremy to improve the patch. But it seems it wasn't done. Arnout, do you remember the conclusion of our discussion?I must say I'm not thrilled by making such major changes to Buildroot just for the sake of this very specific use-case. But we probably don't have much choice.
I don't know any details of this boot wrapper, but perhaps we could change the package to only build the host tool and simply ask people to write a post-image script to invoke it with the correct arguments once the build is completely done, similar to what we do for other custom "post processing" tasks?
Signature · 1 line
Bye, Peter Korsgaard
Dear Peter Korsgaard,
Quoted 9 lines · Peter Korsgaard
Quoted 3 lines
I must say I'm not thrilled by making such major changes to Buildroot just for the sake of this very specific use-case. But we probably don't have much choice.
I don't know any details of this boot wrapper, but perhaps we could change the package to only build the host tool and simply ask people to write a post-image script to invoke it with the correct arguments once the build is completely done, similar to what we do for other custom "post processing" tasks?
Doesn't work: the kernel image is *linked* into the boot wrapper. So really, it's not just a post-processing tool, you need the kernel image to build the wrapper.
Best regards,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
[Adding Jeremy Kerr in CC - he's the author of
http://patchwork.ozlabs.org/patch/366549/ ]
Quoted 9 lines · Thomas Petazzoni
Hollis,
Quoted 4 lines · Hollis Blanchard
I have a BR config that includes the following:
BR2_LINUX_KERNEL=y
BR2_TARGET_ROOTFS_INITRAMFS=y
BR2_TARGET_BOOT_WRAPPER_AARCH64=yYes, this is not working right now.
[snip]
Quoted 7 lines
Quoted 1 line
What's the real solution? Thanks!
See http://lists.busybox.net/pipermail/buildroot/2014-July/101052.html
for a possible solution. I remember we discussed this patch during the Buildroot Summer camp, but I thought we had sent some comments for Jeremy to improve the patch. But it seems it wasn't done. Arnout, do you remember the conclusion of our discussion?
I did send it:
http://lists.busybox.net/pipermail/buildroot/2015-July/132686.html
(mailmain/pipermail threading sucks)
TL;DR:
It was a long discussion, mainly because it doesn't really solve the problem
(which BTW is mainly in the approach we take for linux-with-initramfs - that's just a huge hack).
That said, we basically agree with the approach. So if you're stilling willing
to do it, please post a full series including the change to boot-wrapper-aarch64, taking into account the comments below. We've marked this patch as Changes Requested in patchwork.
_However_, I may have an idea for an alternative approach that confines the
hack to boot-wrapper-aarch64 itself. The following may work:
boot-wrapper-aarch64-rebuild-with-initramfs: linux-rebuild-with-initramfs
$(TARGET_MAKE_ENV) $(MAKE) -C $(BOOT_WRAPPER_AARCH64_SRCDIR) cp $(BOOT_WRAPPER_AARCH64_SRCDIR)/linux-system.axf $(BINARIES_DIR)
ROOTFS_INITRAMFS_POST_TARGETS += boot-wrapper-aarch64-rebuild-with-initramfs
I.e., rerun the build and install commands as part of the rootfs-initramfs build step. Note that no conditions are needed, since this target will anyway only come into play when rootfs-initramfs is built.
Can someone give that a try and post a patch?
Regards,
Arnout
Quoted 7 lines
I must say I'm not thrilled by making such major changes to Buildroot just for the sake of this very specific use-case. But we probably don't have much choice.
Thomas
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF