buildroot --- 添加一个 package(应用)

参考资料:https://buildroot.org/docs.html 

buildroot-slides.pdf 章节 Integrating new packages in Buildroot

 

 

以下基于RK3308 SDK(与 SDK 关系不大,其他 SDK 类似)

 

在 app 文件夹下新建个文件夹 wifitest,里面新建两个文件

main.c

#include <stdio.h>


int main(int argc, char **argv)
{
    printf("hello world!\n");
    return 0;
}

Makefile


ble_mng: main.o
    $(CC) -o ble_mng main.o

%.o: %.c
    $(CC) -c $< -o $@

clean:
    rm -rf .stamp_configured
.PHNOY: clean

CC 的值是 make 的时候传入

删除 .stamp_configured 是因为防止重新编译提示:.files-list.before: No such file or directory

命令前不是4个空格,而是 TAB 键,博客输不了 TAB 键,所以拷贝出去后需要替换下,否则编译提示:

Makefile:2: *** 缺失分隔符。 停止。

 

buildroot/package 文件夹内新建一个文件夹 wifitest,里面新建两个文件

Config.in

config BR2_PACKAGE_WIFITEST
    bool "wifi test"
    default y
    help
        this configuration is used to enable or disable wifitest.

 

wifitest.mk(文件名就是package名)

PKG_UPPER := WIFITEST
PKG_LOWER := wifitest
# 给你的软件包定义一个版本号 $(PKG_UPPER)_VERSION
= 1.0

# 你的软件包所在目录 $(PKG_UPPER)_SITE = $($(PKG_UPPER)_PKGDIR)
# 获取软件包的方式, local 表示从本地获取,有些包可能需要通过网络下载,譬如 git 仓库中的项目 $(PKG_UPPER)_SITE_METHOD
= local
# 列出在编译软件包之前 需要执行的配置操作 define $(PKG_UPPER)_CONFIGURE_CMDS endef
# 列出编译软件包时 需要执行的操作 define $(PKG_UPPER)_BUILD_CMDS $(MAKE)
-C $(@D) clean $(MAKE) -C $(@D) CC=$(TARGET_CC) endef
# 列出将软件包安装到 target 目录(
<Buildroot>/output/rockchip_rk3568/target)时需要执行的操作 define $(PKG_UPPER)_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(@D)/$(PKG_LOWER) $(TARGET_DIR)/usr/bin/$(PKG_LOWER) endef
# 表示当前软件包是一个通用型软件包基础结构 $(eval $(generic
-package))

$(@D):表示软件包所在目录,注意这个目录并不是<SDK>/app/wifitest、而是该软件包在 output/rockchip_rk3308/build/目录下对应的文件夹;编译软件包之前,buildroot 会将<SDK>/app/wifitest 拷贝至 buildroot/output/rockchip_rk3308/build/ 目录 , 并重命名为wifitest-1.0(1.0 就是版本号)。所以这个“$(@D)”指的是 output/rockchip_rk3308/build/wifitest-1.0 这个目录。

$(TOPDIR):表示 buildroot 顶层目录,也就是<SDK>/buildroot 目录。

$(TARGET_CC):表示交叉编译器,RK 平台默认使用 buildroot 交叉编译器,交叉编译器所在路径为:<Buildroot>/output/rockchip_rk3308/host/bin/aarch64-buildroot-linux-gnu-gcc。

$(INSTALL):表示 install 命令。

$(TARGET_DIR):表示 target 目录<Buildroot>/output/rockchip_rk3308/target。

$($(PKG_UPPER)_PKGDIR):buildroot 提供变量 <pkg>_PKGDIR

<pkg>__DEPENDENCIES:设置 pkg 依赖的其他包,比如 SYSTEM_MANAGER_DEPENDENCIES = nanomsg remo_log

 

打开 package/Config.in 文件,将下面这行内容添加到该文件中:

source "package/wifitest/Config.in"

 

make menuconfig 可看见 "wifi test" 被选中

 

执行 make wifitest-rebuild

可执行文件 wifitest 根据 wifitest.mk 的设置,被拷贝到 buildroot/output/rockchip_rk3308_h_32_release/target/usr/bin/ 

可执行文件 wifitest 来源于 buildroot/output/rockchip_rk3308_h_32_release/build/wifitest-1.0/

执行 make wifitest-dirclean 删除文件夹 buildroot/output/rockchip_rk3308_h_32_release/build/wifitest-1.0/

posted @ 2024-06-20 14:51  流水灯  阅读(55)  评论(0编辑  收藏  举报