外部模块(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 在包含内容的外部目录中:
cmakeset(config_module_list_external modules/<new_module> PARENT_SCOPE )
Add a line
EXTERNAL
to themodules/<new_module>/CMakeLists.txt
withinpx4_add_module()
, for example like this:cmakepx4_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:cmakeset(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
不需要指定。