# Milk-V Mars boot media `make boot_image TARGET=MILKV` builds `build/boards/milkv/lithos-milkv.img`: a GPT disk with one FAT32 EFI System Partition. Write it to an SD card with `dd`. The partition holds: - `EFI/BOOT/BOOTRISCV64.EFI`: the riscv64 monolithic loader, the same one QEMU boots. - `startup.nsh`: for a UEFI shell, if one is used. - `starforth.cfg`: only present when `KERNEL_ARGS="..."` is given. The board's own SPI-flash U-Boot, with OpenSBI underneath, finds the loader through its standard `bootefi` scan of the removable-media path. U-Boot passes its devicetree to the loader through the EFI configuration table. Status: booted in QEMU through the same chain the board uses: OpenSBI, then U-Boot `qemu-riscv64_smode`, then `bootefi` from this image's ESP, then the loader and the kernel. POST passed, Stadium conservation was exact (resident 43691 + reservoir 21845 = 65536 = `Q48_ONE`), and Hestia and Artemis came up. Not yet booted on the Mars itself. The JH7110 peripherals (framebuffer, RNG) have only been checked by compiling. To repeat the QEMU boot (`qemu-system-riscv64` is in Ubuntu 26.04's `qemu-system-riscv` package; OpenSBI and U-Boot come from `opensbi` and `u-boot-qemu`). Use a copy, because the kernel writes to its disk: ``` cp build/boards/milkv/lithos-milkv.img /tmp/mv.img qemu-system-riscv64 -machine virt -cpu rv64 -m 2048 -nographic \ -bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_dynamic.bin \ -kernel /usr/lib/u-boot/qemu-riscv64_smode/u-boot.bin \ -drive if=none,format=raw,file=/tmp/mv.img,id=d0 -device virtio-blk-device,drive=d0 ```