LiteXのBIOS立ち上げ環境を、独自のRTLシミュレーション環境に移植したくて、メモしておく。
基本的に、LiteXをダウンロードしたときに登場するlitex/litex/soc/software/
を丸ごと別ディレクトリに移動することになる。
さらに、ライブラリを作成するの、pythondata-software-picolibc
とpythondata-software-compiler_rt
もコピーしておく。
LiteXのCPU環境構築用に作った、以下のファイルもすべて移動しておく。
boot-helper.S crt0.S csr-defs.h irq.h system.h
基本的にはsoftware
ディレクトリでvariables.mak
をいじって、例えばリポジトリ管理をしているならばそこの絶対パスに置き換えるような処置をしておけばOK。これで、各ソフトウェアを順番にビルドしていけばよい。
REPO_BASE_DIR=$(shell git rev-parse --show-superproject-working-tree --show-toplevel | head -1) PACKAGES=libc libcompiler_rt libbase libfatfs liblitespi liblitedram libliteeth liblitesdcard liblitesata bios PACKAGE_DIRS=$(REPO_BASE_DIR)/tests/litex_soc/software/libc $(REPO_BASE_DIR)/tests/litex_soc/software/libcompiler_rt $(REPO_BASE_DIR)/tests/litex_soc/software/libbase $(REPO_BASE_DIR)/tests/litex_soc/software/libfatfs $(REPO_BASE_DIR)/tests/litex_soc/software/liblitespi $(REPO_BASE_DIR)/tests/litex_soc/software/liblitedram $(REPO_BASE_DIR)/tests/litex_soc/software/libliteeth $(REPO_BASE_DIR)/tests/litex_soc/software/liblitesdcard $(REPO_BASE_DIR)/tests/litex_soc/software/liblitesata $(REPO_BASE_DIR)/tests/litex_soc/software/bios LIBS=libc libcompiler_rt libbase libfatfs liblitespi liblitedram libliteeth liblitesdcard liblitesata TRIPLE=riscv64-unknown-elf CPU=mycpu CPUFAMILY=riscv CPUFLAGS=-march=rv64i2p0_m -mabi=lp64 -D__mycpu__ CPUENDIANNESS=little CLANG=0 CPU_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/mycpu SOC_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/ PICOLIBC_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/pythondata_software_picolibc/data PICOLIBC_FORMAT=integer COMPILER_RT_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/pythondata_software_compiler_rt/data export BUILDINC_DIRECTORY BUILDINC_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/include LIBC_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/libc LIBCOMPILER_RT_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/libcompiler_rt LIBBASE_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/libbase LIBFATFS_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/libfatfs LIBLITESPI_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/liblitespi LIBLITEDRAM_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/liblitedram LIBLITEETH_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/libliteeth LIBLITESDCARD_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/liblitesdcard LIBLITESATA_DIRECTORY=$(REPO_BASE_DIR)/tests/litex_soc/software/liblitesata BIOS_DIRECTORY=$(abspath $(REPO_BASE_DIR)/tests/litex_soc/software/bios) LTO=0 BIOS_CONSOLE_FULL=1
このようなMakefile
を作成して、一気通貫でビルドができるようにしておく。
all: $(MAKE) -C libbase # $(MAKE) -C libc $(MAKE) -C libcompiler_rt $(MAKE) -C libfatfs $(MAKE) -C liblitedram $(MAKE) -C libliteeth $(MAKE) -C liblitesata $(MAKE) -C liblitesdcard $(MAKE) -C liblitespi $(MAKE) -C bios clean: $(MAKE) clean -C libbase # $(MAKE) clean -C libc $(MAKE) clean -C libcompiler_rt $(MAKE) clean -C libfatfs $(MAKE) clean -C liblitedram $(MAKE) clean -C libliteeth $(MAKE) clean -C liblitesata $(MAKE) clean -C liblitesdcard $(MAKE) clean -C liblitespi $(MAKE) clean -C bios
で、作成されたbios.elf
を流してみればよいのだが、Spikeではデフォルトで動作しない。これはなんでだっけ?dtsの書き換えとか必要だったっけ。
spike -l -m0x0:0x1000 ../tests/litex_soc/software/bios/bios.elf
Access exception occurred while loading payload ../tests/litex_soc/software/bios/bios.elf: Memory address 0x0 is invalid