EspressifのESP32-S31は、Linuxとの親和性が際立つ機能を備えたマイクロコントローラです。320 MHzのRISC-Vコアを2基、512 KBのオンチップSRAM、最大64 MBの外付けPSRAM、ギガビットEthernet、USB 2.0ホスト対応、SDスロットを2基、さらにカメラおよびディスプレイ用インターフェースを備えています。この組み合わせがRaspberry Piとの比較を生む理由ですが、このチップは一般的なシングルボードコンピュータと比べると、はるかに小規模で制約も大きくなっています。

RISC-Vコア、メモリ、Ethernet、USB、SD、カメラ、ディスプレイ接続を示すESP32-S31のブロック図
ESP32-S31は、Linux向けのインターフェースと、厳しく制限されたオンチップメモリを組み合わせています。www.xda-developers.com

ハードウェアのブロック図は、2基のRISC-Vコア、SRAM、PSRAM、Ethernet、USB、ストレージ、カメラ、ディスプレイ用インターフェースを1つの図にまとめ、Raspberry Piとの比較がなぜ成り立つのかを明確にしています。

重要なのは、仮想アドレスをページテーブルを使って変換し、別々の特権レベルを可能にするメモリ管理ユニット(MMU)です。S31はRISC-VのSv32という2段階ページング方式に加え、マシンモード、スーパーバイザモード、ユーザーモードを実装しています。平易に言えば、Linuxをスーパーバイザモードで動かし、アプリケーションをユーザーモードで分離して実行し、より低レベルのファームウェアにはマシンレベルの制御を維持させることができます。

ESP32-S31のユーザープロセス、Linux、Sv32ページテーブル、OpenSBIファームウェアの階層
Sv32ページングは、アプリケーション、Linux、下位層のファームウェアを別々の特権レイヤーに分離します。www.xda-developers.com

この階層図は、ユーザープロセス、Linuxカーネル、OpenSBIファームウェアが、Sv32のアドレス変換経路を共有しながら、それぞれ別の特権モードを使用する方法を示しています。

ESP32の共有メモリマッピングとESP32-S31の2段階Sv32ページングの比較
S31は、単一の共有メモリマップを、2段階のSv32仮想アドレス変換に置き換えています。www.xda-developers.com

この比較は、Linux対応を可能にしたアーキテクチャ上の変更点を示しています。Espressifの従来設計で使われていた単一のメモリマップに代わり、別々のページテーブル階層が採用されています。

EspressifのLinuxボードサポートパッケージ(BSP)は、ハードウェア固有のカーネル、ブートローダ、デバイスツリー、ルートファイルシステム部品をフラッシュイメージにまとめたものです。リポジトリによると、ESP32-S31向けブランチは評価用の開発者プレビューであり、本番環境には推奨されていません。別のコミュニティ移植版では、Linux 6.18がネイティブに起動し、Buildrootによるルートファイルシステムとコンソールは安定している一方、Ethernet、USB、ワイヤレス、ストレージなど多くの周辺機器は実験的な対応にとどまると報告されています。

中心的なトレードオフはメモリです。この記事では、16 MBまたは32 MBのパッケージ内PSRAMバリアントと、64 MBという上限が紹介されており、例として挙げたMilk-V Duo Sの512 MBとは対照的です。PSRAMが限られるため、コミュニティ移植版ではLinuxの実行コードをフラッシュから実行し、書き込み可能な状態はRAMに保持します。その結果、端末用途や組み込み実験には利用できますが、通常のデスクトップを動かす余裕はなく、本番機器に使えるほどまだ信頼性も高くありません。