mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-20 14:23:33 +08:00
feat(boards/modalai/voxl2): add Debian packaging framework
Add a scalable .deb packaging framework for VOXL2, built on the existing cmake/package.cmake CPack infrastructure. The framework handles multi-processor boards by having the POSIX (_default) build own the .deb and pull in the companion SLPI build's artifacts. Board-specific files: - cmake/package.cmake: CPack variable overrides (name, deps, version) - cmake/install.cmake: install() rules for all .deb contents - debian/postinst: px4-* symlinks, DSP signature, directory setup - debian/prerm: service stop, symlink cleanup - debian/voxl-px4.service: systemd unit (after sscrpcd) Infrastructure changes: - cmake/package.cmake: hook for board-specific CPack overrides - platforms/posix/CMakeLists.txt: hook for board install.cmake - Makefile: %_deb pattern rule (build _default, then cpack -G DEB) - CI: auto-discover _deb targets, collect .deb artifacts, upload to GitHub Releases Future boards: add cmake/package.cmake + cmake/install.cmake and CI discovers it automatically. No new file formats or tools needed. Signed-off-by: Ramon Roche <mrpollo@gmail.com>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
############################################################################
|
||||
#
|
||||
# Copyright (c) 2024 PX4 Development Team. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name PX4 nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
# VOXL2 board-specific install rules for .deb packaging
|
||||
# Included from platforms/posix/CMakeLists.txt where the px4 target exists
|
||||
|
||||
# SLPI companion build output directory
|
||||
set(VOXL2_SLPI_BUILD_DIR "${PX4_SOURCE_DIR}/build/modalai_voxl2-slpi_default")
|
||||
|
||||
# Apps processor binary
|
||||
install(TARGETS px4 RUNTIME DESTINATION bin)
|
||||
|
||||
# px4-alias.sh (generated during build into bin/ subdirectory)
|
||||
install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/px4-alias.sh DESTINATION bin)
|
||||
|
||||
# Startup scripts from board target directory
|
||||
install(PROGRAMS
|
||||
${PX4_BOARD_DIR}/target/voxl-px4
|
||||
${PX4_BOARD_DIR}/target/voxl-px4-start
|
||||
${PX4_BOARD_DIR}/target/voxl-px4-hitl
|
||||
${PX4_BOARD_DIR}/target/voxl-px4-hitl-start
|
||||
DESTINATION bin
|
||||
)
|
||||
|
||||
# DSP firmware blob from companion SLPI build
|
||||
install(FILES ${VOXL2_SLPI_BUILD_DIR}/platforms/qurt/libpx4.so
|
||||
DESTINATION lib/rfsa/adsp
|
||||
OPTIONAL
|
||||
)
|
||||
|
||||
# Configuration files
|
||||
install(FILES
|
||||
${PX4_BOARD_DIR}/target/voxl-px4-fake-imu-calibration.config
|
||||
${PX4_BOARD_DIR}/target/voxl-px4-hitl-set-default-parameters.config
|
||||
DESTINATION ../etc/modalai
|
||||
)
|
||||
|
||||
# Systemd service file
|
||||
install(FILES ${PX4_BOARD_DIR}/debian/voxl-px4.service
|
||||
DESTINATION ../etc/systemd/system
|
||||
)
|
||||
|
||||
# Component metadata JSON files
|
||||
install(FILES
|
||||
${PX4_BINARY_DIR}/actuators.json.xz
|
||||
${PX4_BINARY_DIR}/component_general.json.xz
|
||||
${PX4_BINARY_DIR}/parameters.json.xz
|
||||
DESTINATION ../data/px4/etc/extras
|
||||
OPTIONAL
|
||||
)
|
||||
install(FILES ${PX4_BINARY_DIR}/events/all_events.json.xz
|
||||
DESTINATION ../data/px4/etc/extras
|
||||
OPTIONAL
|
||||
)
|
||||
@@ -0,0 +1,63 @@
|
||||
############################################################################
|
||||
#
|
||||
# Copyright (c) 2024 PX4 Development Team. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name PX4 nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
# VOXL2 board-specific CPack overrides
|
||||
# Loaded after cmake/package.cmake sets up CPack defaults
|
||||
|
||||
# Derive Debian-compatible version from git tag (e.g. v1.17.0-alpha1-42-gabcdef -> 1.17.0~alpha1.42.gabcdef)
|
||||
string(REGEX REPLACE "^v" "" _deb_ver "${PX4_GIT_TAG}")
|
||||
string(REGEX REPLACE "-" "~" _deb_ver "${_deb_ver}" )
|
||||
string(REGEX REPLACE "~([0-9]+)~" ".\\1." _deb_ver "${_deb_ver}")
|
||||
|
||||
# VOXL2 is always aarch64 regardless of build host
|
||||
set(CPACK_DEBIAN_ARCHITECTURE "arm64")
|
||||
set(CPACK_DEBIAN_PACKAGE_NAME "voxl-px4")
|
||||
set(CPACK_DEBIAN_FILE_NAME "voxl-px4_${_deb_ver}_arm64.deb")
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")
|
||||
set(CPACK_INSTALL_PREFIX "/usr")
|
||||
set(CPACK_SET_DESTDIR true)
|
||||
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "voxl-platform, librc-symlinks")
|
||||
set(CPACK_DEBIAN_PACKAGE_CONFLICTS "px4-rb5-flight")
|
||||
set(CPACK_DEBIAN_PACKAGE_REPLACES "px4-rb5-flight")
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 Autopilot for ModalAI VOXL2")
|
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ModalAI <support@modalai.com>")
|
||||
|
||||
# Disable shlibdeps for cross-compiled boards
|
||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF)
|
||||
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||
"${PX4_BOARD_DIR}/debian/postinst;${PX4_BOARD_DIR}/debian/prerm")
|
||||
|
||||
# Install rules are in boards/modalai/voxl2/cmake/install.cmake,
|
||||
# included from platforms/posix/CMakeLists.txt where the px4 target exists.
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Create px4-* symlinks from px4-alias.sh
|
||||
# The alias format is: alias <module>='px4-<module> --instance $px4_instance'
|
||||
# We extract the px4-<module> command name and symlink it to the px4 binary
|
||||
if [ -f /usr/bin/px4-alias.sh ]; then
|
||||
grep "^alias " /usr/bin/px4-alias.sh | \
|
||||
sed -n "s/.*'\(px4-[a-zA-Z0-9_]*\).*/\1/p" | while read cmd; do
|
||||
ln -sf px4 "/usr/bin/${cmd}"
|
||||
done
|
||||
fi
|
||||
|
||||
# Detect platform and generate DSP test signature if needed
|
||||
if ! /bin/ls /usr/lib/rfsa/adsp/testsig-*.so &> /dev/null; then
|
||||
echo "[INFO] Generating DSP test signature..."
|
||||
if [ -f /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh ]; then
|
||||
/share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh || true
|
||||
elif [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then
|
||||
/share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh || true
|
||||
else
|
||||
echo "[WARNING] Could not find DSP signature generation script"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Create required data directories
|
||||
mkdir -p /data/px4/param
|
||||
mkdir -p /data/px4/etc/extras
|
||||
chown -R root:root /data/px4
|
||||
|
||||
# Reload systemd if available
|
||||
if command -v systemctl > /dev/null 2>&1; then
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
|
||||
echo "voxl-px4 installed successfully"
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Stop voxl-px4 service if running
|
||||
if command -v systemctl > /dev/null 2>&1; then
|
||||
systemctl stop voxl-px4 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Remove px4-* symlinks
|
||||
for f in /usr/bin/px4-*; do
|
||||
if [ -L "$f" ] && [ "$(readlink "$f")" = "px4" ]; then
|
||||
rm -f "$f"
|
||||
fi
|
||||
done
|
||||
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=PX4 Autopilot for VOXL2
|
||||
After=sscrpcd.service
|
||||
Requires=sscrpcd.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/voxl-px4
|
||||
ExecStopPost=/usr/bin/voxl-reset-slpi
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user