以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/04/29/040000より取得しました。


Linux向けにコンパイルしたRISC-VバイナリをSpikeでどうにかして動かす方法を考える

SpikeでLinux向けにコンパイルしたバイナリをどうにかして動かせないかということを試している。

手順としてはこうだ:

  1. ユーザプログラムを riscv64-unknown-linux-gnu-gxxでコンパイルする。
  2. Linuxのイメージと、fw_jump.elf を用意し、Linuxをブートさせる準備をする。
  3. rootfs.cpio を作成し、このなかの rootfs/init に ユーザプログラムを呼び出す支持を挿入しておく。
  4. Spike を立ち上げる。

まず、以下の hello_world.criscv64-unknown-linux-gnu-gcc でコンパイルしておこう。

#include <stdio.h>

int main(int argc, char **argv)
{
  printf("Hello World\n");
  if (argc > 1) {
    printf("%s\n", argv[1]);
  }
  return 0;
}

rootfs.cpioを作成する。

SYSROOT=$(riscv64-unknown-linux-gnu-gcc -print-sysroot)
mkdir -p rootfs/lib
cp $SYSROOT/lib/ld-linux-riscv64-lp64d.so.1 rootfs/lib/
cp $SYSROOT/lib/libc.so.6 rootfs/lib/\ncp $SYSROOT/lib/libm.so.6 rootfs/lib/
mkdir -p rootfs/bin
cp hello_world rootfs/bin

rootfs/init を作成する。

#!/bin/sh

/bin/hello_world
find . | cpio -o --format=newc > ../rootfs.cpio

これで、Spikeを立ち上げてみる。

spike --kernel=Image --initrd=rootfs.cpio fw_jump.elf
OpenSBI v0.9
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name             : ucbbar,spike-bare
Platform Features         : timer,mfdeleg
Platform HART Count       : 1
Firmware Base             : 0x80000000
Firmware Size             : 100 KB
Runtime SBI Version       : 0.2

Domain0 Name              : root
Domain0 Boot HART         : 0
Domain0 HARTs             : 0*
Domain0 Region00          : 0x0000000080000000-0x000000008001ffff ()
Domain0 Region01          : 0x0000000000000000-0xffffffffffffffff (R,W,X)
Domain0 Next Address      : 0x0000000080200000
Domain0 Next Arg1         : 0x0000000082200000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes

Boot HART ID              : 0
Boot HART Domain          : root
Boot HART ISA             : rv64imafdcsu
Boot HART Features        : scounteren,mcounteren,time
Boot HART PMP Count       : 64
Boot HART PMP Granularity : 4
Boot HART PMP Address Bits: 54
Boot HART MHPM Count      : 0
Boot HART MHPM Count      : 0
Boot HART MIDELEG         : 0x0000000000000222
Boot HART MEDELEG         : 0x000000000000b109

うむ、たちあがらんな。要デバッグだ。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/04/29/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14