0

0

怎么使用 Buildroot 构建根文件系统

星夢妙者

星夢妙者

发布时间:2025-07-15 10:04:49

|

881人浏览过

|

来源于php中文网

原创

  1. Buildroot 简介

构建根文件系统有多种方法:

① 使用Busybox手工制作:Busybox本身包含了许多Linux命令,但如果需要编译其他程序,则需要手动下载、编译这些程序及其依赖库。如果想要构建一个极简的文件系统,可以使用Busybox手工制作。

② 使用Buildroot自动制作:这是一个自动化程度很高的系统,可以在其中配置、编译内核,配置编译u-boot、配置编译根文件系统。在编译某些应用程序时,Buildroot会自动下载源码及其依赖库,并自动编译这些程序。Buildroot的语法与一般的Makefile语法类似,易于掌握。

③ 使用Yocto:NXP、ST等公司的官方开发包使用Yocto,但Yocto语法复杂,且需要约10GB的空间,下载和安装都很困难,普通笔记本电脑可能需要2-3天甚至更长时间来编译,非常不适合初学者(我们不推荐使用Yocto构建文件系统)。

基于上述特点,我们选择了Buildroot。

Buildroot是一组Makefile和补丁,可以简化并自动化地为嵌入式系统构建完整的、可启动的Linux环境(包括bootloader、Linux内核、包含各种应用程序的文件系统)。Buildroot运行于Linux平台,可以使用交叉编译工具为多个目标板构建嵌入式Linux平台。Buildroot可以自动构建所需的交叉编译工具链,创建根文件系统,编译Linux内核映像,并生成引导加载程序用于目标嵌入式系统,或者它可以执行这些步骤的任何独立组合。例如,可以单独使用已安装的交叉编译工具链,而Buildroot仅创建根文件系统。

参考网址:

百问网提供的Buildroot现支持如下包:

怎么使用 Buildroot 构建根文件系统

  1. 系统特征讲解

我们对系统进行了哪些改进?我们基于Buildroot官方2020.02长期支持版本进行了适配,针对100ask-stm32mp1mp157-pro开发板进行了大量的裁剪,在保证最小系统的基础上增加了对qt5.12 eglfs库的支持,同时也支持opencv3编程、mqtt库、swupdate ota升级等常用应用。我们还将提供如何在Buildroot中添加自己的软件包的教程,同时源码保存在gitee上,链接地址为https://gitee.com/weidongshan/ST-Buildroot.git,大家可以在上面提交issue或pull request。

init(为英语:initialization的简写)是Unix和类Unix系统中用来产生其他所有进程的程序。它以守护进程的方式存在,其进程号为1。Linux系统在引导时加载Linux内核后,便由Linux内核加载init程序,由init程序完成余下的引导过程,比如加载运行级别,加载服务,引导Shell/图形化界面等。

什么是System V守护进程?System V(缩写为SysV)在大多数Linux发行版中使用最广泛。在System V中,有一个第一个程序在内核加载后运行。该程序称为init。Init做一些事情,其中之一就是加载一系列脚本来启动各种系统服务,例如网络、ssh守护进程等。System V中的运行级别描述了某些状态。例如:

  • 运行级别0:暂停
  • 运行级别1:单用户模式
  • 运行级别6:重新启动

System V的问题在于它需要仔细调整。假设您有一个要在启动时运行的网络文件系统(NFS)客户端。在网络正常工作之前运行NFS没有任何意义。因此,您必须确保它等待启动,直到网络已经正常工作为止。System V init这样做的方法是为服务启动设置严格的顺序。每个服务都分配有一个优先级编号,init会按优先级顺序启动服务。如果需要确保网络连接后启动服务,则必须手动为服务分配更高的优先级。这必须由某人(通常是软件包维护者)针对计算机上运行的每项服务来完成。

怎么使用 Buildroot 构建根文件系统

所有System V初始化脚本都存储在/etc/rc.d/init.d/或/etc/init.d目录中。这些脚本用于控制系统的启动和关闭。通常,您会在这个目录找到启动ssh服务器或网络的脚本,使用/etc/init.d/S50sshd start开启某个服务或者使用/etc/init.d/S50sshd stop关闭某个服务。

什么是systemd守护进程?systemd这一名字源于Unix中的一个惯例:在Unix中常以“d”作为系统守护进程(英语:daemon,亦称后台进程)的后缀标识。除此以外,systemd亦是借代英文术语D体系,而这一术语即是用于描述一个人具有快速地适应环境并解决困难的能力。

systemd是Linux电脑操作系统之下的一套中央化系统及设置管理程序(init),包括有守护进程、程序库以及应用软件,由Lennart Poettering带头开发。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。目前绝大多数的Linux发行版都已采用systemd代替原来的System V。

怎么使用 Buildroot 构建根文件系统

将service(服务)、target(运行模式,类似于运行级别)、mount、timer、snapshot、path、socket、swap等称为Unit。比如,一个auditd服务(就是auditd.service)就是一个Unit,一个multi-user.target运行模式也是一个Unit,其中不同的服务通过systemctl来进行统一管理,例如重启一个sshd服务,需要执行systemctl restart sshd命令,同样地,如果添加一个启动程序需要自己定义一个service服务才可以。

你可以用我们提供的Buildroot做些什么?快速实现自己的想法,增加自己的应用,学习了解Busybox以及各种包是如何编译生成,用于调试内核或者应用程序等。

ECTouch移动商城系统
ECTouch移动商城系统

ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有

下载
  1. 配置文件说明

下面介绍如何构建100ASK_STM32MP157_PRO全功能版的根文件系统。

怎么使用 Buildroot 构建根文件系统

  1. 编译系统

下面以100ask_stm32mp157_pro_ddr512m_systemD_qt5_defconfig配置文件为例,说明Buildroot的配置编译过程:

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make 100ask_stm32mp157_pro_ddr512m_systemD_qt5_defconfig
book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make all

怎么使用 Buildroot 构建根文件系统

注意:编译时需要联网,需要下载某些文件,由于机器性能不同,编译时间不同。性能较差的电脑,可能需要等待5 ~ 6个小时。

编译完成后终端提示如下图所示。

怎么使用 Buildroot 构建根文件系统

  1. 镜像文件

编译成功后文件输出路径为output/images

怎么使用 Buildroot 构建根文件系统

可以参考《第七章 烧写整个系统或更新部分系统》把上面编译出来的100ask-stm32mp157-pro-512dv1-tfa.img烧写到SD/TF卡,即可通过TF卡启动开发板进入系统。

  1. 扩展学习

深入了解学习更多关于Buildroot知识请参考:https://www.php.cn/link/4ee81d87959972ec4f7d90fae46639f5

Buildroot下进入menuconfig包选择配置配置界面:

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make menuconfig

Buildroot下单独编译内核:

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make linux-rebuild

Buildroot下进入内核make menuconfig配置选项界面:

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make linux-menuconfig

Buildroot下单独编译u-boot:

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make uboot-rebuild

Buildroot下单独编译某个软件包:

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make -rebuild

Buildroot下进入Busybox配置界面:

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make busybox-menuconfig

Buildroot下生成系统SDK,最后生成的目录在output/images/目录下:

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make sdk

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

639

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

526

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

264

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

549

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

513

2024.04.09

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

357

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

410

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

1867

2024.03.12

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.6万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

NumPy 教程
NumPy 教程

共44课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号