FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LiteXによるSoC環境構築を試行する (7. Linuxをブートするためのコマンドラインオプションの調査)

https://raw.githubusercontent.com/enjoy-digital/litex/master/doc/litex.png

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

これでコンパイルして動作を確認してみる。