🦔
TinyEMU(RISC-Vエミュレータ)を用いてLinuxを動かす
ESP32でRISC-Vのエミュレータを動かしLinuxを動かす – inajobのいろいろレビューという記事で、ESP32上でLinuxを動かすという内容が紹介されていて知ったTinyEMUというRISC-Vエミュレータを試してみます。
検証環境
- iMac (24-inch, M1, 2021)
- macOS Monterey 12.4
Linux VMの準備
M1 Mac上にLinux環境を作るために、今回はMultipassを用います。
$ brew install --cask multipass
$ multipass version
multipass 1.10.1+mac
multipassd 1.10.1+mac
早速VMを作成してみましょう(リソース指定はもっと少なくても良さそう)。
$ multipass launch --cpus 2 --disk 8G --mem 4G --name tinyemu
Launched: tinyemu
$ multipass list
Name State IPv4 Image
tinyemu Running 192.168.64.2 Ubuntu 20.04 LTS
VMが立ち上がったので、VM内でコマンド(uname -a
)を実行してみます。
$ multipass exec tinyemu -- uname -a
Linux tinyemu 5.4.0-122-generic #138-Ubuntu SMP Wed Jun 22 15:05:39 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
ちゃんと動いているようですね。
TinyEMUの準備
TinyEMUをVM上のLinuxで使えるようにしましょう。まずはVMにログインします。
$ multipass shell tinyemu
以降は、multipassで作成したVM上で進めていきます。
TinyEMUのドキュメントを参考に、依存ライブラリを入れていきます。
$ sudo apt-get install build-essential libssl-dev libcurl4-openssl-dev
SDLについては、Installation - SDL Wikiを参考にソースからビルドして入れます。その際、以下の点に注意しましょう。
- SDL1(参考:SourceCode - SDL Wiki)を使うようにする(TinyEMUがSDL1に依存しているので)
-
/usr/include/SDL
に入るようconfigure
実行時に--prefix /usr
を指定
$ git clone https://github.com/libsdl-org/SDL-1.2.git
$ cd SDL-1.2
$ mkdir build
$ cd build
$ ../configure --prefix /usr
$ make
$ sudo make install
依存ライブラリをインストールできたら、TinyEMUをビルドしましょう。
$ wget https://bellard.org/tinyemu/tinyemu-2019-12-21.tar.gz
$ tar zxvf tinyemu-2019-12-21.tar.gz
$ cd tinyemu-2019-12-21
$ make
カレントディレクトリにtemu
がビルドされていて、実行できるようになればOK。
$ ./temu --help
temu version 2019-12-21, Copyright (c) 2016-2018 Fabrice Bellard
RISC-Vエミュレータ上でLinuxを動かす
TinyEMUのドキュメントの通りにtemu
を実行しましょう。作者によって、JSLinuxのBuildrootが用意されているので、それを使います。
$ ./temu https://bellard.org/jslinux/buildroot-riscv64.cfg
Welcome to JS/Linux (riscv64)
Use 'vflogin username' to connect to your account.
You can create a new account at https://vfsync.org/signup .
Use 'export_file filename' to export a file to your computer.
Imported files are written to the home directory.
[root@localhost ~]#
起動したー!簡単に動きましたね。
uname -a
を実行してみましょう。
[root@localhost ~]# uname -a
Linux localhost 4.15.0-00049-ga3b1e7a-dirty #11 Thu Nov 8 20:30:26 CET 2018 riscv64 GNU/Linux
ちゃんとriscv64
アーキテクチャ上で動いていることが確認できました。
おわりに
Buildrootを用意してあげれば、RISC-Vエミュレータ上で他のものも動かせそうな雰囲気。冒頭に挙げたESP32の話と組み合わせると、夢が広がりますね。
Discussion