山水观心操作系统-嵌入式
系列文章目录
`
第一章 嵌入式操作系统开发-需求
前言
我为什么用 Rust 从零写一个操作系统内核:在 32MB 内存里跑容器
过去一周,我用 Rust 和 AI 从零写出了第一个操作系统内核
一个人,一周时间,从零到能跑容器的基础内核。
不是玩具,不是为了交作业,而是一个能在 256MB 内存设备上、用 ≤32MB 内核常驻内存跑起多容器服务的生产级操作系统初版。
为什么一周前突然决定做这件事?
边缘计算的容器化,两头够不着:
RTOS(FreeRTOS/Zephyr):没有 MMU,跑不了容器。
裁剪版 Linux(OpenWrt/Yocto):空闲内存 50~80MB,256MB 设备跑 2~3 个容器就超 200MB,启动慢、攻击面大、实时性不可控。
我要的是一个在 256MB 设备上跑 3~5 个隔离容器、常驻内存 ≤40MB、冷启动 1 秒内的操作系统。
Linux 做不到——不是它不好,是它要兼容 40 年硬件和无数驱动。这些包袱在云端是资产,在边缘是负债。
那就自己写一个。
我从一周前开始,到今天,初版内核已经能启动并跑起第一个容器。
一个人,一周,是怎么做到的?
- 设计决策:先砍掉不需要的,留下必要的
砍掉:
99% 的驱动(只留 UART、Timer、virtio)
glibc 兼容层(只支持 musl 静态链接)
图形、音频、USB 全栈
复杂调度(v1.0 只用 FIFO + 简单时间片)
留下:
完整 TCP/IP 网络栈 + epoll
Namespace + Cgroup(容器隔离)
OverlayFS(镜像分层)
NAT + conntrack + 防火墙
OTA 升级与回滚
核心原则:编译期删除不需要的代码,而不是运行时裁剪。
- 选 Rust:不是跟风,是保命
内存安全:内核里一个 UAF 就能让设备挂掉。Rust 编译期杜绝这类问题。我一个人,没有 Linus 级别的 Code Review 团队。
零成本抽象:trait、迭代器在编译后与手写 C 性能相当。
no_std 生态:embedded-hal、cortex-m、riscv 等 crates 非常成熟。
学习曲线确实陡,但考虑到内核 Bug 就是灾难,这个代价值得付。
- AI 辅助开发:不是“用 AI 写代码”,而是“用 AI 加速设计决策”
这周里,AI 帮我做了这些事:
架构设计建议:输入需求(32MB 内存、容器隔离、TCP/IP 完整栈),AI 给出模块划分和优先级排序。
Rust 语法和生命周期疑难:处理内核中 Arc<Mutex> 和 Pin<Box> 等复杂类型时,AI 能快速给出可编译的写法。
测试用例生成:为 Buddy 分配器、Slab 缓存、红黑树调度器自动生成边界测试。
文档与注释:自动生成符合内核文档风格的注释和 commit message。
AI 让我把精力集中在“做什么”而不是“怎么写”。
当前进度:初版内核已完成
这周完成了从 Bootloader → 内核入口 → 内存管理 → 串口输出 → 任务调度 → 系统调用 → 用户态 init → 容器运行时 的最小闭环。
M0-M3:自举 + 内存管理 + 多任务 + 用户态 shell 已跑通。
M4:VFS + ramfs/tmpfs 已实现。
M5-M8(进行中):网络栈 + 隔离 + OverlayFS + 容器运行时,预计下周完整体验“跑起第一个容器”。
当前内核常驻内存约为 18MB,已经优于裁剪版 Linux 的 50~80MB,距离 32MB 目标还有空间。
路线图
M0-M8:从“能启动”到“跑起第一个容器”(内核 → 网络栈 → 隔离 → OverlayFS → 容器运行时)
M9:内存基线 ≤32MB,生产可用
M10-M14:ext4 持久化、动态链接、OCI 镜像 + OTA
M15+:ARM64/RISC-V 移植
v2.0:SMP 多核支持
和同类项目比,差在哪、好在哪?
维度 裁剪 Linux OSv/MirageOS 山水观心操作系统
常驻内存 50–80MB 10–30MB ≤32MB(目标)
多容器支持 ✅ ❌ ✅
网络栈 完整 简化 完整 TCP/IP + epoll
网关能力 netfilter 无 NAT + conntrack
Linux 兼容 完全 部分 musl 静态兼容
OSv/MirageOS 更小,但它们是单应用 Unikernel——跑不了多容器。Linux 通用,但太重。山水观心操作系统在“能跑多容器”和“常驻够小”之间找到了一个位置。
一个具体的价值闭环(真实场景)
工业网关场景:
text
Modbus 采集(PLC 数据)→ JSON 格式化 → MQTT 上报云端 → Web 界面监控
在山水观心操作系统上:
一个容器跑 Modbus 采集程序(C 写,musl 静态编译)
一个容器跑 MQTT broker(Mosquitto 静态版)
一个容器跑轻量 HTTP 服务(提供本地 Web 界面)
三个容器隔离运行,互不影响。总内存占用:内核 32MB + 三个容器各 8~16MB = 56~80MB。在 256MB 设备上绰绰有余。
写在最后
写操作系统内核是一件很“重”的事——周期长、坑多、调试难。但这一周的经历让我确信:
一个人 + Rust + AI,完全可以从零写出一个可用的操作系统内核初版。
这背后是过去十年 Rust 语言和嵌入式生态的积累,以及 AI 编程工具带来的“设计决策加速”。
如果你也在做边缘计算、工业物联网、或对操作系统内核感兴趣,欢迎关注山水观心操作系统。
项目地址(已开源): https://gitee.com/geng_qiankun/shanshui-guanxin/
下一篇文章预告: 我会深入讲山水观心操作系统的网络栈设计——如何在 32MB 内存里实现一个完整的 TCP/IP 协议栈。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)