外部模块(Out-of-Tree)
外部模块为开发人员提供了一种便捷的机制,可以管理/分组他们想要添加(或更新)PX4 固件的专有模块。 外部模块可以使用与内部模块相同的includes,并可以通过uORB与内部模块交互。
本主题说明如何将外部(“out of tree”)模块添加到 PX4 编译中。
TIP
We encourage you to contribute your changes into PX4, where possible!
用法
要创建外部模块:
Create an external directory folder for grouping the external modules:
- This can be located anywhere outside of the PX4-Autopilot tree.
- It must have the same structure as PX4-Autopilot (i.e. it must contain a directory called src).
- Later we refer to this directory using
EXTERNAL_MODULES_LOCATION
.
Copy an existing module (e.g. examples/px4_simple_app) to the external directory, or directly create a new module.
Rename the module (including
MODULE
in CMakeLists.txt) or remove it from the existing PX4-Autopilot cmake build config. 这是为了避免与内部模块发生冲突。Add a file CMakeLists.txt in the external directory with content:
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.
Place all new message definitions within the
$EXTERNAL_MODULES_LOCATION/msg
directory. The format of these new out-of-tree message definitions are the same as for any other 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
is the name of the uORB message definition file to be processed and used for uORB message generation.
树外 uORB 消息将在与正常 uORB 消息相同的位置生成。 The uORB topic headers are generated in <build_dir>/uORB/topics/
, and the message source files are generated in <build_dir>/msg/topics_sources/
.
The new uORB messages can be used like any other uORB message as described here.
WARNING
The out-of-tree uORB message definitions cannot have the same name as any of the normal uORB messages.
构建外部模块和 uORB 消息
Execute make px4_sitl EXTERNAL_MODULES_LOCATION=<path>
.
任何其他构建目标都可以使用,但构建目录尚不存在。 If it already exists, you can also just set the cmake variable in the build folder.
For subsequent incremental builds EXTERNAL_MODULES_LOCATION
does not need to be specified.