2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RISC-V QEMU + busyboxでlinuxをブートさせる

Last updated at Posted at 2023-01-02

やりたいこと

64bit RISC-VプロセッサをエミュレートするQEMU上でlinuxをブートさせたい。ユーザーランドは最低限のbusybox環境で済ます。とりあえず記憶と他サイトの記述から抜粋してメモ書き。細かいところは間違っているかもしれないので後で更新する。

環境

  • Ubuntu 22.04LTS
  • QEMU 6.2.0
  • linux kernel v5.8
  • busybox (マスター使っちゃった)

手順

1. クロスコンパイル用のツールを準備

https://toolchains.bootlin.com/ からarch = riscv64、libc = glibc を選択してダウンロード、展開。パスを通す。その他の方法でも良い。

2. linuxカーネルのビルド

% git clone --depth=1 -b v5.8 https://github.com/torvalds/linux
% cd linux
% make ARCH=riscv CROSS_COMPILE=riscv64-linux- defconfig
% make ARCH=riscv CROSS_COMPILE=riscv64-linux- menuconfig
% make ARCH=riscv CROSS_COMPILE=riscv64-linux- all

3. busyboxのビルド

% cd ..
% git clone https://git.busybox.net/busybox
% cd busybox
% make CROSS_COMPILE=riscv64-linux- defconfig
% make CROSS_COMPILE=riscv64-linux- menuconfig

menuconfigにおいて、以下のオプションのオンにしてstatic binaryを生成する。

Settings
  Build Options
    [*] Build static binary (no shared libs) 

ビルドとインストール。

% make CROSS_COMPILE=riscv64-linux- all
% make CROSS_COMPILE=riscv64-linux- install

4. ルートファイルシステムの作成

% cd ..
% dd if=/dev/zero of=root.bin bs=1M count=64
% mkfs.ext2 -F root.bin
% mkdir mnt
% sudo mount -o loop root.bin mnt
% sudo cp -r busybox/_install/* mnt/
% cd mnt
% sudo mkdir dev etc proc run sys
% cd dev
% sudo cp -a /dev/console .
% sudo cp -a /dev/tty[0-4] .
% cd ../..
% sudo umount mnt

5. QEMU導入と起動

QEMUはapt-getで入れた。

% qemu-system-riscv64 -M virt -nographic -kernel linux/arch/riscv/boot/Image -append "root=/dev/vda rw console=ttyS0" -drive file=root.bin,format=raw,id=hd0 -device virtio-blk-device,drive=hd0

参考にしたサイト

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?