Linux (RISC-V RV32IMA) runs on M5Stack (ESP32;Xtensa LX6). RISC-V emulator is based on https://github.com/cnlohr/mini-rv32ima
Linux (RISC-V RV32IMA) を M5Stack (ESP32;Xtensa LX6) で動かします。RISC-V エミュレータ部分は https://github.com/cnlohr/mini-rv32ima をもとにしています。
Video on YouTube: https://youtu.be/fL6IANjZWvc
- Prepare microSD/microSDHC/(microSDXC). Place
ram.img
andboot.bin
in it's root. Some microSD has compatibility issue, try some cards. Files are available in release page. microSDXC should be okay but not tested. - Compile with PlatformIO in VSCode.
- Burn the firmware.
- Run.
- Show banner.
- Press center button.
- Booting Linux. Wait about 8 minutes.
- Login with
root
without password. You can input with Keyboard FACE or Serial. The shell will appear after 1 minutes.
.
- microSD/microSDHC/microSDXCを用意し、
ram.img
とboot.bin
をルートに配置します。カードによっては互換性の問題があるので、いくつか試してください。これらのファイルはリリースページにあります。microSDXCは利用可能なはずですが、テストされてはいません。 - VSCodeのPlatformIOでコンパイルします。
- ファームウェアを転送します。
- 実行します。
- バナーが表示されます。
- M5Stack本体の中央のボタンを押します。
- 約8分をかけてLinuxが起動します。
root
でログインします。パスワードはありません。文字入力はFACESのキーボードとシリアル通信が利用できます。約1分でシェルが起動します。
boot.img
は、LinuxカーネルとRAMディスクが収められたメモリイメージです。起動時にRAMの先頭へコピーされます。
このイメージはBuildrootによりビルドできます。https://github.com/cnlohr/mini-rv32ima のBuildrootを利用してください。なおカーネルコンフィグで CONFIG_HZ=100
としたほうが実行速度は上がるようです。
- エミュレーションするCPUは、RISC-V RV32IMA : 32ビットの基本命令、乗算命令、アトミック命令
- RAM: RISC-Vマシンとしては16MB。ESP32のハードウェアとしてはSRAM 520KB。
- RAMはSDカード上の16MBのファイルが実態で、SRAM上にキャッシュが確保されています。PSRAMは利用していません(初代M5StackにはPSRAMは実装されていません)。
- キャッシュは1024バイトのブロックを単位として、224個が確保されています。LRU (Least recently used) アルゴリズムでブロックは再利用されます。ブロックのリストは挿入ソートで常にソートされ、二分探索で該当ブロックを探します。ブロックサイズと個数は実測により決定されました。
- 命令フェッチとデータアクセスのたびにキャッシュの検索(と必要ならばSDカードアクセス)が発生するため、非常に遅いです。
- RISC-Vエミュレータの本体は
src/mini-rv32ima.h
で、これはCNLohrによるコードをそのまま利用しています。
MIT License, Refer LICENSE file.
Copyright (c) 2022 verylowfreq