The Buildroot user manual

The Buildroot user manual

https://buildroot.org/downloads/manual/manual.html

 

Firefly-RK3288 Manual >> Buildroot 开发

编译软件包

我们可以执行 make <package> 单独编译某个软件包。软件包的编译主要包括下载,解压,打补丁,配置,编译,安装等过程,具体可以查看 package/pkg-generic.mk

  • 下载

    Buildroot 会根据配置 package/<package>/<package>.mk,自动从网络获取对应的软件包,包括一些第三方库,插件,实用工具等,放在 dl/ 目录。

  • 解压

    软件包会解压在 output/rockchip_rk3288/build/<package>-<version> 目录下。

  • 打补丁

    补丁集中放在 package/<packgae>/ 目录,Buildroot 会在解压软件包后为其打上相应的补丁。如果要修改源码,可以通过打补丁的方式进行修改。

  • 配置

  • 编译

  • 安装

    编译完成后,会将需要的编译生成文件拷贝到 output/rockchip_rk3288/target/ 目录。

对于某个软件包,我们可以通过 make <package>-<target> 调用软件包构建中的某一步骤,如下:

Package-specific:
  <pkg>                  - Build and install <pkg> and all its dependencies
  <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>-graph-depends    - Generate a graph of <pkg>'s dependencies
  <pkg>-dirclean         - Remove <pkg> build directory
  <pkg>-reconfigure      - Restart the build from the configure step
  <pkg>-rebuild          - Restart the build from the build step

编译输出目录

编译完成后,在编译输出目录 output/rockchip_rk3288 会生成子目录,说明如下:

  • build/ 包含所有的源文件,包括 Buildroot 所需主机工具和选择的软件包,这个目录包含所有软件包源码。

  • host/ 主机端编译需要的工具,包括交叉编译工具。

  • images/ 包含压缩好的根文件系统镜像文件。

  • staging/ 这个目录类似根文件系统的目录结构,包含编译生成的所有头文件和库,以及其他开发文件,不过他们没有裁剪,比较庞大,不适用于目标文件系统。

  • target/ 包含完整的根文件系统,对比 staging/,它没有开发文件,不包含头文件,二进制文件也经过 strip 处理。

交叉编译工具

Buildroot 编译完成后,会在 output/rockchip_rk3288/host/ 目录下,生成交叉编译工具,我们可以用来编译目标程序。

  • 交叉编译工具目录

output/rockchip_rk3288/host/bin/

  • 编译示例 hello.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        printf("Hello World!\n");
        return 0;
}
  • 编译

.../host/bin/arm-buildroot-linux-gnueabihf-gcc hello.c -o hello
  • 运行

将可执行程序 hello 拷贝到设备,运行 ./hello,则会看到打印信息 Hello World!

 

新增本地源码包

开发过程中,Buildroot 自带的软件包有时可能无法满足我们的需求,为此我们需要添加自定义的软件包。Buildroot 支持多种格式的软件包,包括 generic-package、cmake-package、autotools-package 等,我们以 generic-package 举例说明。

  • 创建工程目录

cd path/to/SDK/
mkdir buildroot/package/rockchip/firefly_demo/
  • 新建 Config.in

firefly_demo/ 下添加 Config.in:

config BR2_PACKAGE_FIREFLY_DEMO
        bool "Simple Firefly Demo"
  • 新建 firefly_demo.mk

firefly_demo/ 下添加 firefly_demo.mk:

##################################################
###########
#
### firefly_demo
#
##################################################
###########
ifeq ($(BR2_PACKAGE_FIREFLY_DEMO), y)

        FIREFLY_DEMO_VERSION:=1.0.0
        FIREFLY_DEMO_SITE=$(TOPDIR)/../external/firefly_demo/src
        FIREFLY_DEMO_SITE_METHOD=local

define FIREFLY_DEMO_BUILD_CMDS
        $(TARGET_MAKE_ENV) $(MAKE) CC=$(TARGET_CC) CXX=$(TARGET_CXX) -C $(@D)
endef

define FIREFLY_DEMO_CLEAN_CMDS
        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) clean
endef

define FIREFLY_DEMO_INSTALL_TARGET_CMDS
        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install
endef

define FIREFLY_DEMO_UNINSTALL_TARGET_CMDS
        $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) uninstall
endef

$(eval $(generic-package))
endif
  • 创建源码目录

上文的 Makefile 文件里已经指定了源码目录 external/firefly_demo/src

cd path/to/SDK/
mkdir external/firefly_demo/src
  • 编写源码 firefly_demo.c

firefly_demo/src/ 下添加 firefly_demo.c:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        printf("Hello World!\n");
        return 0;
}
  • 编写 Makefile

firefly_demo/src/ 下添加 Makefile:

DEPS =
OBJ = firefly_demo.o
CFLAGS =
%.o: %.c $(DEPS)
        $(CC) -c -o $@ $< $(CFLAGS)

firefly_demo: $(OBJ)
        $(CXX) -o $@ $^ $(CFLAGS)

.PHONY: clean
clean:
        rm -f *.o *~ firefly_demo

.PHONY: install
install:
        cp -f firefly_demo $(TARGET_DIR)/usr/bin/

.PHONY: uninstall
uninstall:
        rm -f $(TARGET_DIR)/usr/bin/firefly_demo
  • 修改上一级 Config.in

buildroot/package/rockchip/Config.in 末尾添加一行:

source "package/rockchip/firefly_demo/Config.in"
  • 配置软件包

打开配置菜单 make menuconfig,找到 firefly_demo 并选中配置。

  • 编译

# 编译 firefly_demo
make firefly_demo
# 打包进根文件系统
make
# 若修改源码,重新编译软件包
make firefly_demo-rebuild

 

http://wiki.t-firefly.com/zh_CN/Firefly-RK3288/buildroot_develop.html#xin-zeng-ben-di-yuan-ma-bao

 

其他参考设计

快速添加应用包的方法,官方网站例子

https://blog.csdn.net/sheji105/article/details/79406286

利用 buildroot 构建一个最基础的rootfs

https://blog.csdn.net/QQ2010899751/article/details/82812219?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

posted @ 2019-12-19 16:26  dong1  阅读(636)  评论(0编辑  收藏  举报