把 Linux 内核带到新平台:从零启动的最小路径
很多嵌入式系统用 Linux 当操作系统——因为它是绝佳的基础,且大量开发者与厂商已经为各类硬件写好了驱动。但做自定义硬件时,你多半得自己把内核 bring up。这篇指南讲的就是这件事:把 Linux 跑在一个全新平台上——作者的新平台不是新 PCB,而是一个自制的 RISC-V 模拟 CPU。
内核运行的最低硬件要求
Linux 虽然复杂,运行要求其实不多:
- 带 MMU 的 CPU:SoC 上负责虚拟地址到物理地址转换的硬件,实现多用户态进程与内核隔离;
- 足够 RAM:至少能加载内核、Device Tree 和 initramfs;
- 周期性系统时钟:定时器中断驱动调度。
指南主线(11 个章节)
- 获取 Linux 运行(最低要求梳理)
- 写一个模拟器(本例的自制 RISC-V CPU)
- 编译工具链
- 编译 Linux 内核
- 编译 init 程序
- 制作 initramfs
- 写 Device Tree
- 全部组装
- 在浏览器里运行
- 收尾
核心流程:工具链 → 内核 → initramfs → device tree → 模拟器,五件套拼起来就是"Linux 能开机"的最小系统。
实践建议
- bring up 时先把内核与用户态拆开验证:能启动到 kernel panic 说明内核侧 OK,再排查 initramfs 与驱动;
- Device Tree 是硬件描述的唯一真相,别在代码里硬编码外设地址;
- 自研 CPU 起步时用一个最小模拟器(能跑 MMU + 时钟即可),比直接上真硅片迭代快得多。
来源:How to bring up the Linux Kernel on a new platform - WerWolv