一、Buildroot 编译完成后,会在 /buildroot/output/xxxx/host/ 目录下,生成交叉编译工具,我们可以用来编译目标程序。
1、比如我现在要编译下面的c文件
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
printf("Hello word! fuck you buildroot\n");
}
2、设置编译器地址变量
export PATH=/home/xxx/workspace/source/px30-linux/buildroot/output/rockchip_px30_64/host/bin:$PATH
3、编译
aarch64-buildroot-linux-gnu-gcc rkwifibt_test.c -o hello
4、把hello这个可执行程序放到ARM运行结果如下:
二、如何创建自定义软件包,把上面c程序放到整个buildroot里面进行编译呢?
1、创建工程目录buildroot/package/rockchip/rkwifibt_test,新建 Config.in和rkwifibt_test.mk
Config.in
config BR2_PACKAGE_RKWIFIBT_TEST
bool "rkwifibt_test"
rkwifibt_test.mk
#############################################################
#
# RKWIFIBT_TEST
#
#############################################################
ifeq ($(BR2_PACKAGE_RKWIFIBT_TEST), y)
RKWIFIBT_TEST_VERSION:=1.0.0
RKWIFIBT_TEST_SITE=$(TOPDIR)/../external/rkwifibt_test
RKWIFIBT_TEST_SITE_METHOD=local
define RKWIFIBT_TEST_BUILD_CMDS
$(TARGET_CC) -o $(@D)/src/rkwifibt_test_demo $(@D)/src/rkwifibt_test.c
endef
define RKWIFIBT_TEST_CONFIGURE_CMDS
#cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/bin/qmake
endef
define RKWIFIBT_TEST_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0777 $(@D)/src/rkwifibt_test_demo $(TARGET_DIR)/usr/bin/
endef
$(eval $(generic-package))
endif
2、修改上一级 Config.in,buildroot/package/rockchip/Config.in 末行添加
source "package/rockchip/rkwifibt_test/Config.in"
3、创建源码目录,上文的 rkwifibt_test.mk文件里已经指定了源码目录 external/rkwifibt_test。心新建external/rkwifibt_test/src/rkwifibt_test.c,内容如下
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
printf("Hello word! fuck you buildroot\n");
return 0;
}
4、配置软件包,打开配置菜单 make menuconfig,勾选rkwifibt_test配置
5、编译,make rkwifibt_test-rebuild会把编译出来的文件复制到target/usr/bin/rkwifibt_test_demo,而make rkwifibt_test-build 不会,这就是build和rebuild的区别。
make rkwifibt_test-dirclean //清除之前的编译
make rkwifibt_test-build //编译
make rkwifibt_test-rebuild //重新编译
6、把整个output目录删掉,全部编译系统后,也会在usr/bin/下面生成可执行文件。
7、整个过程需要添加Config.in 、 rkwifibt_test.mk、rkwifibt_test.c三个文件,然后修改defconfig和config.in
三、参考文章
Buildroot 开发 — Firefly Wiki
嵌入式Linux构建框架Buildroot创建自己的软件包(基于传统makefile和cmake)(篇二) - 知乎