• rk3568 SDK的buildroot添加package


    开发源码工程

    首先进入/app 目录下,在该目录下创建一个名为“mypackage”的文件夹
    在 mypackage 目录下创建一个.c 源文件 main.c,以及一个 Makefile 文件。
    大家可以自己在 main.c 源文件中编写一个简单的测试代码,譬如打印一个“buildroot mypackage”

    #include 
    
    int main(int argc, char **argv)
    {
        printf("buildroot mypackage\n");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Makefile 文件中的内容如下所示:

    mypackage: main.o
    	$(CC) -o mypackage main.o
    %.o: %.c
    	$(CC) -c $< -o $@
    
    • 1
    • 2
    • 3
    • 4

    目的就是将 main.c 源文件编译成一个可执行文件 mypackage。

    添加 package

    进入/package 目录, 在该目录下创建一个名为 mypackage 的目录。
    在 mypackage 目录下创建两个文件: Config.in 和 mypackage.mk
    Config.in 文件的内容如下所示:

    config BR2_PACKAGE_MYPACKAGE
        bool "my package"
        help
            this configuration is used to enable or disable mypackage.
    
    • 1
    • 2
    • 3
    • 4

    Config.in 文件的语法规则与 Linux Kernel、 U-Boot 中 Kconfig 文件的语法规则是一样的。
    mypackage.mk 文件的内容如下所示:

    ################################################################################
    #
    # mypackage
    #
    ################################################################################
    # 给你的软件包定义一个版本号
    MYPACKAGE_VERSION = 1.0
    # 你的软件包所在目录
    MYPACKAGE_SITE = $(TOPDIR)/../app/mypackage
    # 获取软件包的方式, local 表示从本地获取,有些包可能需要通过网络下载,譬如 git 仓库中的项目
    MYPACKAGE_SITE_METHOD = local
    # 列出在编译软件包之前 需要执行的配置操作
    define MYPACKAGE_CONFIGURE_CMDS
    endef
    # 列出编译软件包时 需要执行的操作
    define MYPACKAGE_BUILD_CMDS
    $(MAKE) -C $(@D) CC=$(TARGET_CC)
    endef
    # 列出将软件包安装到 target 目录(<Buildroot>/output/rockchip_rk3568/target)时需要执行的操作
    define MYPACKAGE_INSTALL_TARGET_CMDS
    $(INSTALL) -D -m 0755 $(@D)/mypackage $(TARGET_DIR)/usr/bin/mypackage
    endef
    # 表示当前软件包是一个通用型软件包基础结构
    $(eval $(generic-package))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    注意: 该文件中定义了一些变量以及宏,所有的这些变量、 宏都以前缀 MYPACKAGE_开头, 不能乱来, 它必须等于 Config.in、 mypackage.mk 文件所在目录(mypackage) 对应的名字(小写字母转换为大写)。
    上面已经解释了这些变量、宏的作用, 除了这些变量、宏之外,还可以在.mk 文件中定义很多其它的变量或者宏,每个变量或宏都有自己的意义。

    $(MAKE):表示 make 命令;
    $(@D): 表示软件包所在目录, 注意这个目录并不是<SDK>/app/mypackage、而是该软件包在 output/rockchip_rk3568/build/目录下对应的文件夹;编译软件包之前, buildroot 会将<SDK>/app/mypackage 拷 贝 至 <Buildroot>/output/rockchip_rk3568/build/ 目 录 , 并 重 命 名 为mypackage-1.0(1.0 就是版本号)。所以这个“$(@D)”指的是 output/rockchip_rk3568/build/mypackage-1.0 这个目录。
    $(TOPDIR):表示 buildroot 顶层目录,也就是<SDK>/buildroot 目录。
    $(TARGET_CC):表示交叉编译器, RK 平台默认使用 buildroot 交叉编译器,交叉编译器所在路径为: <Buildroot>/output/rockchip_rk3568/host/bin/aarch64-buildroot-linux-gnu-gcc。
    $(INSTALL):表示 install 命令。
    $(TARGET_DIR):表示 target 目录<Buildroot>/output/rockchip_rk3568/target。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    接下来打开 package/Config.in 文件, 将下面这行内容添加到该文件中:
    在这里插入图片描述

    使能并编译 package

    在自己的buildroot config文件添加:
    BR2_PACKAGE_MYPACKAGE=y

    编译:
    ./build.sh rootfs
    或者:make mypackage-rebuild

    编译成功后,生成可执行文件:
    /buildroot/output/rockchip_rk3568/target/usr/bin/mypackage

    拷贝到终端,执行成功:

    在这里插入图片描述

  • 相关阅读:
    神经网络前向传播过程,神经网络反向传播
    python导入的缓存机制
    centos 7环境部署百度开源apache doris 1.1
    Best practices for Grafana SLOs
    6.4-为何要深度学习
    天星金融消保课堂开讲,金融健康意识再提升
    Java | 一分钟掌握定时任务 | 7 - ElasticJob分布式定时任务
    Create Engaging Diagrams with Animation
    【C++11using用法】
    提供话费充值接口 话费快充慢充/API独立接口,商城/小程序/公众号合作
  • 原文地址:https://blog.csdn.net/weixin_37787043/article/details/132693236