GLOBALBYTE / ESP32-S31 / RISC-V / EMBEDDED LINUX
ESP32-S31 รัน Linux ได้จริง? เจาะ RISC-V, MMU และวิธีทดลอง
ไมโครคอนโทรลเลอร์ ESP32 ตัวเล็ก ๆ จะรัน Linux แบบมี Kernel และ User Space ได้จริงหรือ? ข่าวของ Hackaday และ i-programmer ชี้ไปที่ ESP32-S31 ชิปรุ่นใหม่ที่มี Sv32 MMU บน CPU RISC-V ทำให้มี Linux Port ทั้งจาก Espressif และชุมชนนักพัฒนา แต่ยังมีข้อจำกัดมากกว่าคอมพิวเตอร์บอร์ดเดี่ยวทั่วไป
- Linux แบบมี MMU ที่กล่าวถึงนี้เป็นของ ESP32-S31 ไม่ใช่ ESP32-S3 ทุกบอร์ด
- CPU หลักเป็น Dual-core 32-bit RISC-V สูงสุด 320 MHz และรองรับ Sv32 Address Translation
- มีทั้ง Official Linux BSP ของ Espressif และ Community Port ของ GrieferPig / annoyedmilk ซึ่งฟีเจอร์ต่างกัน
- Official BSP ยังอยู่ในสถานะ Developer Preview ไม่แนะนำใช้ใน Production
- ทดลองได้ผ่าน UART, Buildroot หรือ Yocto ตามโครงการและบอร์ดที่เลือก
ESP32 รัน Linux ได้จริงไหม?
ได้ แต่ต้องระบุรุ่นให้ตรง สิ่งที่ข่าวทั้งสองแหล่งรายงานคือ ESP32-S31 ที่มีหน่วยจัดการหน่วยความจำหรือ MMU จึงรองรับ Linux แบบ Conventional MMU Linux ไม่ใช่เพียง no-MMU Linux หรือการจำลอง CPU บนไมโครคอนโทรลเลอร์รุ่นเก่า
Linux Kernel ไม่ได้ทำให้ชิปกลายเป็น Raspberry Pi โดยอัตโนมัติ เพราะ RAM ของ Development Board ตัวอย่างมีจำกัด ความพร้อมของ Driver แตกต่างกัน และการติดตั้งจำเป็นต้องใช้ชุด Firmware ที่ตรงกับ Hardware Revision
อ่านบริบทข่าวได้จาก Hackaday: Proper Linux, On An ESP32 และ i-programmer: The ESP32 S31 Runs Linux
ทำไม Sv32 MMU ถึงทำให้ ESP32-S31 รัน Linux ได้?
MMU (Memory Management Unit) แปลที่อยู่หน่วยความจำเสมือนเป็นที่อยู่จริง โดย Sv32 เป็นระบบจัดการ Page Table แบบ 2 ระดับสำหรับ RISC-V 32-bit ช่วยให้ Kernel และ User Process ใช้ Virtual Memory และการกำหนดสิทธิ์เข้าถึงหน่วยความจำได้
โปรแกรมทำงานใน User Space
จัดการ Process และทรัพยากร
เข้าถึงหน่วยความจำและ Peripheral ตาม Driver
แผนภาพ HTML นี้สรุปหลักการจาก Datasheet และ Linux Documentation ไม่ใช่ Block Diagram ที่คัดลอกจากผู้ผลิต
Hardware ESP32-S31 มีอะไรที่เกี่ยวข้องกับ Linux?
| รายการ | ข้อมูลที่ยืนยันจากเอกสาร |
|---|---|
| HP CPU | Dual-core 32-bit RISC-V สูงสุด 320 MHz |
| Memory Management | Sv32 Two-level Page Table |
| Internal SRAM | HP SRAM 512 KB และ LP SRAM 32 KB (คนละส่วน) |
| External PSRAM | ขึ้นกับรุ่นชิป/โมดูล; Function-CoreBoard-1 ตัวอย่างมี PSRAM 16 MB |
| Flash บน Function-CoreBoard-1 | 16 MB |
| Wireless | 2.4 GHz Wi-Fi 6, Bluetooth 5.4 และ IEEE 802.15.4 |
| Peripheral | USB 2.0 HS OTG, Ethernet MAC, UART, GPIO, SPI, I²C, SD/MMC |
| Linux Compatibility | ต้องดู Kernel Driver Support Matrix ของ Port ที่ใช้งาน |
บน Function-CoreBoard-1 มีพอร์ต Ethernet RJ45, USB, UART และ Header สำหรับทดลอง ส่วน Korvo-1 มีจอและอุปกรณ์มัลติมีเดีย จึงต้องเลือก Linux Image ให้ตรงรุ่นบอร์ด ไม่ใช้คำว่า ESP32-S31 Board แทนกันทั้งหมด
Linux บน ESP32-S31 บูตผ่านอะไรบ้าง?
Community Port บางโครงการใช้ ESP-IDF Boot Stage เตรียม Memory ก่อนส่งต่อให้ OpenSBI และ Linux Kernel จากนั้นจึงเริ่ม User Space ผ่าน Buildroot ความแตกต่างอยู่ที่ Boot Chain, CPU Core และ Filesystem ที่แต่ละโครงการเลือก
Boot Flow นี้ยกจากแนวทาง annoyedmilk เท่านั้น Official Espressif ใช้ส่วนประกอบและวิธี Build ตาม BSP ของตนเอง
Official Linux BSP จาก Espressif อยู่ขั้นไหน?
Espressif มี Kernel Repository สาขา integration/v6.18-esp32s31 และ Layer meta-espressif สำหรับ Yocto ซึ่งใช้ Linux Kernel, U-Boot, OpenSBI และ Root Filesystem ที่จัดสำหรับหน่วยความจำขนาดเล็ก ส่วน esp-linux-bsp มีเครื่องมือจัด Layout และประกอบ Flash Image
ทั้ง Official BSP และ Yocto Layer ระบุว่ายังไม่แนะนำใช้ Production อาจมี Breaking Changes และไม่ได้รับประกัน API/ABI Compatibility นอกจากนี้ Yocto Development Image ตัวอย่างเปิด Root Login แบบไม่มีรหัสผ่าน จึงห้ามนำการตั้งค่านี้ไปใช้ในระบบที่เปิดให้เข้าถึงผ่านเครือข่ายโดยไม่ปรับ Security
mkdir ~/yocto && cd ~/yocto
git clone https://git.openembedded.org/bitbake
git clone https://github.com/espressif/meta-espressif.git
./bitbake/bin/bitbake-setup init --non-interactive \
./meta-espressif/bitbake-setup/espressif.conf.json esp32s31
source bitbake-builds/esp32s31-wrynose/build/init-build-env
bitbake esp-image-core
Excerpt จาก README ของ Espressif ต้องอ่าน Dependencies และข้อกำหนดเวอร์ชัน Yocto ก่อนรัน ไม่ใช่คำสั่งแฟลชโดยตรง
GrieferPig: Linux 6.18 กับผลการบูตจริง
โครงการ GrieferPig/esp32-s31-linux เป็น Community Port ที่แสดง Boot Log และตาราง Driver Support อย่างละเอียด README ระบุฟีเจอร์ เช่น Linux/Sv32, Flash XIP, Dual-core SMP, Persistent Root Filesystem และ Wi-Fi Station พร้อมแยกสถานะ Stable, Experimental, WIP และ Unsupported
การรองรับ Peripheral เช่น I²C, SPI, SD/MMC และ USB ยังต้องตรวจจาก Driver Support Matrix รุ่นปัจจุบัน ไม่ควรสรุปว่าทุกพอร์ตใช้งานได้ครบเพียงเพราะ Linux บูตสำเร็จ
annoyedmilk: Linux 7.3.1 และ Terminal บน Korvo-1
อีกโครงการคือ annoyedmilk/esp32-s31-linux ซึ่ง README ที่ตรวจระบุ Linux 7.3.1 กับ OpenSBI 1.9 โดยแบ่งการทำงานให้ Linux รันบน Hart 1 ส่วน Hart 0 ดูแล Radio Firmware ระบบมี Buildroot User Space และรองรับบอร์ดหลาย Configuration ต่างกัน
README แยก Release Files เป็นชุดสำหรับ Module, Function-CoreBoard-1 และ Korvo-1 เช่น Flash ZIP และ Disk Image โดยบาง Configuration ต้องใช้ microSD หรือ USB Stick เป็น Root Filesystem ด้วย
เปรียบเทียบ Linux Port ทั้งสามแนวทาง
| โครงการ | Linux / ระบบ | ลักษณะสำคัญ | ข้อควรระวัง |
|---|---|---|---|
| Espressif Official | Linux 6.18 Branch, Yocto | Vendor Kernel/BSP และ Image Builder | Developer Preview |
| GrieferPig | Linux 6.18, Community | มี Boot Log, Releases, Driver Support Matrix | Driver บางส่วนยัง Experimental/WIP |
| annoyedmilk | Linux 7.3.1, Buildroot | OpenSBI, Shell, Wi-Fi, หลาย Board Profiles | ต้องใช้ Image/Storage ให้ตรงกับบอร์ด |
หมายเหตุ: ตัวเลข Kernel อ้างอิงสถานะ Repository ณ วันที่ตรวจ ไม่ใช่การรับรองว่าทุก Release ที่ดาวน์โหลดมีฟีเจอร์เหมือนกัน
ถ้าอยากทดลอง Linux บน ESP32-S31 ต้องเริ่มอย่างไร?
- ตรวจชื่อชิปและบอร์ดให้ตรง โดยดู Espressif Datasheet และคู่มือ Development Board
- เลือกเพียงหนึ่งโครงการ: Official Espressif, GrieferPig หรือ annoyedmilk
- อ่าน README และ Release Notes ของโครงการที่เลือก รวมถึงรายการอุปกรณ์เก็บข้อมูลที่ต้องใช้
- สำรองข้อมูลเดิมก่อนแฟลช และทำตามคำสั่งของ Release นั้นโดยเฉพาะ
- เชื่อม UART Console ตรวจ Boot Log จากนั้นจึงทดสอบ Network และ Peripheral ที่ Support Matrix รองรับ
pip install "esptool==5.5.0"
esptool --chip esp32s31 -p PORT -b 921600 \
write-flash 0x0 flash.bin
เปลี่ยน PORT เป็นพอร์ตจริง และใช้ flash.bin จาก Release ที่ตรงบอร์ดเท่านั้น คำสั่งนี้อาจเขียนทับ Firmware เดิม และบางรุ่นต้องทำ Disk Image เพิ่มด้วย
Image สำหรับ Korvo-1 และ Function-CoreBoard-1 อาจใช้ Storage และ Driver ต่างกัน การเขียน Disk Image ด้วยเครื่องมือแฟลชจะลบข้อมูลบนอุปกรณ์ปลายทางที่เลือก
วิดีโอเกี่ยวกับ ESP32-S31 Linux
วิดีโอจาก ShotokuTech อธิบาย Linux BSP Developer Preview และข้อสงสัยด้านการรัน Linux บน S31 ส่วนคลิป Hands-on ของ Platima Tinkers สาธิต Development Board และ Linux Port ในช่วงเวลาที่เผยแพร่ซึ่งอาจเป็น Release เก่ากว่าสถานะ GitHub ปัจจุบัน
ดูวิดีโอ ShotokuTech บน YouTube
ดู Hands-on ของ Platima Tinkers
วิดีโอเหล่านี้เป็นสื่อประกอบเพิ่มเติม ไม่ใช่วิดีโอที่ยืนยันว่าฝังอยู่ใน Hackaday หรือ i-programmer ต้นฉบับ และไม่ได้ยืนยันผล Benchmark โดย GlobalByte
ข้อจำกัดที่ควรรู้ก่อนนำ Linux บน ESP32 ไปใช้จริง
- Linux Kernel บูตสำเร็จไม่ได้หมายความว่า Driver สำหรับ GPIO, USB, I²C, Network และ Wireless ทุกชนิดพร้อมใช้งานทั้งหมด
- PSRAM 16 MB บนบอร์ดตัวอย่างมีทรัพยากรจำกัดเมื่อเทียบกับ SBC ที่มี DRAM มากกว่า
- ชิปมี JPEG/PPA Accelerator แต่ไม่ควรอ้างว่ามี GPU สำหรับ Desktop Linux แบบทั่วไป
- Official Yocto Development Image ต้องปรับ Default Root Login และการเข้าถึง Network ก่อนใช้งานจริง
- Flash Image และ Storage Layout เปลี่ยนได้ตาม Release จึงอาจทำให้ข้อมูลเดิมสูญหาย
ดังนั้นเรื่องนี้เหมาะกับการเรียนรู้ RISC-V, Linux Boot Chain, Embedded Linux และ Driver Development มากกว่าการยืนยันว่าพร้อมนำไปใช้ในระบบ Production ทันที
Source Code, Firmware, PDF และไฟล์ดาวน์โหลด
ลิงก์ Firmware และ Build Image ถูกแยกตามเจ้าของโครงการ ไม่รับรองว่าไฟล์จากคนละ Port ใช้แทนกันได้หรือรองรับบอร์ดเดียวกันทุก Revision
FAQ: คำถามที่พบบ่อย
1. ESP32 รุ่นไหนรัน Linux แบบมี MMU ได้?
กรณีศึกษานี้คือ ESP32-S31 ซึ่งมี Sv32 MMU ส่วน ESP32 รุ่นอื่นต้องตรวจ Hardware และ Linux Port แยกกัน
2. ESP32-S31 ใช้ CPU อะไร?
CPU หลักเป็น Dual-core 32-bit RISC-V สูงสุด 320 MHz ตาม Espressif Datasheet
3. MMU ต่างจากการรัน Linux แบบ no-MMU อย่างไร?
MMU รองรับ Virtual Memory และการแยกสิทธิ์เข้าถึงหน่วยความจำระหว่าง Kernel กับ Process
4. RAM ของบอร์ดตัวอย่างเท่าไร?
Function-CoreBoard-1 ระบุ PSRAM 16 MB และ Flash 16 MB ส่วน SRAM ภายในชิปมี HP 512 KB และ LP 32 KB
5. Official Linux ของ Espressif พร้อม Production แล้วหรือยัง?
ยังไม่พร้อมตามคำเตือน Developer Preview ใน Official BSP
6. GrieferPig มี Firmware ให้แฟลชไหม?
มีหน้า GitHub Releases แต่ต้องเลือก Image ให้ตรงกับบอร์ดและอ่าน Installation Guide
7. annoyedmilk มี Linux เวอร์ชันใด?
README ที่ตรวจระบุ Linux 7.3.1 และ OpenSBI 1.9; Release ต่างช่วงเวลาอาจใช้เวอร์ชันอื่น
8. Linux ใช้ทั้งสอง Core พร้อมกันเสมอไหม?
ไม่เสมอ แนวทางจัด Core ของแต่ละ Port แตกต่างกัน เช่น GrieferPig ระบุ SMP ส่วน annoyedmilk แยก Linux กับ Radio Firmware
9. สามารถใช้ Desktop Linux เหมือน Raspberry Pi ได้ไหม?
ไม่ควรคาดหวัง Desktop Linux ทั่วไปจาก Hardware ที่มีหน่วยความจำจำกัดและ Driver ที่ยังพัฒนา
10. Wi-Fi และ Ethernet ทำงานครบไหม?
ความพร้อมขึ้นกับ Port, Release และบอร์ด ต้องตรวจ Support Matrix ของโครงการที่เลือก
11. จำเป็นต้องใช้ microSD หรือ USB Stick หรือไม่?
บาง Configuration ของ annoyedmilk ต้องใช้ Root Disk แต่ Module Profile อีกแบบใช้ Flash บนโมดูล
12. Linux BSP ของ Espressif ใช้เครื่องมืออะไร Build?
Official meta-espressif ให้แนวทาง Yocto ผ่าน bitbake-setup และ bitbake esp-image-core
13. การแฟลชมีความเสี่ยงต่อข้อมูลหรือไม่?
มี หากเขียนทับ Flash หรือ Disk Image โดยเลือกผิดอุปกรณ์ ข้อมูลเดิมอาจหาย
14. มีโค้ดและ PDF ให้ดาวน์โหลดไหม?
มี Linux Kernel/BSP Repositories, Community Releases, Datasheet และ Schematic/PCB PDF จากแหล่งต้นฉบับ
สรุป: ESP32-S31 ทำให้เส้นแบ่ง MCU กับ Embedded Linux ใกล้กันขึ้น
ESP32-S31 แสดงให้เห็นว่า Microcontroller ที่มี RISC-V, Sv32 MMU และ PSRAM สามารถรัน Linux แบบมี Kernel และ User Space จริงได้ แต่คุณสมบัตินี้ยังไม่ใช่เหตุผลให้แทนที่ SBC หรือ Linux Production System ในทุกงาน
สำหรับ Maker และ Developer สิ่งที่น่าศึกษาที่สุดคือ Boot Flow, MMU, Linux Driver และการจัด Memory บน Hardware ขนาดเล็ก โดยเริ่มจาก Official Yocto BSP หรือ คู่มือทดลองของ GrieferPig และตรวจความเข้ากันได้ของบอร์ดก่อนเสมอ
References / แหล่งข้อมูลต้นฉบับ
- Hackaday: Proper Linux, On An ESP32 (7 Nov 2026)
- i-programmer: The ESP32 S31 Runs Linux (7 Oct 2026)
- Espressif: ESP32-S31 Series Datasheet
- Espressif: Function-CoreBoard-1 User Guide
- Espressif Official Linux Kernel
- Espressif: meta-espressif
- Espressif: esp-linux-bsp
- GrieferPig: ESP32-S31 Linux
- annoyedmilk: ESP32-S31 Linux
- ShotokuTech: ESP32-S31 Linux BSP Discussion
ต่อยอด ESP32 และ Embedded Linux กับ GlobalByte
กำลังศึกษา RISC-V, ESP32, Development Board หรือ Embedded Linux? สามารถสอบถามทีม GlobalByte เกี่ยวกับบอร์ดและอุปกรณ์ Maker ที่เหมาะกับโปรเจกต์ได้ โดยควรยืนยันรุ่นสินค้าและ Compatibility ของ Linux Port ก่อนสั่งใช้งานจริง