หากคอมพิวเตอร์ทั่วไปมี BIOS/UEFI ทำหน้าที่ตรวจสอบฮาร์ดแวร์และส่งต่อหน้าที่ให้ GRUB โหลดระบบปฏิบัติการ ในโลกของอุปกรณ์สมองกลฝังตัว (Embedded Systems) อย่างเราเตอร์, กล่องรับสัญญาณทีวี, อุปกรณ์ IoT, บอร์ดทดลอง ไปจนถึงเครื่อง NAS ประจำบ้าน บทบาทสำคัญทั้งหมดนี้ถูกรวมไว้ในโปรแกรมขนาดกะทัดรัดตัวเดียวที่ชื่อว่า U-Boot
U-Boot คืออะไร?
U-Boot มีชื่อเต็มว่า Das U-Boot (ย่อมาจาก Universal Boot Loader) เป็นซอฟต์แวร์ Bootloader แบบโอเพนซอร์สภายใต้สัญญาอนุญาต GPL ซึ่งดูแลและพัฒนาโดยชุมชนนักพัฒนา DENX Software Engineering
คำว่า “Universal” ไม่ได้เป็นเพียงการตั้งชื่อเกินจริง แต่สะท้อนความสามารถในการรองรับสถาปัตยกรรม CPU ที่หลากหลายอย่างมาก ตั้งแต่ ARM (ทั้ง 32-bit และ 64-bit), MIPS, RISC-V, PowerPC, x86 ไปจนถึง SuperH ทำให้ U-Boot กลายเป็นมาตรฐานโดยพฤตินัย (De facto standard) สำหรับการบูต Linux บนอุปกรณ์ขนาดเล็กและฮาร์ดแวร์เฉพาะทางทั่วโลก
ลำดับการทำงาน: เมื่อเปิดสวิตช์ไฟ เกิดอะไรขึ้นบ้าง?
ในคอมพิวเตอร์ขนาดเล็กหรือชิป SoC (System on Chip) เมื่อจ่ายไฟเข้าวงจร อุปกรณ์ยังไม่รู้จักระบบปฏิบัติการใดๆ ทั้งสิ้น กระบวนการบูตมักแบ่งออกเป็นลำดับขั้น (Boot Stages) ดังนี้
Plaintext
Plain Text
Plain Text
[Power On]
└──> [1. ROM Bootloader (Primary)] ฝังในตัวชิป SoC
└──> [2. SPL (Secondary Program Loader)] เซ็ตติ้ง RAM พื้นฐาน
└──> [3. U-Boot Proper] Bootloader ตัวเต็ม + Command Line
└──> [4. OS Kernel (Linux)] รันระบบปฏิบัติการ
- Primary Bootloader (ROM)
รหัสคำสั่งขนาดเล็กที่โรงงานผู้ผลิตชิปเบิร์นฝังไว้ถาวร มีหน้าที่ตรวจหาว่าต้องไปอ่านข้อมูลบูตจากที่ใด (เช่น SPI Flash, eMMC, SD Card หรือ USB) - Secondary Program Loader (SPL / TPL)
เนื่องจากหน่วยความจำภายในชิป (SRAM) มีพื้นที่จำกัดมาก (มักมีแค่ไม่กี่สิบกิโลไบต์) จึงยังไม่สามารถโหลด U-Boot ตัวเต็มเข้ามาได้ทันที โค้ดของ SPL ขนาดจิ๋วจะถูกดึงมารันก่อนเพื่อ Initialize หน่วยความจำหลัก (DRAM/DDR Controller) ให้พร้อมทำงาน - U-Boot (Full / Proper)
เมื่อ RAM พร้อมใช้งาน U-Boot ตัวเต็มจะถูกคัดลอกลง RAM เพื่อเริ่มต้นฮาร์ดแวร์ส่วนอื่นๆ เช่น คอนฟิกพอร์ตเครือข่าย, ไดรฟ์จัดเก็บข้อมูล, นาฬิการะบบ และอ่านค่าสภาพแวดล้อม (Environment Variables) เพื่อหาทางบูตเคอร์เนลต่อไป
ฟังก์ชันเด่นที่ทำให้ U-Boot เป็นเครื่องมือโปรดของนักพัฒนา
นอกเหนือจากการโหลด OS ตามปกติแล้ว U-Boot ยังมีสภาพแวดล้อมการทำงานแบบอินเทอร์แอคทีฟ (Interactive Shell) ผ่านพอร์ตสัญญาณอนุกรม (Serial UART) ที่ให้ความยืดหยุ่นสูง
- การจัดการผ่าน Environment Variables
สามารถกำหนดลำดับการบูต (Boot sequence) และ Boot Arguments ส่งไปยังเคอร์เนลได้ง่ายผ่านคำสั่งprintenv,setenvและsaveenv - บูตและกู้ชีพผ่านเครือข่าย (Network Booting)
U-Boot มีเน็ตเวิร์กสแต็กในตัว สามารถรับ IP ผ่าน DHCP และดึงไฟล์เคอร์เนลผ่านโปรโตคอล TFTP หรือเมานต์ root filesystem ผ่าน NFS ช่วยให้นักพัฒนาทดสอบเคอร์เนลใหม่ได้ทันทีโดยไม่ต้องแฟลช Flash Memory ซ้ำๆ - เข้าถึง Storage ได้โดยตรง
รองรับการอ่านและเขียนข้อมูลบนสื่อบันทึกเกือบทุกชนิด เช่น คำสั่งnand,sf(SPI Flash),mmc(SD/eMMC) หรือusb - ระบบความปลอดภัย (Verified Boot)
รองรับระบบ FIT (Flattened Image Tree) เพื่อตรวจสอบลายเซ็นดิจิทัล (Cryptographic Signatures) ป้องกันไม่ให้เคอร์เนลที่ถูกดัดแปลงหรือแปลกปลอมสามารถบูตขึ้นมาได้
เปรียบเทียบ: U-Boot กับ Bootloader แบบอื่น
| คุณสมบัติ | U-Boot | UEFI + GRUB | Coreboot |
| เป้าหมายหลัก | ระบบ Embedded, ชิป SoC, อุปกรณ์ IoT | พีซีทั่วไป, แล็ปท็อป, เซิร์ฟเวอร์ x86/ARM64 | เฟิร์มแวร์โอเพนซอร์สสำหรับ PC/Mainboard |
| สถาปัตยกรรม CPU | หลากหลายมาก (ARM, MIPS, RISC-V, etc.) | เน้น x86_64, aarch64 | เน้น x86, ARM บางรุ่น |
| ขนาดของโค้ด | เล็กมาก (หลักร้อย KB ถึงไม่กี่ MB) | ใหญ่ (หลักหลายสิบถึงร้อย MB) | ขนาดเล็กถึงปานกลาง |
| การจัดการค่าคอนฟิก | Key-Value Text บน Flash (Env block) | NVRAM Variables / ไฟล์คอนฟิกข้อความ | คอมไพล์ฝังค่าลงในรอมโดยตรง |
ปราการด่านสำคัญสำหรับสาย Mod และช่างเทคนิค
สำหรับผู้ใช้งานทั่วไป U-Boot อาจทำงานเงียบ ๆ ภายในเสี้ยววินาทีก่อนที่หน้าจอหลักของอุปกรณ์จะสว่างขึ้น แต่สำหรับวิศวกรฝังตัวและผู้ที่ชื่นชอบการปรับแต่งฮาร์ดแวร์ U-Boot คือ “ประตูชุบชีวิต” เมื่ออุปกรณ์เกิดอาการเครื่องค้างหรือบริค (Brick) จากการอัปเดตเฟิร์มแวร์ล้มเหลว ขอเพียง U-Boot ยังไม่เสียหาย การบัดกรีหรือต่อสาย USB-to-TTL UART เพียง 3 เส้น (TX, RX, GND) ก็สามารถเปิดเทอร์มินัลเข้าไปสั่งเขียนเฟิร์มแวร์ใหม่ หรือเปลี่ยนเส้นทางไปรันระบบปฏิบัติการทางเลือกอื่นได้อย่างอิสระ