LK(Little Kernel):一个专为小型系统设计、体量极小的操作系统内核,支持多线程、可抢占,还能自动调度多核

推荐阅读:

RTIC:零开销抢占式硬件加速调度, 助力 Cortex-M 性能暴涨

libmetal:跨 RTOS、裸机和用户空间 Linux 的抽象层

Picolibc:一款面向资源受限嵌入式系统的标准 C 库实现

TizenRT:一个轻量级实时操作系统 (RTOS) 平台,为低端物联网 (IoT) 设备提供高效、可靠的操作系统支持


什么是 LK
说白了,LK(Little Kernel)就是一个专为小型系统设计、体量极小的操作系统内核,支持多线程、可抢占,还能自动调度多核——完全不逊色于那些“大块头”内核。它从 ARM、RISC-V 到 x86 都能跑,连摩托罗拉 68000、VAX(实验性)都支持。要的是一套可移植、模块化、可按需裁剪的内核?LK 就是你的不二之选。

解决了哪些痛点

  • • 内存吃紧:有时候一整个 Linux 都嫌重,LK 只有几百 KB,FLASH/RAM 占用低得可怜;

  • • 移植麻烦:各种板子、架构都能跑,官方模块化得不要不要的,你要啥拉啥;

  • • 多核利用:SMP 支持相当完善,搞个多核 ARM、RISC-V,LK 能跑满核心;

  • • 构建复杂:Linux 工具链、插件一大堆,LK 用纯 gmake/clang 就能搞定,没那么多花里胡哨。

核心特性和代码示例
LK 的亮点不少,简单列几条:

  • • Fully-reentrant 多线程抢占式内核

  • • 支持 ARM32/ARM64/RISC-V/x86/MIPS……几乎你能想得到的主流架构

  • • 强大的模块化构建系统(BUILD.gn + gmake)

  • • 丰富的可选组件:文件系统、网络、设备驱动、调试工具……

下面给你个最简单的线程例子,演示一下多核打印小笑话:

#include <kernel/thread.h>
#include <stdio.h>

static int worker(void* arg){
     int id =(int)(intptr_t)arg;
     while(1){
      printf("Hello from core %d!\n", id);
        thread_sleep(1000);
      }
    return0;
}

void lk_main(void){
     int cpu_count = platform_get_num_cpus();
     for(int i =0; i < cpu_count; i++){
      thread_t* t = thread_create("worker",&worker,(void*)(intptr_t)i, DEFAULT_PRIORITY);
        thread_set_cpu_affinity(t,1u<< i);
        thread_resume(t);
}
/* 主核继续干自己的 */
    worker(0);
}

编译运行,用 QEMU 模拟一个 64 位 RISC-V:

# 假设 LLVM 在 /opt/llvm/bin
gmake qemu-virt-riscv64-test \
    CC="/opt/llvm/bin/clang --target=riscv64-unknown-elf" \
    CXX="/opt/llvm/bin/clang++ --target=riscv64-unknown-elf" \
    LD=/opt/llvm/bin/ld.lld \
    TOOLCHAIN_PREFIX=/opt/llvm/bin/llvm- \
    CPPFILT=/opt/llvm/bin/llvm-cxxfilt

看,启动后屏幕就不停冒出 “Hello from core X”——多核效果立竿见影。

优缺点分析
优点:

  • • 极致轻量,占用少,启动快,适合资源受限场景;

  • • 架构覆盖广,移植成本低;

  • • 代码简单易懂,调试方便;

  • • 模块化设计,按需裁剪,去掉不需要的功能。

缺点:

  • • 功能相对精简,没办法直接拿来跑复杂的用户态应用;

  • • 驱动生态比较小,需要自己写或移植;

  • • 社区、第三方文档不如 Linux 丰富,遇到问题可能要自己啃源码;

  • • 对实时性要求极高的场景,需要手动调优抢占和优先级。

总结
总的来说,LK 就是那种“够用就好、瘦而精”的小核。你要做嵌入式设备、Bootloader、微控制器项目,或者想玩玩多核、玩玩系统底层,LK 几百 KB 的身板子配上强大可移植性,简直是神器。不用担心太多复杂依赖,一套小巧的内核就能跑遍各大架构,还能随你随意拆装功能。要是你还在为内核臃肿、移植难、调试烦心,赶紧试试 LK 吧!

项目地址:https/github.com/littlekernel/lk

发表评论