linux-on-litex-vexriscvのコードを読んで、どのようにLinuxをブートさせればいいのか調査している。
- linux-on-litex-vexriscv/sim.py
class SoCLinux(SoCCore): def __init__(self, init_memories = False, sdram_module = "MT48LC16M16", sdram_data_width = 32, sdram_verbosity = 0): ... # RAM Initialization. ram_init = [] if init_memories: ram_init = get_mem_data("images/boot.json", endianness="little", offset=0x40000000)
つまり、RAM initilizationにより、Linuxブートのための情報を入力している。
boot.json
{ "Image": "0x40000000", "rv32.dtb": "0x40ef0000", "rootfs.cpio": "0x41000000", "opensbi.bin": "0x40f00000" }
これによりSDRAMが初期化され、Linuxブートのための準備が整うらしい。これをそのまま自分の環境に導入してみる。
といっても、とりあえずシミュレーションオプションでboot.json
を指定すればいいだけらしい。
litex_sim --cpu-type=scariv --sdram-init=./images/boot.json
これでコンパイルして動作を確認してみる。