RDK开发板运行的是Linux,可以使用SSH登录、运行ROS2、安装软件包,但Linux系统到底是什么?它是怎么来的?Linux Kernel能做什么?RootFS又是什么?如果你也有类似疑问,那么这一篇文章就是为你准备的。今天我们一起拆开Linux系统,看看开发板里的Linux究竟是如何构建出来的。
读完这篇文章,你会明白:
Buildroot是什么
Linux系统是如何生成的
系统镜像里到底有什么
Linux Kernel能做什么
RootFS是什么
以及最重要的一点:
1. Linux系统不是凭空出现的

很多人第一次接触开发板时会觉得:
买开发板 → 烧录系统 → 开机 → 出现Linux仿佛Linux系统天生就存在于开发板中。实际上并不是,Linux系统本身也是由很多组件组合而成的。例如:
U-Boot + Linux Kernel + RootFS + SDK + 应用程序这些部分共同组成了一个完整的Linux系统。
可以把它理解成盖房子:
U-Boot = 地基Kernel = 房屋主体RootFS = 家具家电SDK = 各种功能设备应用程序 = 住在房子里的人只有这些部分全部准备好,一个完整的Linux系统才能真正运行起来。
2. RDK X5和EVB X5有什么区别?
很多朋友会发现:同样是X5芯片,RDK X5和 EVB X5的系统体验却不太一样,这是因为它们采用了不同的Linux系统方案。
2.1. RDK X5:Ubuntu系统
大家熟悉的RDK X5默认运行Ubuntu。因此你可以直接:
bashapt installpip installdocker runros2 launch开发体验和PC非常接近,很多时候甚至会忘记自己正在使用ARM芯片。其本质可以理解为:
Linux Kernel + Ubuntu RootFS2.2. EVB X5:更精简的Linux系统
而很多量产产品不会选择Ubuntu,因为Ubuntu虽然功能丰富,但体积较大,启动速度较慢。对于很多产品来说:
就已经足够了。因此通常会采用Buildroot构建更加精简的Linux系统。这样的系统:
更适合量产设备。
3. Buildroot到底是什么?
Buildroot 是一个Linux系统构建工具。官网地址:https://buildroot.org/它负责把各种组件组合在一起,最终生成Linux系统。可以把它理解成:
Ubuntu = 已经装修好的精装房Buildroot = 装修公司你告诉 Buildroot:
Buildroot帮你把这些东西全部组装起来,最终生成一个完整的Linux系统。
4. Buildroot如何构建Linux系统?
对于地瓜芯片来说,Buildroot构建过程可以简化理解为:
Linux Kernel + RootFS + BusyBox + 地瓜 SDK + 用户程序↓Buildroot↓生成系统镜像(例如 emmc_disk.simg)↓烧录到 eMMC 或 SD 卡↓启动 Linux这里的地瓜SDK包括:
BPU、ISP、Codec、Camera、GDC、Display等各种硬件模块的驱动和接口库。
例如:
libdnn.so、libhbmem.so、libcodec.so、libisp.so...这些库会随着系统一起打包进入最终镜像。因此Buildroot并不仅仅是在编译Linux内核,它实际上是在构建整个操作系统。
5. Buildroot最终生成了什么?
对于很多开发者来说,Buildroot最终的产物就是:
例如:
这个镜像中已经包含了:
U-BootLinux KernelRootFSSDK用户程序等各种内容。随后通过烧录工具:
emmc_disk.simg → 烧录到 eMMC → 启动 Linux就完成了整个系统部署过程。从这个角度来看:
Buildroot → 生成系统镜像 → 烧录 → 启动其实和Windows安装镜像的思路非常类似。
6. Linux系统启动过程
很多人觉得Linux启动很复杂,实际上非常简单,可以概括为:
上电 → BootROM → U-Boot → Linux Kernel → RootFS → init → 用户程序如果用生活化的方式理解:
按下电源 → 进入 BIOS → 加载操作系统 → 进入桌面 → 打开微信Linux其实也是同样的逻辑。
7. BootROM是什么?
BootROM(Boot Read Only Memory)是芯片出厂时就固化在芯片内部的一段代码,当芯片刚刚上电时,CPU执行的第一条指令就来自BootROM。BootROM的功能非常简单,主要负责:
检测启动介质 → 读取 U-Boot → 跳转执行例如:
BootROM会根据芯片配置,从对应的启动介质中找到U-Boot并启动。可以简单理解为:
由于BootROM固化在芯片内部,因此用户通常无法修改。
8. U-Boot(Universal Boot Loader)是什么?
U-Boot是目前最常见的启动加载程序,负责在Linux启动前完成各种初始化工作。主要包括:
初始化 DDR初始化时钟初始化外设读取系统镜像加载Linux Kernel加载Device Tree启动Linux可以把U-Boot理解为系统启动前的"准备阶段"。Buildroot生成的系统镜像中,除了Linux Kernel和RootFS之外,通常也会包含U-Boot。开发板上电后,BootROM会先启动U-Boot,再由U-Boot完成后续系统启动工作。可以简单理解为:
BootROM = 找到系统U-Boot = 启动系统此外,U-Boot 不仅可以启动Linux,还可以进入Fastboot模式。Fastboot可以理解为一种系统烧录模式,用于烧录系统镜像、升级固件等操作。具体流程是:
PC → Fastboot 协议 → U-Boot → 烧录系统镜像即PC通过Fastboot协议与开发板上的U-Boot通信,由U-Boot完成镜像烧录。除了Fastboot之外,不同芯片平台还可能支持:
等多种系统烧录方式。
9. Linux Kernel是什么?
Linux Kernel(Linux 内核)是Linux操作系统最核心的部分。它负责管理系统中的各种硬件资源,并为上层应用程序提供统一的访问接口。
在Linux系统中:
应用程序 → Linux Kernel → CPU / DDR / Camera / USB / 网卡应用程序通常不会直接操作硬件,而是通过Linux Kernel提供的接口访问各种设备。Linux Kernel的主要职责包括:
CPU 调度内存管理设备驱动管理文件系统管理网络协议栈进程与线程管理9.1. CPU调度
当系统同时运行多个程序时:
Linux Kernel负责决定:
从而实现多个程序共享 CPU 资源。
9.2. 内存管理
当程序申请内存时:
最终都会由Linux Kernel负责决定:
保证系统稳定运行。
9.3. 设备驱动管理
开发板上的各种硬件:
相机、USB、网卡、串口、I2C、SPI、GPIO都需要对应的驱动程序。Linux Kernel负责加载和管理这些驱动,并向用户空间提供统一接口。
例如:
/dev/video0/dev/ttyUSB0/dev/i2c-0这些设备节点都是由Kernel创建和管理的。
9.4. 文件系统管理
Linux Kernel负责管理各种存储设备:
以及对应的文件系统:
应用程序只需要使用:
C++fopen()、read()、write()即可访问文件,而无需关心底层存储细节。
9.5. 网络协议栈
Linux Kernel提供完整的网络协议栈支持。例如:
最终都依赖Linux Kernel完成网络通信。
10. RootFS到底是什么?
RootFS全称:
中文通常翻译为:
Linux 中所有文件的起点都是:
这个目录。
例如:
/├── app├── boot├── dev├── etc├── home├── lib├── media├── mnt├── opt├── proc├── root├── run├── srv├── sys├── tmp├── userdata├── usr├── var└── vendor这些目录共同组成了RootFS。
简单来说:
11. RootFS目录详解
接下来我们看看这些目录到底是干什么的。
11.1. /boot
Boot启动相关文件。通常存放:
例如:
11.2. /app
应用程序目录。很多嵌入式产品会把自己的业务程序放在这里。例如:
11.3. /etc
Etcetera,系统配置目录。里面保存:
例如:
/etc/passwd/etc/group/etc/init.d都位于这里。
11.4. /home
普通用户目录。
例如:
类似 Windows:
11.5. /root
Root用户的家目录。
例如:
类似:
11.6. /lib
Library
系统基础动态库。例如:
libc.solibpthread.solibm.so这些库是Linux系统启动和运行所必须依赖的基础库。
11.7. /usr
Unix System Resources,用户软件资源目录。通常是整个系统中体积最大的目录之一。包含:
/usr/bin/usr/include/usr/lib/usr/share其中:
存放头文件,例如:
存放开发应用程序依赖的库文件,例如:
libopencv_core.solibopencv_imgproc.solibpcl_common.so对于开发者来说,编译程序时经常会用到:
头文件:/usr/include库文件:/usr/lib因此可以简单理解为:
/lib = Linux系统运行必须依赖的基础库/usr =应用程序开发和运行所需的软件、头文件和库11.8. /proc
Process,进程与内核状态目录。例如:
/proc/cpuinfo/proc/meminfo/proc/interrupts查看 CPU:
查看内存:
查看中断:
很多驱动调试都会使用这里。
11.9. /tmp
Temporary,临时目录。程序运行过程中产生的临时文件通常放在这里。重启后一般会被清空。
11.10. /media
移动设备挂载目录。例如:
经常会挂载到这里。
11.11. /mnt
Mount,手动挂载目录。开发时经常用于测试挂载设备。
11.12. /opt
Optional,第三方软件目录。例如:
很多软件会安装在这里。
11.13. /run
Runtime,运行时数据目录,保存系统当前运行状态。
11.14. /srv
Service,服务数据目录,通常用于服务器程序,嵌入式开发中不常用。
11.15. /userdata
用户数据目录。很多地瓜开发板会将:
存放在这里。
11.16. /var
Variable Data,运行过程中不断变化的数据。例如:
都会放在这里。
11.17. /vendor
厂商扩展目录。
很多芯片厂商会把自己的软件组件放在这里。
11.18. /dev
Device,设备目录。Linux 有一个经典理念:
一切皆文件。因此开发板上的各种硬件设备,都会以文件的形式出现在 /dev 目录中,例如:
/dev/ttyS0 串口/dev/i2c-0 I2C总线/dev/spidev1.0 SPI设备/dev/mmcblk1 SD卡应用程序通过这些设备节点访问硬件。例如开发串口程序时,通常会打开:
然后进行数据发送和接收。简单来说:
11.19. /sys
System,设备管理目录。/sys 由 Linux Kernel 动态生成,用于管理和查看系统中的设备信息。仍然以串口为例:
对应的设备信息可以在:
中查看。例如查看串口使用的驱动:
bashreadlink /sys/class/tty/ttyS0/device/driver输出:
../../../../../bus/platform/drivers/dw-apb-uart说明当前串口使用的是:
除了串口之外,网卡、USB、I2C、SPI、相机等设备的信息和驱动状态,也都可以在 /sys 中查看。因此:
应用程序通常通过 /dev 与硬件交互,而开发者在调试设备和驱动问题时,经常会查看 /sys 中的信息。
12. BusyBox是什么?
如果说Linux是一个工具箱,那么BusyBox就是一把瑞士军刀。在Ubuntu中:
都是独立程序,而BusyBox会把这些命令全部打包到一个程序中。例如:
通过软链接实现:
ls → busyboxcp → busyboxmv → busyboxcat → busybox这样做最大的好处是:
非常适合嵌入式设备。
13. Linux其实没有那么神秘

很多人第一次看到这些名词:
Buildroot、U-Boot、Kernel、RootFS、BusyBox、SDK会觉得特别复杂,但如果拆开来看:
Buildroot → 负责造系统U-Boot → 负责启动系统Kernel → 负责管理硬件RootFS → 负责存放文件SDK → 负责调用芯片能力BusyBox → 负责提供基础命令其实每个组件都在解决非常具体的问题。理解了这些之后,你会发现Linux并不是一个神秘的黑盒,它更像是一套设计非常清晰的积木系统。而我们平时在地瓜芯片上做的开发,本质上就是在这套积木系统之上,不断搭建属于自己的应用。
作者简介
地瓜AI双目开发工程师,专注于双目立体视觉算法与端侧 AI 芯片技术,耕耘于机器人感知与 AI 芯片应用交叉领域,日常探索 Vibe Coding——用 AI 编程工具加速工程落地。写博客是想记录自己作为 AI 芯片开发工程师的真实思考:从算法到芯片,从代码到硬件,从单个模块到整机系统,踩过的坑、理清的脉络、获得的感悟。如果这些内容对你也有所启发,那就更好了。📝 本文在撰写过程中借助了 Claude Code 辅助完成内容组织与表达优化——AI 时代的工程实践,本身就是最好的 Vibe Coding 案例。项目开源地址:https://github.com/D-Robotics/DRobotics_SoC_Technology.git欢迎扫描关注,本文为原创文章,转载请注明作者和来源。也欢迎大家关注地瓜机器人官方微信公众号,获取更多机器人开发资讯与教程。