ニュース

Linux 6.12がESP32-S31で起動:推測だらけのRISC-Vポート

独立系開発者がEspressifのESP32-S31(非標準のスーパーバイザモードと公式TRMを持たないRISC-V MCU)でLinux 6.12を動作させた。このポートはCLICパッチ、フラッシュ内XIP、そして多くのプロービングに依存している。

August 1, 2026· 1 min read· 出典: GitHub
Linux 6.12がESP32-S31で起動:推測だらけのRISC-Vポート

マイクロコントローラでのLinuxは通常、パーティトリックに過ぎないが、これは違う。GrieferPigはLinux 6.12をEspressifの最新RISC-VパーツであるESP32-S31に移植し、ブートログにはシェル、CoreMark、そしてカーネルから見える15 MBのRAMを備えた本物のユーザースペースが表示されている。問題は、S31のアーキテクチャがRV32IMAFBCNSUXであり、そのスーパーバイザモードは標準とは程遠いことだ。

このポートはESP32-S31-WROOM-3モジュールを対象とし、OpenSBIを備えたメインラインカーネルを起動する。チップのTRMが当時入手できなかったため、開発者はP4のTRMとCSRプロービングに基づいて推測を行った。それは変な仕様のセクションに表れている:S31はLinuxが期待するPLICの代わりにCLICとCLINTを使用し、標準のRISC-V割り込みCSRはmtvec.MODEがCLICモードにハードワイヤされているため使用できない。litex-hub PRから借用したカスタムCLICドライバが割り込みを機能させている。

スーパーバイザモードはさらに奇妙だ。S31はSCLICと呼ばれるものを実装しているが、これはどこにも標準化されていない。開発者は、ESP-IDFのドキュメントがそうでないと述べているにもかかわらずmcliccfg.NMBITSが書き込み可能であることを発見し、それを0b01に設定するとSモードの割り込み設定が解放される。これは、データシートなしでハードウェアをいじっているときにしか起こらない発見だ。

メモリは逼迫している:チップには16 MBのPSRAMがあり、それを節約するために、OpenSBIはフラッシュと内部SRAMからXIPで実行される。だからバナー内のファームウェアサイズが奇妙な3.9 GBになっているのだ—フラッシュとSRAMのマッピングは連続していない。メインラインLinuxはRISC-V XIPサポートを削除したため、このポートはそれを備えた最後のバージョンである6.12を使用している。

ドライバステータステーブルはほとんどが黄色だ。UART、GPIO、イーサネット、SDMMC、キャッシュドライバは未テスト;USB、タイマー、クロックツリー、セキュリティアクセラレータはWIP;I2C、I2S、SPI、RMT、LPサブシステムは未実装。デュアルハートSMPは、FreeRTOSが2番目のコアを所有しているため計画されていない。ブートログは、rv32imafcとMMUを備えた単一ハートが、15 MBの空き容量でシェルを実行していることを示している。

CoreMarkはGCC 15.2で-O2を使用して毎秒1058回の反復を記録している。これは自慢できるベンチマークではないが、Espressifが実行することを意図したことのないチップ上での完全なLinuxユーザースペースだ。

esp-idfのすべての法則によれば、mcliccfg.NMBITSは書き込み可能ではない。書き込み可能なのだ!
Manul X 編集部
ESP32-S31 Linuxポートのドライバステータス
比較
機能ステータス
UART0コンソール未テスト
GPIO未テスト
GMACイーサネット未テスト
SDMMC未テスト
USBWIP
タイマーWIP
クロックツリーWIP
セキュリティアクセラレータWIP
I2C未実装
I2S未実装
SPI未実装
RMT未実装
LPサブシステム & IPC未実装
PMP/APM未実装(適切には)
デュアルハートSMP計画なし