The `AIMEEOS_DEFAULT_ROOTFLAGS` kconfig option can be used to set the
default value for the `rootflags` GRUB2 environment variable. The value
of this variable will be passed along as command-line arguments to
whatever kernel is chosen at boot.
Since post-image scripts do not have access to kconfig option values, we
need to build the GRUB2 environment file in the
`GRUB2_INSTALL_IMAGES_CMDS` script fragment instead.
If a value is provided for the `CUSTOM_TARGET` parameter, the specified
target will be built first, before building the filesystem images. This
provides a way to e.g. rebuild a specific package.
Different architectures and/or configurations can use a different name
for the Linux kernel image file. The `gen-grub-cfg.sh` shell script
needs to be able to identify the correct file name in the GRUB
configuration fragment it embeds in the root filesystem image.
U-Boot will not boot without the primary UART console enabled; the Pi
just hangs at the rainbow splash screen. There are three ways to enable
a UART console, but disabling Bluetooth is usually the best, as the
others have performance implications. Applications that need Bluetooth
will have to choose one of the other options, depending on their
specific requirements.
The default U-Boot configuration tries to build tools that depend on
OpenSSL _and_ GnuTLS. We need to enable the corresponding buildroot
configuration options, or the build system will try to use the
system-wide headers and libraries.
At this point, we can generate an SD card image that is composed of an
EFI system partition, a SquashFS root partition (a), a blank root
partition (b), and a data partition. On the EFI system partition are
the Raspberry Pi firmware and device trees, U-Boot and GRUB. The
SquashFS filesystem contains the kernel and the whole filesystem tree.
A Raspberry Pi can successfully boot from an SD card containing this
image. It's not quite usable yet, because there's no writable storage
available, or indeed any way to log in.