Commit Graph

16 Commits (c5f41a4e5ef7524c3182630290bbd27de59ec6b6)

Author SHA1 Message Date
Dustin c5f41a4e5e Begin persistent storage implementation
Aimee OS/aimee-os/pipeline/head This commit looks good Details
Most of the logic in the `init-storage` script is the same as it was in
Aimee OS v1 (Gentoo).  The major difference is now we are initializing
the data volume in the initramfs instead of in the real OS.  This allows
us to make all of `/etc` writable via OverlayFS, instead of having only
certain sub-directories writable via bind-mounts.

Buildroot doesn't really have any tools for building an initramfs,
unfortunately.  It does have a bit of infrastructure for running
`dracut`, but I'd really rather avoid having that much complexity in the
initramfs; all we need is to run the `init-storage` script and then
switch root.  Instead, the `mkinitramfs.sh` script, called in the
post-build stage, creates the CPIO archive from files in the target
directory.  The only particularly interesting bit is how it resolves
shared library dependencies, to make sure the appropriate resources are
available for the requisite commands.

I briefly considered building a statically-linked BusyBox just for the
initramfs.  Since it doesn't provide several important tools like
`btrfs`/`mkfs.btrfs`, I had to implement the dynamic link resolution
function anyway.  It made sense, then, to copy Dash and the necessary
Coreutils binaries themselves.
2025-08-28 21:51:42 -05:00
Dustin 145cca736f configs/qemu: Enable debug shell on ttyAMA0
We set the default kernel command-line arguments to tell systemd to
spawn a debug shell on the serial console, instead of the default getty.
This will allow tests to run commands directly on the console, without
any authentication, etc.
2025-08-28 21:47:39 -05:00
Dustin 973f62a654 grub2: Support setting rootflags in config
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.
2025-08-28 21:47:39 -05:00
Dustin cf053ee85c ci: Add CUSTOM_TARGET parameter
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.
2025-08-28 21:47:39 -05:00
Dustin 0b535a2732 boot/grub2: Set terminfo dumb
GRUB seems to have trouble with line drawing on both the Raspberry Pi
and QEMU.
2025-08-28 21:47:39 -05:00
Dustin b67f050532 configs/*: Install GRUB terminfo module
So we can set `terminfo dumb` and hopefully get better output over the
serial console.
2025-08-28 21:47:39 -05:00
Dustin 7f3c9ffe5b gen-grub-cfg: Support different kernel file names
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.
2025-08-28 21:47:39 -05:00
Dustin 9562b7f9fd board/qemu: Generate sdcard.img with post-image
In order to test AimeeOS A/B filesystem updates, we need a full disk
image just like the Raspberry Pi variant has.
2025-08-28 21:47:39 -05:00
Dustin 2d05c3a5f1 wip: ci: Add Jenkins pipeline 2025-08-28 21:47:26 -05:00
Dustin 841b64bac2 configs: Add QEMU aarch64 config for testing 2025-08-28 21:47:24 -05:00
Dustin fbf22908eb board/rpi3: Enable UART console
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.
2025-08-20 06:57:20 -05:00
Dustin c0f8beb49a board/rpi3: post-image: Create grubenv BEFORE image
We obviously have to create the `grubenv` file before running
`genimage`, or it will not be included in the image.
2025-08-19 08:59:09 -05:00
Dustin 4c947bde8a config: rpi: Enable host OpenSSL/GnuTLS for uboot
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.
2025-08-18 19:23:39 -05:00
Dustin 7f4d8d4e49 configs/rpi3: Bump kernel version to match upstream
We have to keep the kernel version in sync with Buildroot upstream, or
downloading will fail because they do not keep old checksum values.
2025-08-18 18:11:08 -05:00
Dustin 9dae022788 First working revision
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.
2025-08-17 16:01:40 -05:00
Dustin e267f82db1 Initial commit 2025-08-17 10:30:19 -05:00