Skip to contentSkip to conversation

bootwrapper runs before linking initrd

Buildroot Hollis Blanchard 4 participants 5 messages Sep 3, 2015 – Sep 4, 2015

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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+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.)

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
#2 lore raw
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
#3 lore raw

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
#4 lore raw
In reply to Thomas Petazzoni

[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=y

Yes, 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