> For the complete documentation index, see [llms.txt](https://docs.aic-eec.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aic-eec.com/computer-operation-systems/zero-to-linux-hero/anatomy-of-embedded-linux/embedded-linux.md).

# 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="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FPnOv6PS5EB3qK7KBk55j%2FScreenshot%202566-08-14%20at%2022.17.03.png?alt=media&amp;token=e5dbd879-e5cd-4995-bb61-1eef6e701d5d" alt=""><figcaption><p>สถาปัตยกรรมภายในระบบปฏิบัติการลีนุกซ์</p></figcaption></figure>
