Generic rootfs: http://resources.crux-arm.nu/releases/3.5/crux-arm-rootfs-3.5-wifi.tar.xz http://resources.crux-arm.nu/releases/3.5/crux-arm-rootfs-3.5-wifi.tar.xz.md5 Cross-compile toolchain: https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz Installed the toolchain to /opt/toolchains. Added /opt/toolchains/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin to $PATH. Cross-compiled the kernel: mkdir -p target/boot git clone -b rpi-4.19.y --depth 1 https://github.com/raspberrypi/linux rpi4-kernel cd rpi4-kernel make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig make -j$(nproc) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=~/rpi4/target modules_install cp -v arch/arm64/boot/Image ../target/boot/kernel8.img cp -v arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb ../target/boot/ cp -av arch/arm64/boot/dts/overlays/ ../target/boot/ cp -v Module.symvers System.map ../target/boot/ uSD card formatted like so: Disk /dev/sdb: 29.83 GiB, 32010928128 bytes, 62521344 sectors Disk model: microSD RDR Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x565d8b1c Device Boot Start End Sectors Size Id Type /dev/sdb1 * 2048 264191 262144 128M c W95 FAT32 (LBA) /dev/sdb2 264192 62521343 62257152 29.7G 83 Linux Created and mounted filesystems: sudo mkfs.vfat -F 32 /dev/sdb1 sudo mkfs.ext4 -L / -m 1 /dev/sdb2 sudo mount /dev/sdb2 /media/usb sudo mkdir /media/usb/boot sudo mount /dev/sdb1 /media/usb/boot Uncompressed the generic rootfs to the uSD card: sudo bsdtar -C /media/usb -xf crux-arm-rootfs-3.5-wifi.tar.xz Cloned the firmware repo: git clone --depth 1 https://github.com/raspberrypi/firmware sudo cp -r firmware/boot/* /media/usb/boot Copied the kernel, modules, dtb: sudo cp -av target/* /media/usb/ Added cmdline.txt and config.txt: $ cat /media/usb/boot/config.txt arm_64bit=1 disable_overscan=1 dtoverlay=vc4-fkms-v3d dtparam=audio=on gpu_mem=128 hdmi_drive=2 $ cat /media/usb/boot/cmdline.txt root=/dev/mmcblk0p2 rootfstype=ext4 rootwait quiet Edited /media/usb/etc/{fstab,rc.conf} appropriately