# Embedded Linux

ระบบปฏิบัติการลีนุกซ์ที่ถูกฝังเข้าไปอยู่ในบอร์ดสมองกลจะถูกเรียกว่า ระบบปฏิบัติการลีนุกซ์แบบฝังตัว (Embedding Linux) ซึ่งเป็นระบบที่ถูกปรับแต่งเคอร์เนลและโปรแกรมระบบให้สามารถทำงานได้บนสถาปัตยกรรมของหน่วยประมวลผลกลางของบอร์ดนั้นๆ ซึ่งเรียกวิธีการนี้เป็นทับศัพท์ภาษาอังกฤษว่าการ “Porting” นอกจากนั้นในปัจจุบันก็มีบริษัทจำนวนมากที่ขายผลิตภัณฑ์ที่มีระบบปฏิบัติการลีนุกซ์แบบฝังตัวอยู่ภายใน และก็ยังมีอีกหลายกลุ่มบริษัทที่ทำธุรกิจเกี่ยวกับการให้บริการแบบองค์รวมทางด้านการพัฒนาระบบปฏิบัติการลีนุกซ์แบบฝังตัว ไม่ว่าจะเป็นลีนุกซ์คอร์เนลที่ถูกปรับแต่งพิเศษ เครื่องมือการคอมไพล์สำหรับสถาปัตยกรรมต่างๆ (Cross-development tools) และ ไลบรารีทางด้านการทำงานแบบเวลาจริง (Real time extensions) เป็นต้น ถือได้ว่าระบบปฎิบัติการลีนุกซ์นั้นเป็นระบบปฏิบัติการที่เหมาะสำหรับการทำงานทางด้านระบบสมองกลฝังตัวมากที่สุด เนื่องจากมีโปรแกรมไลบรารีต่างๆ มีชุดเครื่องมือในการพัฒนาที่ครบถ้วนเพียงพอสำหรับระบบสมองกลฝังตัว

## องค์ประกอบการเตรียมสภาพแวดล้อมสำหรับ Embedded Linux&#x20;

องค์ประกอบที่นักพัฒนาหรือผู้สนใจด้านเทคโนโลยีระบบสมองกลฝังตัวควรทำความเข้าใจดังแสดงในตารางข้างล่าง

> ตารางองค์ประกอบสำคัญพื้นฐานในการเตรียมสำหรับบอร์ดสมองกลฝังตัว

<table><thead><tr><th width="276">องค์ประกอบ</th><th>รายละเอียด</th></tr></thead><tbody><tr><td>BSP (Board Support Package)</td><td>ภายในบรรจุตัว bootloader และ Kernel ที่รองรับและเข้ากันได้กับรุ่นของฮาร์ดแวร์ที่ใช้ในบอร์ดสมองกลฝังตัวที่เลือกใช้</td></tr><tr><td>Cross Toolchains</td><td>เครื่องมือพัฒนาที่สามารถแปลงรหัสเพื่อให้ทำงานข้ามแพลตฟอร์มได้ </td></tr><tr><td>Third-party components</td><td>ไลบรารีต่างๆ และโปรแกรมพิเศษจากนักพัฒนาภายนอก ซึ่งอาจจะมีลิขสิทธิ์การใช้งาน เช่น GPLv3, Apache, MIT เป็นต้น</td></tr><tr><td>Hardware และ Accessories</td><td><p>- เครื่อง Host คือ เครื่องคอมพิวเตอร์ที่ติดตั้งระบบปฏิบัติการลีนุกซ์ สำหรับปรับแต่งลีนุกซ์คอร์เนลและคอมไพล์โปรแกรมต่างๆสำหรับบอร์ด target</p><p>- เครื่อง Target คือ บอร์ดสมองกลฝังตัว เช่น Beagleboard, Versatile Express, Pandaboard, ODROID, FriendlyARM เป็นต้น</p><p>- สาย Cable ต่างๆ เช่น LAN Cable, Serial Cable, USB-to-Serial เป็นต้น</p><p>- MMC/SD Card </p></td></tr></tbody></table>

\
สำหรับขั้นตอนสำคัญของการพัฒนาระบบสมองกลฝังตัวนั้น สามารถแบ่งออกได้เป็น 4 ส่วนหลักคือ

{% tabs %}
{% tab title="1. การเริ่มทำงานของบอร์ดสมองกลฝังตัว" %}
เนื่องจากบอร์ดสมองกลฝังตัวจำเป็นต้องมี bootloader ที่มีการตั้งค่าเกี่ยวกับตำแหน่งของ Kernel Image, root file system และค่าพารามิเตอร์ที่จำเป็น เพื่อให้บอร์ดสามารถบูทเข้าสู่ระบบปฏิบัติการลีนุกซ์แบบฝังตัวได้สมบูรณ์แบบ ซึ่งถ้าบอร์ดเชื่อมต่ออยู่กับ Ethernet LAN ก็สามารถเข้าสู่ระบบผ่าน telnet หรือ ssh เข้าไปได้ แต่อย่างไรก็ตามในระหว่างการพัฒนาควรใช้ serial console เพื่อใช้สำรองการเชื่อมต่อในกรณีไม่สามารถต่อ LAN ได้
{% endtab %}

{% tab title="2. การตั้งค่าและสร้าง Linux kernel" %}
เนื่องจากบอร์ดสมองกลฝังตัวส่วนใหญ่ถึงแม้จะมีประสิทธิภาพสูงแต่ก็ไม่สามารถใช้คอมไพล์ Kernel ได้ด้วยข้อจำกัดของทรัพยากรภายใน เช่น หน่วยความจำ พลังงานที่จำกัด ดังนั้นงานเหล่านี้ทั้งหมดจะทำอยู่บนเครื่อง Host ก่อนจะ Porting เข้าบอร์ดสมองกลฝังตัว
{% endtab %}

{% tab title="3. การตั้งค่าและสร้าง Root File System" %}
ภายใน root file system จะบรรจุโปรแกรมของระบบและโปรแกรมสำหรับผู้ใช้ที่สามารถทำงานกับเคอร์เนลและสถาปัตยกรรมนั้นๆได้ ถ้าปราศจาก root file system แล้วจะเกิดเหตุการณ์แสดงข้อความดังนี้ “Kernel panic” และหยุดทำงานในที่สุด ซึ่งตำแหน่งการวาง root file system นั้นมีอยู่อย่างน้อย 2 แบบคือเก็บไว้ใน Flash Storage เช่น MMC, SDCard และเก็บไว้ในระบบเครือข่ายเช่น NFS&#x20;
{% endtab %}

{% tab title="4. การคอมไพล์และดีบักโปรแกรม" %}
เนื่องจากบอร์ดสมองกลฝังตัวไม่สามารถคอมไพล์ Kernel ด้วยตัวเองได้ จึงจำเป็นต้องทำอยู่บนเครื่อง Host ไม่ว่าจะเป็นการคอมไพล์โปรแกรมด้วยเครื่องมือในการคอมไพล์ที่เรียกกันว่า Cross Toolchain หรือการดีบักโปรแกรมที่กำลังทำงานบนบอร์ดสมองกลฝังตัวด้วย gdb เป็นต้น
{% endtab %}
{% endtabs %}

โครงสร้างสถาปัตยกรรมของระบบปฏิบัติการลีนุกซ์แบบฝังตัว จะไม่แตกต่างมากเมื่อเทียบกับ[ระบบปฏิบัติการลีนุกซ์ทั่วไป](/computer-operation-systems/zero-to-linux-hero/anatomy-of-linux-kernel.md) ดังแสดงในรูปข้างล่าง

<figure><img src="/files/kYEJ9cFbaN3DuhOF4kn9" alt=""><figcaption><p>สถาปัตยกรรมภายในระบบปฏิบัติการลีนุกซ์</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/embedded-linux.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.
