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

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

[[406899]]

嵌入式系统三大部分: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.

 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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

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) //选中 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

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 
  • 1.
  • 2.
  • 3.
  • 4.

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 选项! 
  • 1.
  • 2.

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

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

6、配置 Target packages

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

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

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

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

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

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

buildroot 下的 busybox 配置

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

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

sudo make busybox-menuconfig 
  • 1.

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

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

本文转载自微信公众号「嵌入式Linux系统开发」,可以通过以下二维码关注。转载本文请联系嵌入式Linux系统开发公众号。

 

责任编辑:姜华 来源: 嵌入式Linux系统开发
相关推荐

2012-01-11 13:40:35

移动应用云服务

2021-08-09 13:31:25

PythonExcel代码

2022-10-19 14:30:59

2015-07-20 14:15:28

Spring ClouDocker微服务

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2021-02-06 14:55:05

大数据pandas数据分析

2022-08-04 10:39:23

Jenkins集成CD

2022-03-29 11:11:11

TortoisGitGitee码云

2009-04-22 09:17:19

LINQSQL基础

2021-05-10 06:48:11

Python腾讯招聘

2021-01-21 09:10:29

ECharts柱状图大数据

2021-01-08 10:32:24

Charts折线图数据可视化

2021-02-10 09:34:40

Python文件的压缩PyCharm

2020-03-08 22:06:16

Python数据IP

2021-12-11 20:20:19

Python算法线性

2021-08-02 23:15:20

Pandas数据采集

2021-02-02 13:31:35

Pycharm系统技巧Python

2017-10-27 10:29:35

人脸识别UbuntuPython

2021-06-05 23:51:21

ECharts气泡图散点图
点赞
收藏

51CTO技术栈公众号