Buildroot构建嵌入式Linux系统介绍

        如果同学们想要做嵌入式Linux系统开发,强烈建议对Buildroot的使用很熟练,Buildroot可以让我们的工作效率成倍的提升。本文以RK3308平台为例介绍Buildroot的基本开发。

1、Buildroot介绍

        buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。

 1.1 Buildroot目录介绍

       进入Buildroot目录后,会看到如下目录结构:

       arch          存放CPU架构相关的配置脚本,如arm/mips/x86, 这些CPU相关的配置

       board         不同开发板的配置

       build         存放解压后的各种软件包编译完成后的现场

       configs       放置开发板的一些配置参数

       dl            存放下载的源代码及应用软件的压缩包

       docs          存放相关的参考文档

       fs            放各种文件系统的源代码

       linux         存放着Linux kernel的自动构建脚本

       Makefile      编译脚本

       output        是编译出来的输出文件夹,可以在这里进行编译

       package       所有的用户空间包、busybox/gcc/qt等

       support       工具libtool patchs等

       system        根目录骨架,制作根目录时先将该处的文件拷贝到output作为基础

       toolchain     交叉编译工具链 

2、Buildroot配置

#source build/envsetup.sh   //选择需要的默认配置(如rockchip_rk3308_release_defconfig)来编译buildroot

#make menuconfig  //打开图示配置如下

Target options  --->选择目标板架构特性。
Build options  --->配置编译选项。
Toolchain  ---> 配置交叉工具链,使用buildroot工具链还是外部提供。
System configuration  --->可设置主机系统相关。
Kernel  --->无需配置
Target packages  --->所有应用包以及第三方开源工具和库相关配置。
Filesystem images  --->配置文件系统格式相关
Bootloaders  --->无需配置
Host utilities  --->无需配置
Legacy config options  --->无需配置

​

2.1 进入target options

           配置CPU参数:little endian 指的是小端存储;二进制格式是ELF;CPU是Cortex-A35;浮点书处理采用VFP-v4;

2.2 进入toolchain

         根据toolchain位置不同,可将Toolchain Type配置成Buildroot toolchain (或者 External toolchain,然后在Toolchain中选择交叉编译工具的版本,如Custom toolchain,在Toolchain origin中选择Pre-installed toolchain,后面编译时,buildroot将会根据Toolchain path找到我们的交叉编译工具)。选中Enable MMU support,退回上一界面;

 

2.3 进入System configuration

           在system hostname一栏中输入开发板的名称,如rockchip,在system banner中可输入欢迎语,如welcome to Rochchip。在Init system中选择BusyBox,在/dev management中选择Dynamic using devtmpfs + eudev,然后在Path to thepermission tables中选择设备节点的配置表,这里我们一定要选择system/device_table_dev.txt,否则后面在dev目录下将不会生成各 种设备节点。当然我们也可以手动的配置该文件,添加必要的节点或删除不需要的节点。使能Enable root login with passwd0,Root password为配置进入linux控制台终端后的密码,为空则登录时不需要密码,默认登录用户名为root。

2.4 进入target packages

        在target packages目录下,有一大堆第三方的开源工具软件,基本上嵌入式上可能会用到得或用不到的,在这里都用,如果你想要把这个工具软件包含进固件里面,很简单,只要在这个软件的名称前面打个*星号,表示要编译这个软件到固件里面。你也可以在这里面添加自己写的App应用。

执行以下命令,将会保存当前配置到buildroot/configs/目录,下次编译的时候会使用此默认配置。

#make  savedefconfig

3、Buildroot编译

 只需在buildroot的根目录下执行make指令即可编译整个buildroot。

 #make

Buildroot 输出结果保存在 output 目录,具体目录由配置文件决定。 例如,编译配置rockchip_rk3308_release,输出结果保存在buildroot/output/rockchip_rk3308_release目录。

后续编译可以在buildroot/output/rockchip_rk3308_release目录或是工程根目录下执行(make menuconfig也可以在工程根目录下执行),这个目录底下包括几个子目录:

image/:包含压缩好的根文件系统镜像文件。
build/: 包含所有的源文件,包括 Buildroot 所需主机工具和选择的包,这个目录包含所有模块源码。
staging/:这个目录类似根文件系统的目录结构,包含编译生成的所有头文件和库,以及其他 开发文件,不过他们没有裁剪,比较庞大,不适用于目标文件系统。

buildroot下make使用说明:

Cleaning:
  clean                  - delete all files created by build
  distclean              - delete all non-source files (including .config)

Build:
  all                    - make world
  toolchain              - build toolchain

Configuration:
  menuconfig             - interactive curses-based configurator--------------------------------对整个buildroot进行配置
  savedefconfig          - Save current config to BR2_DEFCONFIG (minimal config)----------------保存menuconfig的配置

Package-specific:-------------------------------------------------------------------------------对package配置
  <pkg>                  - Build and install <pkg> and all its dependencies---------------------单独编译对应APP
  <pkg>-source           - Only download the source files for <pkg>
  <pkg>-extract          - Extract <pkg> sources
  <pkg>-patch            - Apply patches to <pkg>
  <pkg>-depends          - Build <pkg>'s dependencies
  <pkg>-configure        - Build <pkg> up to the configure step
  <pkg>-build            - Build <pkg> up to the build step
  <pkg>-show-depends     - List packages on which <pkg> depends
  <pkg>-show-rdepends    - List packages which have <pkg> as a dependency
  <pkg>-graph-depends    - Generate a graph of <pkg>'s dependencies
  <pkg>-graph-rdepends   - Generate a graph of <pkg>'s reverse dependencies
  <pkg>-dirclean         - Remove <pkg> build directory-----------------------------------------清除对应APP的编译目录
  <pkg>-reconfigure      - Restart the build from the configure step
  <pkg>-rebuild          - Restart the build from the build step--------------------------------单独重新编译对应APP

busybox:
  busybox-menuconfig     - Run BusyBox menuconfig

uclibc:
  uclibc-menuconfig      - Run uClibc menuconfig

linux:
  linux-menuconfig       - Run Linux kernel menuconfig-----------------------------------------配置Linux并保存设置
  linux-savedefconfig    - Run Linux kernel savedefconfig
  linux-update-defconfig - Save the Linux configuration to the path specified
                             by BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE

Documentation:
  manual                 - build manual in all formats
  manual-pdf             - build manual in PDF
  graph-build            - generate graphs of the build times----------------------------------对编译时间、编译依赖、文件系统大小生成图标
  graph-depends          - generate graph of the dependency tree
  graph-size             - generate stats of the filesystem size

4、如何增加自己的应用程序

要添加自己的本地APP, 首先在package/Config.in中添加指向新增APP目录的Config.in;

然后在package中新增目录helloworld,并在里面添加Config.in和helloworld.mk;

举例说明:

需要添加自己的应用程序mydemo

1,创建工程

buildroot/package/rockchip/mydemo/

2,新建Config.in

config BR2_PACKAGE_MYDEMO
bool "Simple My Demo"

3,新建mydemo.mk,添加以下内容


##################################################
###########
#
## mydemo
#
###################################################
###########
ifeq ($(BR2_PACKAGE_MDEMO), y)
    MYDEMO_VERSION:=1.0.0
    MYDEMO_SITE=$(TOPDIR)/../external/mydemo/
    MYDEMO_SITE_METHOD=local
define MYDEMO_BUILD_CMDS
    $(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) CXX=$(TARGET_CXX) -C $(@D)
endef
define MYDEMO_CLEAN_CMDS
    $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) clean
endef
define MYDEMO_INSTALL_TARGET_CMDS
    $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install
endef
define MYDEMO_UNINSTALL_TARGET_CMDS
    $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) uninstall
endef
$(eval $(generic-package))
endif

4,创建源码目录

external/mydemo/

5,将编写的源码文件和Makefile文件添加到external/mydemo/目录

6,将新建的包加入到Buildroot编译系统内,修改package/rockchip/Cnfig.in,最后加入如下行

source "package/rockchip/fireflydemo/Config.in"

7,执行make menuconfig  选择上mydemo 应用包

# make menuconfig 

8,编译:

#make mydemo-dirclean && make mydemo   //生成二进制执行文件到buildroot/output/rockchip_rk3308_release/target/usr/bin/

9,打包进文件系统:

#make

10,打包整个工程生成 img镜像,烧录到开发板即可运行,也可通过NFS文件系统将生成的二进制mydemo 拷贝到开发板运行。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值