文档章节

嵌入式Linux内核+根文件系统构建工具-Buildroot 快速入手指导

FreeBlues
 FreeBlues
发布于 2016/01/03 13:08
字数 1495
阅读 397
收藏 11

嵌入式Linux内核+根文件系统构建工具-Buildroot 快速入手指导

buildroot 是一款专门用来定制嵌入式 Linux 的内核和根文件系统(rootfs) 的开源工具, 非常强大兼方便, 不过对于新手来说, 过多的配置项明显有些难度, 本文的目标就是简要介绍这款工具, 让新手迅速入门.

目标:

  • 1 新手需要了解的2个目录和1个文件
    
  • 2 熟悉该工具的基本命令 ;
    
  • 3 构建出一个内核和一个根文件系统
    

练习:

  • 1 查看针对特定开发板的典型配置文件的选项
    
  • 2 利用工具自带的配置文件生成一个 Linux 内核和根文件系统;
    

首先是获取该工具, 在 github 上, 命令如下:

git clone https://github.com/buildroot/buildroot

进入目录, 查看:

pi@rpi /opt/github/buildroot $ ls -al
total 420
drwxr-xr-x   15 root root   4096 Dec 24 21:18 .
drwxr-xr-x   73 git  git    4096 Jan  3 08:01 ..
drwxr-xr-x    2 root root   4096 Dec 24 21:15 arch
drwxr-xr-x   25 root root   4096 Dec 24 21:15 board
drwxr-xr-x   15 root root   4096 Dec 24 21:15 boot
-rw-r--r--    1 root root 146433 Dec 24 21:15 CHANGES
-rw-r--r--    1 root root  44501 Dec 24 21:16 .config
-rw-r--r--    1 root root  19111 Dec 24 21:15 Config.in
-rw-r--r--    1 root root  42879 Dec 24 21:15 Config.in.legacy
drwxr-xr-x    2 root root   4096 Dec 24 21:15 configs
-rw-r--r--    1 root root  17987 Dec 24 21:15 COPYING
-rw-r--r--    1 root root   1246 Dec 24 21:15 .defconfig
drwxr-xr-x    5 root root   4096 Dec 24 21:15 docs
drwxr-xr-x   15 root root   4096 Dec 24 21:15 fs
drwxr-xr-x    8 root root   4096 Dec 24 21:18 .git
-rw-r--r--    1 root root    125 Dec 24 21:15 .gitignore
drwxr-xr-x    2 root root   4096 Dec 24 21:15 linux
-rw-r--r--    1 root root  34899 Dec 24 21:15 Makefile
-rw-r--r--    1 root root   2432 Dec 24 21:15 Makefile.legacy
drwxr-xr-x    3 root root   4096 Dec 24 21:18 output
drwxr-xr-x 1266 root root  36864 Dec 24 21:15 package
-rw-r--r--    1 root root    972 Dec 24 21:15 README
drwxr-xr-x   11 root root   4096 Dec 24 21:15 support
drwxr-xr-x    3 root root   4096 Dec 24 21:15 system
drwxr-xr-x    5 root root   4096 Dec 24 21:15 toolchain
pi@rpi /opt/github/buildroot $


1. 新手需要了解的2个目录和1个文件

先说目录:

  • 目录1: `configs`
    

一个是 configs 目录, 存放着工具提供的一些特定系统的构建配置, 换句话说就是一些使用比较广泛的 Linux 嵌入式系统的构建配置文件, 例如, 我们熟悉的树莓派1 raspberrypi_defconfig 和2 raspberrypi2_defconfig 的构建配置文件就在其中, 我们可以看一下内容:

pi@rpi /opt/github/buildroot $ ls ./configs
altera_sockit_defconfig        calao_usb_a9g20_lpw_defconfig        minnowboard_defconfig              qemu_ppc_virtex_ml507_defconfig
armadeus_apf27_defconfig       ci20_defconfig                       minnowboard_max_defconfig          qemu_sh4_r2d_defconfig
armadeus_apf28_defconfig       cubieboard2_defconfig                mx53loco_defconfig                 qemu_sparc_ss10_defconfig
armadeus_apf51_defconfig       cubieboard_defconfig                 nitrogen6x_defconfig               qemu_x86_64_defconfig
armadeus_apf9328_defconfig     freescale_imx28evk_defconfig         olimex_imx233_olinuxino_defconfig  qemu_x86_defconfig
arm_foundationv8_defconfig     freescale_imx31_3stack_defconfig     openblocks_a6_defconfig            qemu_xtensa_lx60_defconfig
at91rm9200df_defconfig         freescale_imx6dlsabreauto_defconfig  pandaboard_defconfig               qmx6_defconfig
at91sam9260dfc_defconfig       freescale_imx6dlsabresd_defconfig    qemu_aarch64_virt_defconfig        raspberrypi2_defconfig
at91sam9260eknf_defconfig      freescale_imx6qsabreauto_defconfig   qemu_arm_nuri_defconfig            raspberrypi_defconfig
at91sam9261ek_defconfig        freescale_imx6qsabresd_defconfig     qemu_arm_versatile_defconfig       raspberrypi_dt_defconfig
at91sam9263ek_defconfig        freescale_imx6sololiteevk_defconfig  qemu_arm_vexpress_defconfig        riotboard_defconfig
at91sam9g20dfc_defconfig       freescale_mpc8315erdb_defconfig      qemu_microblazebe_mmu_defconfig    s6lx9_microboard_defconfig
at91sam9g45m10ek_defconfig     freescale_p1010rdb_pa_defconfig      qemu_microblazeel_mmu_defconfig    sheevaplug_defconfig
atmel_xplained_defconfig       freescale_p2020ds_defconfig          qemu_mips64el_malta_defconfig      telit_evk_pro3_defconfig
beaglebone_defconfig           gnublin_defconfig                    qemu_mips64_malta_defconfig        ts5x00_defconfig
calao_qil_a9260_defconfig      integrator926_defconfig              qemu_mipsel_malta_defconfig        udoo_quad_defconfig
calao_snowball_defconfig       kb9202_defconfig                     qemu_mips_malta_defconfig          wandboard_defconfig
calao_tny_a9g20_lpw_defconfig  lego_ev3_defconfig                   qemu_ppc64_pseries_defconfig       zedboard_defconfig
calao_usb_a9260_defconfig      loongson1c_smartloong_defconfig      qemu_ppc_g3beige_defconfig
calao_usb_a9263_defconfig      mini2440_defconfig                   qemu_ppc_mpc8544ds_defconfig
pi@rpi /opt/github/buildroot $


  • 目录2: `output`
    

另一个是 output 目录, 存放着你构建好之后的输出, 在 output/images/ 目录下放着构建好的内核和根文件系统, 我们可以在开始构建之前看看该目录的结构:

pi@rpi /opt/github/buildroot $ tree ./output
./output
└── build
    └── buildroot-config
        ├── conf.o
        ├── lxdialog
        │   ├── checklist.o
        │   ├── inputbox.o
        │   ├── menubox.o
        │   ├── textbox.o
        │   ├── util.o
        │   └── yesno.o
        ├── mconf
        ├── mconf.o
        ├── zconf.hash.c
        ├── zconf.lex.c
        └── zconf.tab.o

3 directories, 12 files
pi@rpi /opt/github/buildroot $


  • 文件: `.config`
    

一个文件就是 .config, 它就是构建时使用的配置文件, 举个例子, 如果我们打算使用工具自带的配置文件来构建树莓派2的内核和根文件系统, 那么首先把它从 configs 目录拷出来, 覆盖掉当前目录下的 .config 文件, 命令如下:

cp ./configs/ raspberrypi2_defconfig ./.config

讲解了简单的2个目录和1个文件, 接下来说一下基本命令

2. 熟悉该工具的基本命令

buildroot 基本的命令就是 make, 对于新手来说只需要执行2次:

  • 第1次带参数执行用来定制系统:
    

定制系统的命令为:

make menuconfig

执行后会启动一个配置菜单, 进去之后可以根据你自己的需要增加或裁剪系统功能, 然后选择保存, 所有的配置会被保存为当前目录下的 .config 文件.

执行界面就是这个样子: 执行界面

也可以通过 load 选项加载工具自带的配置文件, 看看典型配置是什么样的.

  • 第2次不带参数执行用来构建系统:
    

构建命令为:

make

会构建比较长的时间, 构建完成后可以查看刚才说过的 ./output/images/ 目录, 恰好我刚刚完成一次对龙芯智龙开源开发板的根文件系统构建, 我们可以看看:

git@debian:/opt/github/pengphai-buildroot$ ls -al ./output
总用量 28
drwxr-xr-x  6 git git 4096 8月   6 06:51 .
drwxr-xr-x 16 git git 4096 8月   6 06:51 ..
drwxr-xr-x 54 git git 4096 8月   6 07:36 build
drwxr-xr-x  5 git git 4096 8月   6 07:12 host
drwxr-xr-x  2 git git 4096 8月   6 07:36 images
lrwxrwxrwx  1 git git   81 8月   6 06:51 staging -> /opt/github/pengphai-buildroot/output/host/usr/mipsel-buildroot-linux-gnu/sysroot
drwxr-xr-x 19 git git 4096 8月   6 07:36 target
git@debian:/opt/github/pengphai-buildroot$ ls -al ./output/images
总用量 22956
drwxr-xr-x 2 git git     4096 8月   6 07:36 .
drwxr-xr-x 6 git git     4096 8月   6 06:51 ..
-rw------- 1 git git 23498112 8月   6 07:36 rootfs.yaffs2img
git@debian:/opt/github/pengphai-buildroot$

3. 构建出一个内核和一个根文件系统

命令很简单, 我们以树莓派2为例, 直接使用工具自带的配置文件, 命令如下:

pi@rpi /opt/github/buildroot $ sudo cp ./configs/raspberrypi2_defconfig ./config
pi@rpi /opt/github/buildroot $ sudo make

我是在树莓派2上执行的构建, 所以应该会有一个漫长的构建过程

===补充说明, 刚发现树莓派2的配置文件还有很多项没配置, 需要用户选择, 后续我写一个完全配置好的, 这个例子只会让新手疑惑

--结束

© 著作权归作者所有

FreeBlues
粉丝 99
博文 280
码字总数 493678
作品 0
其它
程序员
私信 提问
4 种用于构建嵌入式 Linux 系统的工具

了解 Yocto、Buildroot、 OpenWRT,和改造过的桌面发行版以确定哪种方式最适合你的项目。 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备。令人震惊的支持了各种芯...

06%
2018/07/06
0
0
构建嵌入式 Linux 系统的4种有效工具

导读 了解 Yocto、Buildroot、 OpenWRT,和改造过的桌面发行版以确定哪种方式最适合你的项目。 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备。令人震惊的支持了...

问题终结者
2018/07/14
103
0
嵌入式Linux系统生成工具 - Buildroot

Buildroot 是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一...

匿名
07/06
580
0
BuildRoot FOR BeagleBone

BeagleBone 刚买没两天,里面配的是AngStorm 系统,也是基于Linux 内核的一种嵌入式发行版本,这里就不展开了,另有文章介绍。这里要说的是BuildRoot ,Why BuildRoot? 吸引我的首先是其对B...

Cedric_Sun
2013/01/26
2.8K
2
从零开始构建嵌入式系统实践指南

近期花费了一段时间从零搭建一个嵌入式系统,从Uboot,Kernel,文件系统的编译到配置一步一步的实践,采坑到现在的顺理成章,经历了一个痛苦的过程,因此把搭建过程中的经验整理成了一篇详细...

程序手艺人
2018/08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部