В ArduPilot уже есть зачаточная поддержка Linux, но похоже что используется только для отладки на десктопе.
https://github.com/diydrones/ardupilot/ ... _HAL_LinuxПлатформозависимый код это работа с железом (GPIO, ADC, UART, I2C), хранилище настроек (файл, EPPROM), управление ESC и мутексы и получение данный с RC-приёмника.
Пришлось покопаться во всех частях
Весь остальной код - платформонезависимый.
Ещё есть код, специфичный для некоторых устройств, например, для акселерометров и GPS.
Для аксереометра MPU6050 я написал модуль, который работает с ядрёным драйвером. Оригинанальный код ArduPilot для MPU6050 очень нагружает CPU, потому что опрашивает устройство по i2c вместо ожидания готовности следующей порции данных.
На выходе - один бинарник в стиле запустил с параметрами и полетел.