An inventory-oriented analysis of github.com/ardupilot/ardupilot prepared so the SBOM tooling provider can configure the correct scan modules, dependency sources, and report structure before generating the production Software Bill of Materials for an FDA submission.
This document is not the SBOM itself. It is a pre-scan briefing: a map of what lives in the ArduPilot repository and what the SBOM tools provider needs to enable so the resulting SBOM is complete enough for an FDA premarket cyber device submission under Section 524B of the FD&C Act.
git submodule update --init --recursive, and record the commit SHA of every submodule. All figures in this report describe the current master branch and must be regenerated for the exact submission revision.
cloc for the pinned revision)libraries/ (the first-party platform).gitmodules, plus additional vendored sourcehwdef.dat files| Path | Contents and SBOM relevance |
|---|---|
ArduCopter/ | Multirotor and traditional-helicopter vehicle application: flight modes, failsafes, control loops, vehicle configuration. |
ArduPlane/ | Fixed-wing, glider, VTOL/QuadPlane and tailsitter application. |
Rover/ | Ground rover, boat, sailboat and balance-bot application. |
ArduSub/ | Underwater ROV application. |
AntennaTracker/ | Telemetry-driven antenna tracking firmware. |
Blimp/ | Lighter-than-air vehicle firmware. |
libraries/ | Primary first-party scan scope. The shared platform: HALs, estimators (EKF), controllers, hundreds of sensor and actuator drivers, MAVLink, CAN, networking, logging, filesystems, Lua scripting, and safety functions. |
modules/ | Primary third-party inventory location. Git submodules and externally sourced libraries. Must be resolved recursively with exact commit SHAs. |
Tools/ | Build extensions (ArduPilot waf), bootloaders, AP_Periph peripheral firmware, I/O co-processor firmware, SITL/autotest, ROS 2 support, MAVProxy add-ons, deployment scripts. |
tests/, benchmarks/ | Python tests and GoogleTest / Google Benchmark based unit and benchmark suites (test-framework dependencies enter the toolchain SBOM). |
waf, wscript | Build entry point and central build graph. All vehicle targets and feature switches are registered here. |
.gitmodules | Authoritative submodule URL inventory; the starting point for third-party dependency resolution. |
Each family is a separately built application registered in the root wscript. The submitted SBOM should name the family and vehicle configuration actually shipped on the device.
| Family | Waf command | Produced application |
|---|---|---|
| Copter (multirotor) | ./waf copter | arducopter |
| Traditional helicopter | ./waf heli | arducopter-heli |
| Plane / VTOL | ./waf plane | arduplane |
| Rover / boat | ./waf rover | ardurover |
| Sub (underwater) | ./waf sub | ardusub |
| Antenna tracker | ./waf antennatracker | antennatracker |
| Blimp | ./waf blimp | blimp |
| CAN peripheral firmware | ./waf AP_Periph | AP_Periph (DroneCAN / UART peripherals) |
| Supporting targets | bootloader, iofirmware, replay | Bootloader, I/O co-processor, replay tools |
The build target determines which RTOS, toolchain, and driver set enters the binary. The provider needs to know which platform family the medical device uses so reachability analysis can be scoped to that configuration.
| Platform / HAL | Runtime and toolchain | Notes |
|---|---|---|
| ChibiOS | ChibiOS/RT on STM32 (Cortex-M4/M7, F4/F7/H7), arm-none-eabi-gcc | Main embedded flight-controller target. Board definitions in libraries/AP_HAL_ChibiOS/hwdef/. Includes Cube/Pixhawk-class boards. |
| SITL | Native host process (Linux / macOS / WSL) | Software-in-the-loop simulation; typically part of the verification environment, not the shipped device. |
| Linux | POSIX Linux SBC targets (BeagleBone, Navio, Navigator class) | Full Linux userland stack applies. |
| ESP32 | ESP-IDF / FreeRTOS on ESP32 and ESP32-S3 | Second RTOS family to configure if used. |
| QURT | Qualcomm Hexagon / QURT | Niche target; confirm applicability. |
| Empty | Stub HAL | Used for porting and compile testing; not a product target. |
The AP_HAL layer (libraries/AP_HAL) defines scheduler, threading, UART/SPI/I2C/CAN, GPIO, RC, storage, and timing interfaces. Board-specific feature selection matters: constrained boards compile out features, so two binaries from the same source tree can have different component inventories.
| Component | Purpose |
|---|---|
modules/waf | Build framework (Waf) |
modules/ChibiOS | Embedded RTOS and MCU platform support |
modules/mavlink | MAVLink protocol definitions and generator |
modules/DroneCAN/DSDL | DroneCAN data type definitions |
modules/DroneCAN/pydronecan | Python DroneCAN tooling (host side) |
modules/DroneCAN/dronecan_dsdlc | DSDL compiler |
modules/DroneCAN/libcanard | Embedded DroneCAN transport implementation |
modules/Micro-XRCE-DDS-Client | Embedded DDS / XRCE client |
modules/Micro-CDR | CDR serialization |
modules/lwip | Embedded TCP/IP stack |
modules/littlefs | Embedded filesystem |
modules/gtest | Unit test framework |
modules/gbenchmark | Benchmark framework |
modules/gsoap | SOAP / ONVIF camera support |
libraries/AP_Scripting/lua, MIT upstream.AP_GyroFFT.AP_ADSB.AP_PiccoloCAN.libraries/. Submodule-only scanning undercounts; fingerprint-only scanning misattributes. Both are required for a defensible inventory.
| Component | Role and SBOM treatment |
|---|---|
| Lua scripting | libraries/AP_Scripting embeds a customized Lua 5.3.6 interpreter with generated C++ bindings. User scripts load from SD card (APM/scripts) or are embedded into ROMFS at build time. Deployed Lua scripts must be inventoried and hashed separately from the firmware binary, because scripts can change runtime behavior without changing the binary. |
| MAVLink | Message definitions from the modules/mavlink submodule; headers generated at build time into libraries/GCS_MAVLink/include/mavlink/v2.0. This is the primary external command, telemetry, and ground-control interface. MAVLink 2 supports message signing; command authorization is a system-level control to assess separately. |
| DroneCAN / libcanard | CAN peripheral ecosystem: DSDL type definitions, libcanard embedded transport, AP_Periph node firmware. |
| DDS / ROS 2 | Micro XRCE-DDS client and Micro-CDR serialization; ROS 2 integration tooling under Tools/ros2. |
| lwIP | Embedded TCP/IP networking stack (submodule). |
| gSOAP / ONVIF | Camera discovery and control interface (submodule). |
| MAVProxy | Not part of this repository's runtime. MAVProxy is a separate Python ground-control/router project. ArduPilot only carries SITL launch tooling and plug-ins under Tools/mavproxy_modules. If MAVProxy (or any GCS) ships with or verifies the medical device, generate a separate SBOM from its own repository and Python environment. |
The main work is GNU GPL version 3 (see COPYING.txt). Third-party components retain their own licenses; there is no repository-wide exception that converts all embedded third-party code to GPLv3.
LICENSE read.LICENSE / COPYING files and the actual submodule repositories.Enable the following modules and data sources when configuring the toolchain for this repository:
#if feature switches) and static linking into firmware images.AP_Scripting/lua) and every deployed SD-card or ROMFS script.libraries/, where no package manifest exists..elf, .bin, or .apj, including compiler and linker provenance (toolchain identity belongs in the SBOM).The following areas should be treated as safety-relevant in the SBOM report's criticality column and in SOUP evaluation:
Pill colors: red = flight-critical core, amber = input/output and command surface, green = evidence and diagnostics.
git submodule update --init --recursive ./waf list_boards | tr ' ' '\n' | sort -u | wc -l find libraries/AP_HAL_ChibiOS/hwdef -name hwdef.dat | wc -l cloc --exclude-dir=.git,build .
Report both "repository including submodules" and "first-party tree excluding submodules" component counts in the SBOM summary.