Files
LithosAnanake/boards/milkv
rajamesandJunie a8b70e88d3 Reorganize source tree: kernel/, v3/, v4/ split and board infrastructure
Source tree reorganization:
- Move StarForth v3 engine to v3/ (src/, include/, Makefile)
- Move kernel to kernel/ (src/, include/, linker/, Makefile)
- Create v4/ skeleton for F18-ISA golden model (DECOMPOSITION.md, JUSTIFICATION.md)
- Move FABRIC-0..4.md to docs/fabric/
- Move ONTOLOGY.md and ROADMAP.md to docs/

Board infrastructure:
- Add boards/ser5/, boards/raspi/, boards/milkv/, boards/zynq7020/
- Each board has board.mk (ISA, CPU flags, boot recipe) and README.md
- Root Makefile becomes thin dispatcher: boot_image, all, clean, docs take TARGET
- make boot_image TARGET=SER5|RASPI|MILKV builds one GPT/MBR image per board
- ZYNQ7020 target exists but stops with clear error (ARMv7 port not built yet)
- scripts/mkdiskimage.sh builds disk images for all boards

Docs pipeline:
- docs/book/ with LaTeX master (main.tex) and Makefile
- pandoc converts Markdown to LaTeX at build time
- Two Lua filters: table-widths.lua (wide tables wrap), code-breaks.lua (inline code breaks)
- make docs builds single PDF (754 pages, 0 missing characters)
- make docs TARGET=<board> adds board appendix
- build/docs/<book|board>/meta.tex stamps git commit into PDF

Bug fixes:
- 42 include paths that only worked by accident now use correct relative paths
- clang-18 hardcode replaced with configurable CC variable (fixed aarch64 build)
- Pi 5: kernel_2712.img linked at 0x80000, .bss zeroed, memory reserved
- Doxyfile, .clang-tidy, README.md, Kconfig paths updated

Verified:
- Hosted v3 build passes 1012 tests, 0 failures
- SER5 image boots in QEMU (OVMF), POST passes, K exact (65536 = Q48_ONE)
- Milk-V image boots in QEMU (OpenSBI + U-Boot + bootefi), POST passes
- make clean TARGET=<board> removes only that board and its ISA objects
- make all builds all boards, hosted v3, and docs in one run

Co-authored-by: Junie <junie@jetbrains.com>
2026-10-01 15:40:09 -04:00
..

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