通过buildroot 构建根文件系统

如果想要构建完整的根文件系统,大家一般都是使用buildroot,它不仅包含了 busybox 的功能,而且里面还集成了各种软件,需要什么软件就选择什么软件,不需要我们去移植。

嵌入式系统三大部分:bootloader(uboot)、Linux内核、根文件系统。

制作根文件系统有三大神器:busybox、buildroot、yocto。

使用 busybox 构建文件系统,仅仅只是帮我们构建好了一些常用的命令和文件,像 lib 库、/etc 目录下的一些文件都需要自己手动创建,我们还要自己去移植一些第三方软件和库,比如 alsa、iperf、mplayer 等等。而且 busybox 构建的根文件系统默认没有用户名和密码设置。

如果想要构建完整的根文件系统,大家一般都是使用buildroot,它不仅包含了 busybox 的功能,而且里面还集成了各种软件,需要什么软件就选择什么软件,不需要我们去移植。buildroot 极大的方便了我们嵌入式 Linux 开发人员构建实用的根文件系统。

至于 yocto 构建根文件系统,过于复杂,需要时间也很久,我们一般不会选择这一种方式。

buildroot 下载

buildroot 源码肯定是要从 buildroot 官网下载,官网地址为 https://buildroot.org/。

下载后解压如图:

buildroot 和 uboot、Linux kernel 一样也支持图形化配置,输入如下命令即可打开图形化配置界:

make menuconfig

1、配置 Target options

Target options
 -> Target Architecture = ARM (little endian)  
 -> Target Binary Format = ELF
 -> Target Architecture Variant = cortex-A7
 -> Target ABI = EABIhf
 -> Floating point strategy = NEON/VFPv4
 -> ARM instruction set = ARM

2、配置 Toolchain

此配置项用于配置交叉编译工具链,设置为我们自己所使用的交叉编译器,必须是绝对路径。

目前,在ARM Linux的开发中,人们趋向于使用Linaro( http://www.linaro.org/ )工具链团队维护的ARM工具链,它以每月一次的 形式发布新的版本,编译好的可执行文件可从网址 http://www.linaro.org/downloads/ 下载。Linaro是ARM Linux领域中最著名最具技术成就的开源组织,其会员包括ARM、Broadcom、Samsung、TI、Qualcomm等,国内的海思、中兴、全志和中国台湾的MediaTek 也是它的会员。

一个典型的ARM Linux工具链包含arm-linux-gnueabihf-gcc(后续工具省略前缀)、strip、gcc、objdump、ld、gprof、nm、readelf、 addr2line等。前缀中的“hf”显 示该工具链是完全的硬浮点。

Toolchain
 -> Toolchain type = External toolchain
 -> Toolchain = Custom toolchain //用户自己的交叉编译器
 -> Toolchain origin = Pre-installed toolchain //预装的编译器
 -> Toolchain path =   //编译器绝对路径  
 -> Toolchain prefix = $(ARCH)-linux-gnueabihf //前缀
 -> External toolchain gcc version = 4.9.x
 -> External toolchain kernel headers series = 4.1.x
 -> External toolchain C library = glibc/eglibc  
 -> [*] Toolchain has SSP support? (NEW) //选中
 -> [*] Toolchain has RPC support? (NEW) //选中
 -> [*] Toolchain has C++ support? //选中
 -> [*] Enable MMU support (NEW) //选中

3、配置 System configuration

用于设置一些系统配置,比如开发板名字、欢迎语、用户名、密码等。

System configuration
-> System hostname = Jasonangel //平台名字,自行设置
-> System banner = Welcome to xxxxx //欢迎语
-> Init system = BusyBox //使用 busybox
-> /dev management = Dynamic using devtmpfs + mdev //使用 mdev
-> [*] Enable root login with password (NEW) //使能登录密码
 -> Root password = 123456 //登录密码为 123456

4、配置 Filesystem images

此选项配置我们最终制作的根文件系统为什么格式的,配置如下:

-> Filesystem images
-> [*] ext2/3/4 root filesystem //如果是 EMMC 或 SD 卡的话就用 ext3/ext4
 -> ext2/3/4 variant = ext4 //选择 ext4 格式
-> [*] ubi image containing an ubifs root filesystem //如果使用 NAND 的话就用 ubifs

5、禁止编译 Linux 内核和 uboot

buildroot 不仅仅能构建根文件系统,也可以编译 linux 内核和 uboot。当配置 buildroot,使能 linux 内核和 uboot 以后 buildroot 就会自动下载最新的 linux 内核和 uboot 源码并编译。但是我们一般都不会使用 buildroot 下载的 linux 内核和 uboot,因为 buildroot 下载的 linux 和 uboot官方源码,里面会缺少很多驱动文件,而且最新的 linux 内核和 uboot 会对编译器版本号有要求,可能导致编译失败。因此我们需要配置 buildroot,关闭 linux 内核和 uboot 的编译,只使用buildroot 来构建根文件系统,首先是禁止 Linux 内核的编译,配置如下:

-> Kernel  
-> [ ] Linux Kernel //不要选择编译 Linux Kernel 选项!

接着禁止编译 Uboot,配置如下:

-> Bootloaders  
-> [ ] U-Boot //不要选择编译 U-Boot 选项!

6、配置 Target packages

此选项用于配置要选择的第三方库或软件、比如 alsa-utils、ffmpeg、iperf、ftp、ssh等工具,可以按需选择。

配置完成以后就可以编译 buildroot 了,编译完成以后 buildroot 就会生成编译出来的根文件系统压缩包,我们可以直接使用。输入如下命令开始编译:

sudo make //注意,一定要加 sudo,而且不能通过-jx 来指定多核编译!!!

buildroot 编译过程会很耗时,请耐心等待!编译完成以后就会在 buildroot-2019.02.6/output/images 下生成根文件系统,即可使用。

编译过程需要一定的额外内存,注意需要留好内存,否则会报错如下:

g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report

buildroot 下的 busybox 配置

buildroot 在构建根文件系统的时候也是要用到 busybox 的,既然用到了 busybox 那么就涉及到 busybox 的配置。buildroot 会自动下载 busybox 压缩包,buildroot 下载的源码压缩包都存放在/dl 目录下,在 dl 目录下就有一个叫做“busybox”的文件夹,此目录下保存着 busybox 压缩包。

在 buildroot下打开 busybox 的配置界面输入如下命令:

sudo make busybox-menuconfig

输入以后就会打开 buildroot 下的 busybox 配置界面,需要什么功能,使能即可。可以在busybox中修改文件,使其对中文支持,这一点可以百度设置。

编译完毕以后,会生成 rootfs.tar,拷贝出来以后,可以对其进行解压然后使用nfs挂载到板子上,或者直接使用SD卡烧录。编译出来的文件系统即可使用,如果需要什么命令和工具,在 make menuconfig 中使能再次编译即可。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/220907.html<

(0)
管理的头像管理
上一篇2025-04-14 19:08
下一篇 2025-04-14 19:10

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注