I’ve detailed several of my adventures getting a Pi3 to boot NixOS from a compressed BTRFS subvolume, and now I’m working on doing the same for a Pi4.
By default, using the default NixOS kernel (not the RPi kernel), it hangs at
looking for /dev/disk/by-label/NIXOS. I figured out a few missing kernel modules that allow the boot process to succeed.
Unfortunately, using that process, some of the Pi-specific stuff like missing, for example
/dev/gpiomem doesn’t exist, which I use for home automation purposes. I presume using the Pi4 kernel should fix this.
Unfortunately, when I go back to using the pi4 kernel, I go back to being unable to boot from my USB drive (fails at the same point as above
looking for /dev/disk/by-label/NIXOS, even with the kernel modules from above included).
I even tried importing
all-hardware.nix to see if there were other kernel modules that could be needed (requiring this workaround), but with the pi4 kernel it still fails to find
/dev/disk/by-label/NIXOS and therefore fails to boot. It seems to be finding and reading things from the
@boot subvolume, so at least that is working.
So I’m in a bit of a predicament. I guess I’d rather use the stock kernel if anyone knows how I can get
/dev/gpiomem to appear on a Pi4. But if that’s not feasible (or requires rebuilding the kernel every upgrade which would be a bit of a pain), I’m wondering if anyone has any ideas why the Pi kernel is having trouble booting from a compressed BTRFS subvolume, since I’m able to do so from Raspbian.
Perhaps I need to use the raspi bootloader and specify the
initrd in config.txt? Currently using a slightly customized u-boot to get the BTRFS and ZSTD support.