教你用 buildroot 构建根文件系统

news/2024/7/2 17:01:56
如果想要构建完整的根文件系统,大家一般都是使用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 构建根文件系统教你用 buildroot 构建根文件系统

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

make menuconfig 

教你用 buildroot 构建根文件系统教你用 buildroot 构建根文件系统

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 中使能再次编译即可。


http://lihuaxi.xjx100.cn/news/284467.html

相关文章

字节跳动的面试题.pdf

来源:https://zhuanlan.zhihu.com/p/82871762一、算法题一面:1. lc 里最长上升子序列的变形题2. 实现输入英文单词联想的功能二面:1.矩阵旋转,要求空间复杂度 O(1)2.无序的数组的中位数。要求时间复杂度尽可能的小二、计算机网络…

回顾与展望:大热的AutoML究竟是什么? | 技术头条

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑来源 | 第四范式编者按:AutoML(Automatic Machine Learning,自动机器学习)旨在研究在没有专业知识的情况下使用的低门槛甚至零门槛的…

学习SQLite之路(五) C/C++ SQLite开发实例

介绍一种乌班图中使用sqlite的用法,非常简单,下面的例子是在乌班图12.04中实现的: 1,先安装两个东西: sudo apt-get install sqlite sqlite3 sudo apt-get install libsqlite3-dev // 不然可能会报 没有头文件 sqlite…

如何在FreeBSD中安装Nginx,MySQL,PHP(FEMP)

本文介绍如何在FreeBSD 13系统中安装Nginx、MySQL、和PHP服务。 系统环境 FreeBSD 13.0-RELEASE 更新系统 在安装任何软件之前更新系统是一个好习惯,以便检查系统更新: rootfreebsd:~ # freebsd-update fetch rootfreebsd:~ # freebsd-update instal…

程序员到新公司后第一周该干些什么?不该干些什么?

转自:网络不管你是打算进公司实习的大学生,还是刚跳槽的职场人士,进入新公司的第一周,面对完全不熟悉的环境和团队,陌生感是必然的。我们有一些建议,让你看起来不会像个“局外人”。01 熟悉环境虽然你之前因…

百度发的208亿春晚红包,靠这样的技术送到了你手上 | 解读

2019 年的春晚红包项目对百度而言是一次大考,背后需要强大的技术来支撑。如你所见,百度不负“技术大厂”的标签,春晚红包期间系统稳定运行,没有出现宕机事故。在这样一个庞大而复杂的项目面前,他们是如何去用技术去化解…

Java非阻塞I/O模型之NIO说明

在了解NIO (Non-Block I/O) 非阻塞I/O模型之前,我们可以先了解一下原始的BIO(Block I/O) 阻塞I/O模型,NIO模型能够以非阻塞的方式更好的利用服务器资源,需要的朋友可以参考下 组件说明 (1)Channel:NIO模型中的管道,管道是链接建立…

假如曹操是一名程序员,会发生什么?

点击上方蓝色“视学算法”,选择“设为星标” 来源 | W3CSchool 东汉网络科技有限公司,本来是一家名扬四海的家族企业,可由于近几年来,越来越多的亲戚,在公司担任重要岗位,真正的人才越来越少,东…