Skip to content

外部模块(Out-of-Tree)

外部模块为开发人员提供了一种便捷的机制,可以管理/分组他们想要添加(或更新)PX4 固件的专有模块。 外部模块可以使用与内部模块相同的includes,并可以通过uORB与内部模块交互。

本主题说明如何将外部(“out of tree”)模块添加到 PX4 编译中。

TIP

我们鼓励您在可能的情况下将更改贡献给PX4!

用法

要创建外部模块:

  • 创建一个_external directory_文件夹,用于对外部模块进行分组:

    • 它可以位于 PX4-Autopilot tree.
    • 它的结构必须与 PX4-Autopilot (i.e. it must contain a directory called src).
    • 稍后我们使用 EXTERNAL_MODULES_LOCATION.
  • 复制现有模块 (e.g. examples/px4_simple_app) 或者直接创建一个新模块。

  • Rename the module (including MODULE in CMakeLists.txt) 或者将其从现有的PX4 Autopilot _cmake_build配置中删除。 这是为了避免与内部模块发生冲突。

  • Add a file CMakeLists.txt 在包含内容的外部目录中:

    cmake
    set(config_module_list_external
        modules/<new_module>
        PARENT_SCOPE
        )
  • Add a line EXTERNAL to the modules/<new_module>/CMakeLists.txt within px4_add_module(), for example like this:

    cmake
    px4_add_module(
    	MODULE modules__test_app
    	MAIN test_app
    	STACK_MAIN 2000
    	SRCS
    		px4_simple_app.c
    	DEPENDS
    		platforms__common
    	EXTERNAL
    	)

Out-of-Tree uORB 消息定义

树外uORB消息将在与正常uORB消息相同的位置生成。 For this, the $EXTERNAL_MODULES_LOCATION/msg folder must exist.

  • 将所有新消息定义放入 $EXTERNAL_MODULES_LOCATION/msg 目录. 这些新的树外消息定义的格式与其他任何消息的格式相同 uORB message definition.

  • Add a file $EXTERNAL_MODULES_LOCATION/msg/CMakeLists.txt with content:

    cmake
    set(config_msg_list_external
        <message1>.msg
        <message2>.msg
        <message3>.msg
        PARENT_SCOPE
        )

    where <message#>.msg 是要处理并用于uORB消息生成的uORB信息定义文件的名称。

树外 uORB 消息将在与正常 uORB 消息相同的位置生成。 uORB主题标头在中生成 <build_dir>/uORB/topics/, 消息源文件为 generated in <build_dir>/msg/topics_sources/.

新的uORB消息可以像所述的任何其他uORB信息一样使用 here.

WARNING

树外的uORB消息定义不能与任何正常的uORP消息同名。

构建外部模块和 uORB 消息

Execute make px4_sitl EXTERNAL_MODULES_LOCATION=<path>.

任何其他构建目标都可以使用,但构建目录尚不存在。 如果它已经存在,您也可以在构建文件夹中设置_cmake_变量。

对于后续增量构建 EXTERNAL_MODULES_LOCATION 不需要指定。