ESP32-S31 上的 Linux (★
101 分)
這個專案將 Linux 6.12 移植到 ESP32-S31 微控制器,利用其 RISC-V 開放指令集架構的 Sv32(32 位元虛擬記憶體分頁機制)與 MMU(記憶體管理單元),在裝置上原生啟動 Linux。系統採用 Buildroot(嵌入式 Linux 根檔案系統建置工具)建立使用者空間,並以 XIP(Execute In Place,直接在快閃記憶體執行程式)降低對 16 MB PSRAM(偽靜態隨機存取記憶體)的需求;修改過的 OpenSBI(RISC-V Supervisor Binary Interface 韌體層)則負責啟動 Linux。
移植過程遭遇不少 S31 特有的硬體細節。Linux 原本預期使用 PLIC(平台層級中斷控制器),但 S31 採用 CLIC(核心本地中斷控制器)與 CLINT(核心本地計時器/軟體中斷控制器),因此作者必須自行撰寫中斷驅動程式,並修正 OpenSBI 的中斷處理。由於移植工作開始時 S31 的 TRM(Technical Reference Manual,技術參考手冊)尚未公開,部分 Supervisor 模式的 CSR(控制與狀態暫存器)用法只能參照 ESP32-P4 或以實測推敲;例如啟用 S 模式中斷所需的 SCLIC 設定,就是靠實驗確認。
目前 Buildroot 根檔案系統、重新啟動、關機與 UART0 序列主控台已列為穩定功能;無線網路、乙太網路、SDMMC、GPIO、額外 UART、快閃記憶體、亂數產生器與多項週邊驅動仍屬實驗性質,USB、時脈與計時器仍在開發,I2C、I2S、SPI 與 RMT 尚未實作。專案刻意不採 SMP(對稱多處理):其中一個核心須配合 ESP-IDF 的 FreeRTOS 執行封閉原始碼的無線電韌體,兩核心的 SIMD 能力也不完全相同,且共用的小型快取與較慢 PSRAM 會帶來排程、快取維護與核心間通訊的額外成本。作者明確定位這是硬體啟動與驗證用途,不適合產品部署;若追求效能,低階 MPU(微處理器)會是更合適的選擇。
Hacker News 討論的焦點之一,是 ESP32-S31 與沒有真正 MMU 的 ESP32-S3 之差異。有人起初誤以為 S31 的 MMU 只是外部記憶體映射器,後來引用規格後確認它具備 CPU 端的 Sv32 虛擬記憶體,可提供程序隔離、頁面錯誤處理等 Linux 所需能力;這也和 noMMU Linux 不同,後者通常無法正常執行一般 ELF(Executable and Linkable Format,可執行與連結格式)程式,只能倚賴較舊或受限的執行檔格式。另一項爭論是專案是否主要由 AI 代理工具產出:批評者認為大量功能仍標示未測試、文件不足,最多是概念驗證;也有人認為開機紀錄與登入後執行指令足以證明成果,且 AI 可搭配序列埠與 JTAG 除錯器反覆測試。針對作者稱封閉無線電韌體幾乎無法逆向,有留言補充相關逆向研究其實已經出現,但實際整合與法律風險仍是此移植案不採雙核心 Linux 的重要限制。
👥
37 則討論、評論 💬
https://news.ycombinator.com/item?id=49087499