Tin tức

Linux 6.12 khởi động trên ESP32-S31: một bản port RISC-V đầy phỏng đoán

Một nhà phát triển độc lập đã chạy Linux 6.12 trên ESP32-S31 của Espressif, một vi điều khiển RISC-V với chế độ supervisor không chuẩn và không có TRM chính thức. Bản port dựa vào các bản vá CLIC, XIP trong flash, và rất nhiều thử nghiệm.

August 1, 2026· 3 min read· Nguồn: GitHub
Linux 6.12 khởi động trên ESP32-S31: một bản port RISC-V đầy phỏng đoán

Linux trên vi điều khiển thường chỉ là trò vui, nhưng lần này thì khác. GrieferPig đã port Linux 6.12 lên ESP32-S31, sản phẩm RISC-V mới nhất của Espressif, và nhật ký khởi động cho thấy một userspace thực sự với shell, CoreMark, và 15 MB RAM hiển thị cho kernel. Vấn đề: kiến trúc của S31 là RV32IMAFBCNSUX, và chế độ supervisor của nó không hề chuẩn.

Bản port nhắm đến module ESP32-S31-WROOM-3 và khởi động kernel mainline với OpenSBI. Vì TRM của chip không có sẵn vào thời điểm đó, nhà phát triển đã đưa ra các phỏng đoán có cơ sở dựa trên TRM của P4 và thử nghiệm CSR. Điều đó thể hiện trong phần quirks: S31 dùng CLIC và CLINT thay vì PLIC mà Linux mong đợi, và các CSR ngắt RISC-V tiêu chuẩn không dùng được vì mtvec.MODE bị hardwire sang chế độ CLIC. Một driver CLIC tùy chỉnh, mượn từ một PR của litex-hub, giúp ngắt hoạt động.

Chế độ supervisor còn kỳ lạ hơn. S31 triển khai thứ gọi là SCLIC, không được chuẩn hóa ở bất kỳ đâu. Nhà phát triển phát hiện rằng mcliccfg.NMBITS có thể ghi được dù tài liệu ESP-IDF nói ngược lại, và đặt nó thành 0b01 mở khóa cấu hình ngắt S-mode. Đó là kiểu khám phá chỉ xảy ra khi bạn mò mẫm phần cứng mà không có datasheet.

Bộ nhớ eo hẹp: chip có 16 MB PSRAM, và để tiết kiệm, OpenSBI chạy XIP từ flash và SRAM nội bộ. Đó là lý do kích thước firmware trong banner là 3.9 GB kỳ lạ—ánh xạ flash và SRAM không liền mạch. Mainline Linux đã bỏ hỗ trợ XIP RISC-V, nên bản port dùng 6.12, phiên bản cuối cùng có nó.

Bảng trạng thái driver chủ yếu màu vàng. UART, GPIO, Ethernet, SDMMC, và driver cache chưa được kiểm tra; USB, timer, cây clock, và tăng tốc bảo mật đang WIP; I2C, I2S, SPI, RMT, và hệ thống LP chưa được triển khai. SMP hai lõi không được lên kế hoạch vì FreeRTOS giữ lõi thứ hai. Nhật ký khởi động cho thấy một hart duy nhất với rv32imafc và MMU, chạy shell với 15 MB trống.

CoreMark đạt 1058 vòng lặp mỗi giây với GCC 15.2 ở -O2. Đó không phải benchmark đáng khoe, nhưng đó là userspace Linux đầy đủ trên một chip mà Espressif chưa bao giờ định chạy nó.

Theo mọi quy luật của esp-idf, mcliccfg.NMBITS không thể ghi. NHƯNG NÓ CÓ THỂ GHI!
Ban biên tập Manul X
Trạng thái driver của bản port Linux ESP32-S31
So sánh nhanh
Tính năngTrạng thái
Console UART0Chưa kiểm tra
GPIOChưa kiểm tra
GMAC EthernetChưa kiểm tra
SDMMCChưa kiểm tra
USBĐang phát triển
TimerĐang phát triển
Cây clockĐang phát triển
Tăng tốc bảo mậtĐang phát triển
I2CChưa triển khai
I2SChưa triển khai
SPIChưa triển khai
RMTChưa triển khai
Hệ thống LP & IPCChưa triển khai
PMP/APMChưa triển khai (đúng cách)
SMP hai lõiKhông lên kế hoạch