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 开机自启