---
# System prepended metadata

title: Embedded Linux or RTOS
tags: [Public]

---

## **Embedded Linux or RTOS**
[<h3>🍔 What Is Embedded Linux?</h3>](<https://www.windriver.com/solutions/learning/embedded-linux#differences_between_linux_distros>)

與所有 Linux 系統一樣，嵌入式 Linux 建構在相同的 Linux 核心上，可從 kernel.org 取得。
但嵌入式系統具有企業系統根本沒有的嚴格約束，從更高的可靠性和安全性要求到更嚴格的資源可用性以及通常持續 10 年或更長時間的工程支援的需求。此外，嵌入式設備通常需要相互通訊以及與雲端資源通訊。

那麼，嵌入式系統的 Linux 需要原始核心以外的附加軟體包。
您的發行版需要哪些特定的軟體包取決於您要建立的內容，而最佳解決方案將根據不同的用例而有所不同。最終，每個嵌入式 Linux 系統都是獨一無二的，專為智慧邊緣而建置。

<h3>🍔 Embedded Linux Architecture</h3>

從最基本的層面來看，嵌入式 Linux 系統是一種使用 Linux 作為位於嵌入式裝置的硬體和應用程式之間的作業系統的系統。嵌入式 Linux 系統有五個關鍵元件：
1. Hardware processor
2. Hardware abstraction layer (HAL)
3. Linux operating system
4. Service layer
5. Application layer

![image](https://hackmd.io/_uploads/BJN4Z10T6.png)

<h3>🍔 Embedded Linux Development</h3>

<h4>BSP Development：</h4>

- **Board support package (BSP)** 是一個軟體層，包含特定於硬體的驅動程式和其他例程，可讓Linux 在特定的硬體環境中運作。
- 它不僅應該根據正確的架構/作業系統組合進行定制，還應該根據精確的系統單晶片（SoC）和電路板配置進行自訂。
- 為了優化嵌入式環境，BSP 還應該包括 Linux（或其他作業系統）的客製化版本。
- 您的 BSP 供應商可以提供客製化的測試套件、專家的開發人員協助以及其他專業服務。

<h4>System Integration：</h4>

- 子系統的聚合相互協作，以便系統可以提供整體功能並確保子系統作為一個系統一起運作。
- 系統整合涉及協調現有的、通常是不同的嵌入式系統，以便可以解決專門的用例。

[<h3>🍔 What is an RTOS - Real Time Operating System Information and Training</h3>](<https://www.highintegritysystems.com/rtos/what-is-an-rtos/>)

**Real Time Operating System**，通常稱為 **RTOS**，是一種在任務之間快速切換的軟體元件，給人的印像是多個程式在單一處理核心上同時執行。

事實上，處理核心在任何時候只能執行一個程序，而 RTOS 實際上所做的是在各個編程線程（或任務）之間快速切換，以給人一種多個程序同時執行的印象。

![image](https://hackmd.io/_uploads/Hy-KiXqaa.png)
---
<br>
<br>

## **Monolithic Kernel Design and Micro Kernel Design**

### **🍔 Monolithic Kernel Design (單核心、整合式核心、單體式核心)：**


其中一個做法為讓整個作業系統都在 kernel mode 底下執行，例如在 xv6 中，所有作業系統的服務都是在 kernel mode 底下執行，而這種 kernel 的設計模式稱為 Monolithic Kernel Design。

- 在 Monolithic Kernel Design 底下，由於作業系統運作在 kernel mode 底下，擁有對於所有硬體設備完整的存取權限，設計的時候便不需要注意各個元件之間的權限問題，此外，作業系統不同部分也可以更方便的進行合作，共享記憶體等等，也可以擁有更好的性能，如 linux。
- 缺點為由於整個作業系統都在 kernel mode 底下，作業系統有著大量的程式碼，任何程式碼的 BUG 因為在 kernel mode 底下，都有可能成為重大的 BUG。

### **🍔 Micro Kernel Design：**

為了避免大量的程式碼運作在 kernel mode 底下造成的一些安全性風險，希望在 kernel space 底下執行的程式碼量越少越好，因此將作業系統劃分成許多塊模組，只有其中一塊在 kernel space 底下執行，剩下在 user space 執行，這樣在 user space 上面的程式在執行時遇到錯誤不至於造成太大的危害。

- **Modularity (模組化)：** 
微核心採用模組化結構設計，將核心功能分成小的、獨立的元件，更容易增加、刪除或更新，而不影響整個系統。
- **Kernel Minimalism (內核極簡主義)：**
透過保持最小化，可減少可信任運算基礎 (TCB)，從而增強安全性和可靠性。
- **Inter-Process Communication (IPC) (進程間通訊)：**
微內核嚴重依賴 IPC 機制（例如訊息傳遞）來進行用戶空間伺服器和微核心之間的通信。
- **Scalability (可擴展性)：**
微核心比單晶片更具可擴展性，可以更輕鬆地適應不同的系統要求，而無需犧牲效能。
- **Performance Overhead (效能開銷)：**
用戶空間伺服器和微核心之間的通訊通常涉及進程間通訊 (IPC)，與單片核心中的直接函數呼叫相比，這會帶來效能開銷。
- **IPC Mechanisms (進程間通訊機制)：**
設計高效且安全的 IPC 機制可能很複雜。低效率的 IPC 機制可能會破壞模組化和隔離的好處。
- **Size of Microkernel (微內核大小)：**
雖然目標是保持微內核小而最小，但添加基本功能可能會增加其大小。平衡小型 TCB 的需求與包含必要的服務是一個微妙的權衡。
- **Real-Time Constraints (即時約束)：**
由於潛在的 IPC 開銷和對可預測通訊延遲的需求，滿足微核心架構中的即時限制可能具有挑戰性。

<br>

綜上所述，微核心架構是一種強調靈活性、模組化和可靠性的設計方法，使其適合一系列應用。
雖然單晶片以其性能和簡單性而聞名，但微核心在模組化和容錯性方面具有優勢，使其適合某些應用，例如即時系統和嵌入式系統。兩種架構之間的選擇通常取決於作業系統的特定要求和目標。




![image](https://hackmd.io/_uploads/SkZfTZqpp.png)
### **🍔 MicroKernel vs Monlithic Kernel**
![image](https://hackmd.io/_uploads/S1MFo-9aa.png)

[<h2>Linux Boot Process</h2>](<https://www.baeldung.com/linux/boot-process>)

➡ 1. **Power On** 
➡ 2. **BIOS/UEFI(POST)** 
➡ 3. **Boot Device** 
➡ 4. **Boot Loader(GRUB2)** 
➡ 5. **Kernel** 
➡ 6. **Run Level/Systemd**


<br>
<br>
<br>

---

## 參考網站
- [Day-06 RISC-V 簡介, Microkernel vs Monolithic kernel - iT 邦幫忙](<https://ithelp.ithome.com.tw/articles/10295909>)
- [Microkernel Architecture. A microkernel is a type of operating](<https://medium.com/@soumyaroy172003/microkernel-architecture-f2443c8ba915>)
## 學習影片
- [【嵌入式放牛班】RTOS-01](<https://www.youtube.com/watch?v=a0jo2wJXhgU>)
![image](https://hackmd.io/_uploads/Sy5q8Gcap.png)
