新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用Buildroot进行根文件系统构建

发布时间:2026/11/12 8:23:01来源:尧图网络
使用Buildroot进行根文件系统构建
前面我们学习了如何使用 busybox 来构建根文件系统,但是 busybox 构建的根文件系统不齐全,很多东西需要我们自行添加,比如 lib 库文件。在我们后面的驱动开发中很多第三方软件也需要我们自己去移植,这些第三方软件有很多又依赖其他的库文件,导致移植过程非常的繁琐。本章我们来学习一下另外一种实用的根文件系统构建方法,那就是使用 buildroot 来构建根文件系统。Buildroot 是一个流行的嵌入式 Linux 系统构建工具,它可以帮助开发者自动化地构建完整的嵌入式 Linux 系统,包括文件系统、内核以及各种用户空间应用程序。直接使用busybox也能构建最小rootfs,使用buildroot也需要使用busybox来构建基础的rootfs,区别在于buildroot已经集成了很多第三方package,可以很方便的进行集成,make menuconfig简单的使能一下,就可以快速集成,不需要去研究第三方组建,复杂的编译流程,及其复杂的依赖项。注意:不要以为busybox直接就能构建根文件系统!!!这个误解非常常见,很多刚接触嵌入式 Linux 的人都会这么想,主要是名字和教程给人的错觉,咱们把边界再理清楚一点:核心一句话BusyBox不能直接一键产出完整可用的根文件系统镜像。它只产出一个主程序 busybox+ 配套软链接(ls、sh、cp、date、wpa_cli 等)。它是 rootfs 的核心组件,不是 rootfs 的构建框架。那为什么很多教程会说 “用 BusyBox 做根文件系统”?准确的意思是:以 BusyBox 为基础,手动搭建 rootfs,而不是 BusyBox 自动帮你做完。手动流程大概是这样(没有 Buildroot 的情况下):交叉编译 BusyBox,得到busybox可执行文件;手动创建一套目录:bin、sbin、etc、dev、proc、sys;自己创建软链接:ln -s busybox ls、ln -s busybox sh;自己写启动脚本:etc/inittab、etc/init.d/rcS;拷贝 C 库(libc、ld)到 lib 目录;用工具(genext2fs、cpio)打包成镜像。👉 BusyBox 只负责第 1、3 步;剩下目录、脚本、库、打包,全都要你自己来。如果你只编译了 busybox,丢到板子上,没有/etc/inittab、没有库,板子是启动不起来的。对比 BuildrootBuildroot 把上面所有步骤自动化了:它会自动:编译 BusyBox → 建目录 → 生成软链接 → 生成 inittab/rcS → 拷贝库 → 打包镜像。所以 Buildroot 才是 “构建根文件系统” 的工具,BusyBox 是它里面的一个包。一个好记的区分BusyBox:提供命令和 shell;Buildroot:把 BusyBox、内核、应用、脚本、库拼起来,做成可以烧录的固件。补充一个小坑BusyBox 自己的make menuconfig,只是选择启用哪些命令(要不要 date、要不要 wpa_cli),配置完 make,输出只有 busybox 二进制,不会生成完整 rootfs 目录和镜像。busybox这种一个可执行程序,不同名称软链接进去就执行不同的内容,这个机制是咋实现的,同一个名字还能执行不同的代码BusyBox 这个单文件,启动的时候,程序先拿到自己的「程序名(argv [0])」,根据名字分支跳转到不同的函数执行。Linux 下,进程启动时,main函数的第一个参数argv[0],就是调用它用的文件名。int main(int argc, char *argv[]) { // argv[0] 就是你执行的命令名字:"ls" / "cp" / "date" }举个直观场景你做软链接:ln -s busybox ls ln -s busybox date ln -s busybox wpa_cli文件系统上:ls、date都指向同一个busybox二进制。执行./ls内核加载 busybox 这个程序,但传给 main 的 argv [0] = "ls";BusyBox 内部查表,识别名字是ls,就跑 ls 对应的代码逻辑。执行./date同样加载同一个 busybox 二进制,argv [0] = "date";内部匹配名字,跑 date 的代码。二进制本体没有复制多份,只是入口名字不一样,代码自己分支。BusyBox 内部大概伪代码(简化版)int main(int argc, char *argv[]) { const char *cmd_name = basename(argv[0]); if (strcmp(cmd_name, "ls") == 0) { return ls_main(argc, argv); } else if (strcmp(cmd_name, "date") == 0) { return date_main(argc, argv); } else if (strcmp(cmd_name, "wpa_cli") == 0) { return wpa_cli_main(argc, argv); } // ...一大堆命令分支 else { // 直接运行 busybox 本身,打印帮助 return busybox_main(argc, argv); } }每个命令都有独立的xxx_main()函数,编译时全部链接进同一个 elf。为啥argv[0]存的是软链接的名字,那要是直接执行busybox呢?先说核心argv[0]是调用方(shell/exec 系统调用)传进去的字符串,不是内核从二进制文件里读出来的固定名字。Linux 的execve系统调用原型:int execve(const char *filename, char *const argv[], char *const envp[]);filename:内核要加载的真实文件路径(会解析软链接,找到 busybox 本体)argv数组:由调用者自己填,内核不主动改写它情况 1:直接执行 busybox./busyboxshell 调用execve:filename =./busybox(真实文件)argv[0] =./busyboxBusybox 拿到basename(argv[0])是"busybox",就进入 busybox 主逻辑,打印帮助信息。情况 2:通过软链接执行ln -s busybox ls ./lsshell 调用execve:filename =./ls,内核解析软链接,找到真实文件busybox,加载它argv[0] =./ls(shell 把你敲的命令字符串原样放进 argv [0])Busybox 取名字"ls",匹配 ls 的函数。关键点:
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/11 9:31:44

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/11 5:36:08

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/11 15:37:39

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉