Linux系统架构是怎样的复杂结构?
摘要:Linux系统架构理解 Linux SDK 编译 U-Boot、Kernel、RootFS 是在生成一套“能让板子从上电到跑应用”的完整系统 一、嵌入式 Linux 的完整启动链 以 RK356X 为例: 上电 ↓ ROM(芯片内置) ↓
Linux系统架构理解
Linux SDK 编译 U-Boot、Kernel、RootFS
是在生成一套“能让板子从上电到跑应用”的完整系统
一、嵌入式 Linux 的完整启动链
以 RK356X 为例:
上电
↓
ROM(芯片内置)
↓
Loader / SPL
↓
U-Boot(bootloader)
↓
Linux Kernel(内核)
↓
Root Filesystem(Buildroot / Ubuntu)
↓
应用程序
SDK 的作用,就是 把这条链上每一段都编译出来。
Bootloader
把系统从“上电”带到“操作系统运行”
典型职责:
初始化最基本硬件(时钟、DDR、串口)
选择启动介质(eMMC / SD / NAND / 网络)
加载内核(Linux Kernel)
传递参数(DTB / bootargs)
二、SDK 里每一部分
SDK 里的典型目录
u-boot/
kernel/
buildroot/ 或 debian/
rkbin/
tools/
三、U-Boot
U-Boot 是“板子的 BIOS + 引导程序”
它负责:
初始化 DDR
初始化 串口 / 时钟 / 电源
选择从哪里启动(eMMC / SD / USB / 网络)
加载 Linux 内核
把启动参数(cmdline / DTB)传给内核
为什么要编译 U-Boot?
换板卡 / DDR
改启动介质
调试早期启动问题
支持 fastboot / recovery / adb
没有 U-Boot,Linux 根本起不来
四、Kernel(内核)
Kernel 是操作系统的核心
负责:
进程调度
内存管理
中断处理
驱动(GPIO / I2C / SPI / USB / 网卡 / 显示)
文件系统
网络协议栈
为什么要编译 Kernel
加/改驱动
打开内核选项(menuconfig)
修改 DTS(设备树)
匹配不同硬件
写的 .ko 驱动,最终都是跑在 Kernel 里的
五、RootFS(Buildroot / Ubuntu)
RootFS 是“用户能看到的 Linux 世界”
包括:
/bin /sbin /usr
busybox
systemd / init
ssh / scp
应用程序
Buildroot vs Ubuntu
项目
Buildroot
Ubuntu
体积
极小
很大
启动速度
快
慢
可裁剪
非常强
弱
调试友好
一般
非常好
适合
产品
开发
** adb / ssh / insmod,都是 RootFS 提供的**
六、rkbin / loader
rkbin/
是 Rockchip 提供的闭源二进制:
DDR 初始化
Boot ROM 交互
安全启动相关
是 RK 芯片启动的“最底层”
七、SDK 编译产出什么
一次完整 SDK 编译,通常会产出:
u-boot.img
kernel.img / Image
dtb
rootfs.img
update.img
这些一起,才能刷进板子。
八、为什么“驱动开发只编译 Kernel 模块”
因为:
U-Boot:只在启动时用
Kernel:长期运行
RootFS:应用层
Kernel 模块开发(*.ko)
所以:
不用每次全量编 SDK
只要内核源码 + 交叉编译器
九、
U-Boot → 管启动
Kernel → 管硬件 & 驱动
RootFS → 管命令 & 应用
下一步可以
1️⃣ 深入驱动
platform_driver
DTS
GPIO / LED
2️⃣ 启动流程
U-Boot 环境变量
bootargs
DTB 加载
3️⃣ 系统定制
Buildroot menuconfig
裁剪 rootfs
开机自启
