Edit online

添加新应用

4 Dec 2024
Read time: 3 minute(s)

在 Luban SDK 中添加新应用包括了包配置、源码管理、编译和补丁制作流程。

如需在 Luban SDK 中添加新的应用,可执行下列步骤:

  1. package 目录下添加必要的文件:
    pkg>
    |-> pkg.mk              --> 必须文件,用于定义包的基本信息。
    |-> Config.in             --> 可选文件,用于配置包的编译选项。
    |-> Config.in.host        --> 仅 host 工具需要的文件
    
  2. 修改上层的 Config.in/Config.in.host

    为了在 menuconfig 中看到包,需要在上层的 Config.inConfig.in.host 文件中添加对包的引用。例如:
    source "package/artinchip/test-uart/Config.in"
    
  3. 添加应用源码和编译方案。
    SDK 支持的组件包有以下两种:

编译自开发应用

自开发的应用一般以源码的方式存储,以 test-uart 测试用例源码为例:

  1. 创建目录:
    mkdir -p package/artinchip/test-uart
    
  2. 生成文件:
      • test-uart.mk:定义应用构建内容。
      • Config.in:配置选项。
  3. package/artinchip/Config.in 中添加引用。
    source "package/artinchip/test-uart/Config.in"
    
  4. 创建目录 source/artinchip/test-uart, 放置 test-uart 示例的源码和 Makefile (CMakeLists.txt) 文件。

  5. 使用编译命令 make test-uart 进行编译。

  6. 如有需要,添加补丁,否则可略过。

    关于补丁的说明,可查看 制作补丁

编译三方应用

对于第三方开源代码包,建议从 buildroot2 官网获得相关移植流程说明,以 attr 为例:

  1. 在 Gitee 上查找 buildroot2 代码库,选择任意一个项目,例如 JakeYang/buildroot

  2. package 中找到 attr,并将其下载到 package/third-party/ 目录中。

    package/third-party/ 中会生成三个文件:patchConfig.inattr.mk

  3. package/third-party/Config.in 中添加对 package/third-party/attr/Config.in 的引用。

  4. 打开 attr.mk 文件,查找版本的下载地址,示例如下:
    ATTR_VERSION = 2.5.1
    ATTR_SOURCE = attr-$(ATTR_VERSION).tar.xz
    ATTR_SITE = http://download.savannah.gnu.org/releases/attr
  5. 下载源码 至 dl/attr/ 目录下。

  6. 执行 make m 命令,在 Third-party packages 中可以看到 attr

  7. 应用编译命令 make attr


    attr-pkg

制作补丁

如对三方应用进行了适配修改或者 bugfix, 可能需要制作补丁提交至 pacakge 目录。以 ethtool 为例,制作补丁的详细流程说明如下:

  1. 使用 make m 命令打开配置界面,并取消 attr 的预编译使用:

    use prebuilt binary instead of building from source

  2. 使用 make ethtool-extract 生成源码,将源码加压到 source/third-party/ethtool-5.12 目录下。

  3. 使用 make ethtool-patch 命令,添加现有补丁。

  4. 进入到源码目录 source/third-party/ethtool-5.12,并建立 Git 仓库。

  5. 修改代码,提交到本地 Git 仓库,并通过 git format-patch 生成补丁。

  6. 复制补丁到 package/third-party/attr/ 目录, 并排序。

编译工具示例

使用不同的应用编译工具,编译流程可能不尽相同,以下示例仅供参考:

  • Autotools: package/third-party/acl

  • CMake:

    • package/third-party/lzo

    • package/artinchip/*

  • Golang: package/third-party/fscrypt

  • Generic Makefile: package/third-party/bzip2

  • Support Kconfig:

    • uboot

    • linux

    • package/third-party/busybox

注:

Golang 编写的源码包依赖文件,可以放置至 dl/vendor 目录中,编译时会优先从该目录中查找是否有所需要的依赖文件。

应用包使用规则

  • 包的路径 :当前 SDK 中,仅支持在下列路径中添加包,并且仅支持新增一级目录:
    • package/artinchip/

    • package/third-party/

    可新增一级目录,例如 pacakge/artinchip/foo

  • 包的名字:以添加一个名为 foo 的包为例
    包的目录名字 必须为 foo ,也可以有 -
    Config.in 中的名字 必须以 BR2_PACKAGE_ 开头,这里为 BR2_PACKAGE_FOO 包的名字,可以包含 - 或者 _ ,如果使用了中杠,则需要注意:
    • 包目录名字继续使用中杠

    • 相关的变量名字,需要将中杠改为下划线

    foo.mk 中的变量名 变量名必须以 FOO 开头,例如 FOO_INSTALL_STAGING = YES
  • 软连接的使用

    如果在软件包的安装阶段,需要使用软连接创建目录,则需要添加参数 -n ,如:

    ln -snf source_dir_path target_name
    • ln-sf 对重复创建的目标,并不会更新软连接的时间戳,导致重复执行 make pkg-prebuilt,无法检测到安装目录中的软连接目录的变化,导致生成的预编译 二进制包缺漏该软连接。

    • -n:当软连接指向目录时,将其当做一般文件对待。这样重复创建/更新链接时, 相应的时间戳也会更新。