星標公眾號,讓嵌入式知識 “投喂” 不停歇!
LK (Little Kernel) 是一個專為嵌入式系統設計的小型操作系統內核,誕生于Google工程師Travis Geiselbrecht之手。它最初作為Android設備的bootloader而廣為人知,如今已經發展成為一個功能完整的嵌入式操作系統內核,被廣泛應用于各類開源和商業項目中。
https://github.com/littlekernel/lk

與傳統的RTOS(如FreeRTOS、RT-Thread)不同,LK從設計之初就考慮了現代嵌入式系統的復雜性需求:
LK處于傳統RTOS和Linux之間的一個獨特位置。它比FreeRTOS更強大,提供了完整的虛擬內存支持和多核調度;但比Linux更輕量,啟動時間以毫秒計,內核代碼量僅數萬行。這使它成為以下場景的理想選擇:
LK項目有幾個顯著特點使其成為學習的絕佳范本:
1. 架構設計清晰:嚴格的分層設計和模塊化架構,Arch-Platform-Target三層抽象極具代表性。
2. 代碼質量高:代碼遵循統一的編碼規范,注釋詳盡,MIT許可證友好。
3. 工程實踐優秀:構建系統設計精巧,模塊依賴管理自動化,跨平臺編譯簡單。
4. 實際應用廣泛:被用于數百萬Android設備的bootloader中,經過充分驗證。
5. 可擴展性強:模塊化設計使得添加新功能、移植新平臺都非常容易。
通過拆解LK,我們不僅能學到一個RTOS該如何設計,更能理解現代嵌入式軟件工程的最佳實踐。
LK采用了經典的分層架構設計,從下到上分為五層:

這種分層設計的核心思想是關注點分離:
lk/
├── arch/ # 架構層:各CPU架構的實現
│ ├── arm/ # ARM 32位架構
│ ├── arm64/ # ARM 64位架構
│ ├── riscv/ # RISC-V架構
│ └── x86/ # x86架構
├── platform/ # 平臺層:各SoC平臺的驅動
│ ├── stm32f4xx/ # STM32F4系列
│ ├── rp20xx/ # 樹莓派Pico
│ └── qemu-virt-*/ # QEMU虛擬平臺
├── target/ # 目標層:具體開發板配置
├── kernel/ # 內核層:核心OS功能
│ ├── thread.c # 線程管理和調度器
│ ├── mutex.c # 互斥鎖
│ ├── timer.c # 內核定時器
│ └── vm/ # 虛擬內存子系統
├── lib/ # 庫層:各種功能庫
│ ├── libc/ # C標準庫實現
│ ├── heap/ # 堆內存管理
│ └── console/ # 控制臺
├── top/ # 系統啟動入口
│ └── main.c # lk_main()入口
├── project/ # 項目配置:定義編譯什么
└── engine.mk # 構建引擎:核心構建邏輯
這種目錄結構體現了高內聚、低耦合的設計原則。每一層都可以獨立開發和測試,新增平臺支持只需添加對應目錄下的文件。
LK使用依賴注入的方式管理模塊間的交互。每個模塊通過rules.mk聲明自己的依賴:

構建系統會自動解析依賴關系,確保模塊按正確順序編譯和鏈接。這種方式的優勢:
LK的線程調度器是一個優先級搶占式調度器,支持32個優先級級別。線程結構體定義如下:

調度器的核心是就緒隊列和優先級位圖:

調度算法流程:

核心代碼片段:

LK實現了基于定時器的時間片輪轉:

LK定義了多個初始化級別,確保系統組件按正確順序初始化:

通過宏注冊初始化函數:

編譯器會將所有初始化結構體收集到.lk_init段,啟動時遍歷執行:


關鍵點:
每個模塊通過rules.mk定義自己:

# 克隆倉庫
git clone https://github.com/littlekernel/lk.git
cd lk
# 編譯QEMU ARM Cortex-A15項目
make qemu-virt-arm-a15
# 運行(需要安裝qemu-system-arm)
make qemu-virt-arm-a15 qemu
app/myapp/myapp.c:

app/myapp/rules.mk:
LOCAL_DIR := $(GET_LOCAL_DIR)
MODULE := $(LOCAL_DIR)
MODULE_SRCS += $(LOCAL_DIR)/myapp.c
MODULE_DEPS += lib/console
include make/module.mk
project/myproject.mk:
TARGET := qemu-virt-arm-a15
MODULES += app/myapp
編譯運行:
make myproject
make myproject qemu
相關資源:
猜你喜歡:
一款基于FreeRTOS設計的手機操作系統!
嵌入式系統內存泄漏檢測利器:MTrace
嵌入式模塊設計的工程實踐!
一份經典的嵌入式面試題!
嵌入式系統模塊間幾種通信方式對比
在公眾號聊天界面回復1024,獲取嵌入式資源