# Bootloader

bootloader เป็นส่วนสำคัญอีกส่วนหนึ่งของระบบสมองกลฝังตัวที่มีหน้าที่ในการเตรียมการให้ระบบฮาร์ดแวร์พื้นฐาน (Hardware Initialization) เช่น หน่วยประมวลผลกลาง (CPU) หน่วยความจำ (DRAM) และ MMC Controller ให้พร้อมที่จะทำงานได้ ในขั้นตอนต่อมาก็จะทำการโหลด Kernel image (bzImage, zImage) ที่ถูกบีบอัดและเก็บอยู่ในอุปกรณ์จัดเก็บข้อมูล (เช่น MMC/SD card, NAND Flash, USB Storage หรือผ่านระบบเครือข่ายด้วยโปรโตคอล tftp NFS เป็นต้น) หลังจากนั้นก็จะทำการแตกโปรแกรมไบนารีที่ถูกบรรจุอยู่ภายใน Kernel image ที่ถูกบีบอัดนั้นอยู่ เพื่อนำไปโหลดขึ้นสู่หน่วยความจำภายใน (RAM) เพื่อติดต่อกับอุปกรณ์อื่นๆ เช่น พอร์ต Ethernet หรือ พอร์ต USB เป็นต้น ในระหว่างการทำงานของ Bootloader นั้นสามารถที่จะเข้าสู่หน้าต่างคอนโซล (console) เพื่อเรียกใช้ชุดคำสั่งที่เตรียมไว้ให้ เช่นการดาวน์โหลดข้อมูลผ่านระบบเครือข่ายหรือจากอุปกรณ์จัดเก็บข้อมูลทางด้านตรวจสอบสถานะของหน่วยความจำ ตรวจสอบสถานะการทำงานของฮาร์ดแวร์ภายใน เป็นต้น &#x20;

เพื่อให้นักพัฒนาได้เห็นภาพมากขึ้นจึงขอสรุปขั้นตอนการทำงานของ bootloader ตั้งแต่เริ่มบูทเข้าระบบของบอร์ดสมองกลฝังตัวได้ดังนี้ (ดังแสดงในรูปที่ 3.12 และ 3.13)

1. หน่วยประมวลผลกลางจะเริ่มอ่านที่ตำแหน่งของหน่วยความจำ ROM ที่ได้ถูกกำหนดไว้ และดำเนินการทำตามชุดคำสั่งภายในโค้ดที่ถูกเก็บอยู่ภายใน&#x20;
2. เริ่มต้นเตรียมระบบฮาร์ดแวร์พื้นฐานสำคัญ เช่น หน่วยประมวลผลกลาง ส่วนควบคุมหน่วยความจำ (SDRAM Controller) ส่วนควบคุมตัวบันทึกข้อมูล (MMC Controller) ส่วนควบคุมอินพุท/เอาท์พุท (I/O Controllers) และ ส่วนควบคุมการแสดงผล (Graphics Controllers) เป็นต้น
3. เริ่มต้นเตรียมระบบหน่วยความจำ SDRAM โดยการจัดสรรพื้นที่ภายในหน่วยความจำให้กับฟังก์ชันที่จะใช้ควบคุมฮาร์ดแวร์ของแต่ละส่วน และจัดสรรพื้นที่ให้กับตัวเคอร์เนลที่ถูกเก็บอยู่ภายในอุปกรณ์บันทึกข้อมูล
4. เมื่อเคอร์เนลได้ถูกโหลดขึ้นหน่วยความจำ SDRAM แล้ว จะทำการติดต่อและตรวจสอบสถานะการทำงานของฮาร์ดแวร์ส่วนที่เหลือทั้งหมดเพื่อเตรียมทำการโหลดระบบปฏิบัติการในส่วนที่เหลือที่เรียกว่า root file system ซึ่งบรรจุสคริปท์ ไลบรารี และโปรแกรมต่างๆเอาไว้&#x20;
5. เมื่อ root file system ถูกโหลดได้สำเร็จ ระบบปฏิบัติการก็จะเรียกโปรแกรมระบบพื้นฐานทั้งหมดที่เกี่ยวกับการจัดการระบบไฟล์ (file system) โปรแกรมจัดการโปรเซส (process) โปรแกรมจัดการลำดับการทำงานของโปรเซส (process scheduling) และเตรียมระบบสำหรับผู้ใช้เพื่อสามารถใช้โปรแกรมประยุกต์ภายในระบบปฏิบัติการสมองกลฝังตัว

<figure><img src="/files/jvaA9rt4TcnId6WytLqA" alt=""><figcaption><p>ขั้นตอนการบูทระบบ</p></figcaption></figure>

ขั้นตอนการทำงานเริ่มต้นของลีนุกซ์คอร์เนล (Kernel Initialisation)

<figure><img src="/files/KCvzs1j8DAeBDrBeMAps" alt=""><figcaption><p>ขั้นตอนการเริ่มต้นของ Linux Kernel</p></figcaption></figure>

ตัวอย่างขั้นตอนการทำงานจริงของ bootloader บนบอร์ดสมองกลฝังตัวที่ใช้ OMAP3 SoC ของบริษัท TI ดังแสดงในรูปข้างล่าง

<figure><img src="/files/h2H82Wk7Bn0GRyV5LZqO" alt=""><figcaption><p>แสดงขั้นตอนการทำงานของ bootloader บน OMAP3 SoC</p></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aic-eec.com/computer-operation-systems/zero-to-linux-hero/anatomy-of-embedded-linux/bootloader.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
