Edit online

自定义包目录

17 Dec 2024
Read time: 3 minute(s)

Luban SDK 支持在 SDK 之外管理自主开发的模块和应用,包括使用独立的仓库进行版本管理,并能便捷接入 Luban SDK 进行编译。

本节以创建一个 MYCOMPANY/ 自定义包目录为例进行详细说明,示例目录结构如下所示。其中 MYCOMPANY 目录即为用户自定义包目录,可以用来独立管理相关的包配置和源码。与 LUBAN_SDK 中的其他包一样,MYCOMPANY 目录包可以使用相同的添加包和编译操作规则:
LUBAN_SDK/
        ├── dl
        ├── Makefile
        ├── output
        ├── package
        ├── prebuilt
        ├── source
        ├── target
        ├── toolchain
        └── tools

MYCOMPANY/
        ├── package/
        │       ├── mod1
        │       ├── mod2
        │       └── app1
        └── source
                ├── mod1
                ├── mod2
                └── app1
注:
MYCOMPANY 目录可以放在任意其他目录,建议放在与 LUBAN_SDK 同级或者 LUBAN_SDK 的根目录。
Luban SDK 支持自定义包方案并提供了相关的参考设置。按照下列流程自定义包目录:
  1. 建立 External Tree
    MYCOMPANY 目录即为一个 External Tree,建立一个 External Tree 需遵循一定的规则。以下提供了一个 External Tree 示例参考,方便用户根据示例创建自己的 Tree:
    package/external/example_tree/
    ├── Config.in
    ├── external.desc
    ├── external.mk
    ├── package
    │   └── example_mod
    │       ├── Config.in
    │       └── example_mod.mk
    └── source
            └── example_mod
                    ├── CMakeLists.txt
                    └── main.c
    1. 复制 package/external/example_tree 目录,并将其重命名为 MYCOMPANY

      例如 MYCOMPANYLUBAN_SDK 并列:
      LUBAN_SDK/
      MYCOMPANY/

      用户自定义目录名时,需确保目录名仅包含大小写字母、数字和下划线。

    2. MYCOMPANY/external.desc 文件中,修改下列配置项:

      name: EXAMPLE_TREE
      desc: Exampe External Tree
      • name:使用与 MYCOMPANY 目录相同的名称,建议使用大写。

      • desc:填写简要的描述,应为 ASCII 字符。

      示例如下:

      name: MYCOMPANY
      desc: Packages for MyCompany
    3. MYCOMPANY/external.mk 文件中,将 BR2_EXTERNAL_EXAMPLE_TREE_PATH 修改为与新目录相匹配的名字。

      • 修改前:
        include $(sort $(wildcard $(BR2_EXTERNAL_EXAMPLE_TREE_PATH)/package/*/*.mk))
      • 修改后:
        include $(sort $(wildcard $(BR2_EXTERNAL_MYCOMPANY_PATH)/package/*/*.mk))
    4. MYCOMPANY/Config.in 文件中,将 BR2_EXTERNAL_EXAMPLE_TREE_PATH 修改为与新目录相匹配的名字:
      • 修改前:
        menu "Example"
        
        source "$BR2_EXTERNAL_EXAMPLE_TREE_PATH/package/example_mod/Config.in"
        
        endmenu
      • 修改后:
        menu "MyCompany"
        
        source "$BR2_EXTERNAL_MYCOMPANY_PATH/package/example_mod/Config.in"
        
        endmenu
  2. 添加一个 MYCOMPANY Tree 中的源码包:
    1. 参考 MYCOMPANY/package/example_mod 文件,在 MYCOMPANY/package/ 中添加新包的编译配置。

      可以使用 autotools 等其他编译方式,具体规则与 Luban SDK 中的其他包相同。

    2. 参考 MYCOMPANY/package/example_mod 文件,在 MYCOMPANY/source/ 中添加新包的源码。

      源码包名应与 package 文件夹中的包名相同,如果包配置中配置了版本号,则源码目录的名字应为 MYCOMPANY/source/example_mod-<ver>。 同时,MYCOMPANY/source/ 目录仅保存源码,编译输出文件则存放在具体的 build 目录下,具体规则与 SDK 其他包相同。

  3. 复制 package/external/external.mk 并将其添加到 Luban SDK 的根目录 LUBAN_SDK/external.mk,并在里面添加:
    LUBAN_EXTERNAL=../MYCOMPANY

    添加时,可以使用绝对路径,也可以使用相对路径。

  4. 配置所需参数:
    1. 执行下列命令,应用项目文件:
      make xxx_defconfig
    2. 执行下列命令,配置 menuconfig 界面参数:
      make menuconfig
      此时可在 menuconfig 中看到 External options 选项:
      Target options  --->
      Toolchain  --->
      Build options  --->
      System configuration  --->
      Filesystem images  --->
      BootLoader  --->
      Linux kernel  --->
      ArtInChip packages  --->
      Vendor packages  --->
      Third-party packages  --->
      Host utilities  --->
      Firmwares  ----
      External options  --->
      

    进入 External options,可以看到相关包的配置,其编译方法与 SDK 其他包一致。