ardupilot开发 --- 固件定制(OEM) 篇

0. 前言

  • 固件功能定制
  • OEM Customization: 原厂设备制造商OEM(Original Equipment Manufacturer)、代工
  • 功能勾选
  • 参数预设
  • 固件名称自定义

1. 基于某个飞控硬件来定制自己的飞控产品

可以自定义的包括:固件名称、预设参数、lua脚本内嵌、文件内嵌、宏定义开启或关闭、功能使能等等…
以雷迅的CUAV-X7为例。

步骤

  • 复制目录 libraries/AP_HAL_ChibiOS/hwdef/CUAV-X7 到libraries/AP_HAL_ChibiOS/hwdef/ 中;
  • 更名为myAutoPilot;
  • hwdef.dat 文件:添加自定义的固件名称描述
include ../CUAV-X7/hwdef.dat
# 将需要重新赋值的参数写在下面,参考CUAV-X7/hwdef.dat,如:
define AP_CUSTOM_FIRMWARE_STRING "myAutoPilot-V1.0"
  • hwdef.dat 中根据需要进行功能使能(宏定义定义)还可以参考在线编译生成的extra_hwdef.dat,或者直接把extra_hwdef.datinclude进来。如:
define AP_EFI_NWPWU_ENABLED 1
define AP_ICENGINE_ENABLED 0
define HAL_ADSB_ENABLED 1
define HAL_ADSB_SAGETECH_ENABLED 1
define HAL_ADSB_SAGETECH_MXS_ENABLED 1
define HAL_ADSB_UAVIONIX_MAVLINK_ENABLED 1
  • hwdef-bl.dat 只需一行代码:
include ../CUAV-X7/hwdef-bl.dat
# 将需要重新赋值的参数写在下面,参考CUAV-X7/hwdef-bl.dat
  • 在defaults.parm 文件中设置预设参数的值:
@include ../CUAV-X7/defaults.parm
# 将需要预设的参数写在下面,如:
CAN_P1_DRIVER 1
BATT_MONITOR 4
  • 编译引导程序Bootloader:myAutoPilot_bl.bin、myAutoPilot_bl.hex、myAutoPilot_bl.apj
Tools/scripts/build_bootloaders.py myAutoPilot
# 或者
./waf distclean
./waf configure --board YourBoard --bootloader
./waf bootloader
  • 编译飞控固件
./waf configure --board myAutoPilot
./waf copter

2. 关于功能使能

  • 在hwdef.dat中声明宏定义,如:
undef AP_VIDEOTX_ENABLED
define HAL_EXTERNAL_AHRS_ENABLED 1
  • 在./waf configure 时使能,如:
./waf configure --debug
./waf configure --enable-custom-controller

3 ProblemShooting

【1】./waf configure报错
AttributeError: ‘NoneType’ object has no attribute ‘abspath’
解决:git submodule update --init --recursive
参考:https://discuss.ardupilot.org/

4. 关于引导程序 Bootloader

  • 意义:为烧录飞控固件做准备

  • 飞控板子要先在DFU模式下烧录 Bootloader 程序,然后才能进一步烧录Ardupilot飞控固件!

  • 飞控板中安装了 Bootloader 后才能正常通过 mission planner 烧录自定义固件!

  • 为新飞控板 build 一个定制的Bootloader,需要在 hwdef_bl.dat 中声明一个属于自己的board id,如果不编译属于自己的Bootloader也可以直接使用其他兼容的Bootloader。

  • 有些飞控板出厂之前就预装了 Bootloader,否则需要自己手动将定制的 Bootloader 程序烧录到飞控板中!

  • 目前可用的 board_types.txt,可查阅已被占用的 board id,避免取值冲突!

  • 编译好的适用大多数飞控板的 Bootloader 可供直接使用:
    ArduPilot/Tools/bootloaders 或:firmware.ardupilot.org/Tools/Bootloaders

  • Bootloader 程序源码:ArduPilot/Tools/AP_Bootloader
    适用于大多数 STM32 处理器的板子

  • 如何使用 DFU 工具将 Bootloader 下载到飞控板子?

    • 手动编译 Bootloader
      首先,为新飞控版(OEM飞控板)指定一个自己的board id,为避免取值冲突请在board_types.txt中查阅已被占用的 board id。一般,新飞控板的 board id 取值要 >1000,如果固件开启了 OpenDroneID 功能,建议 board id 取值要 >10000。
      然后,编译自己的Bootloader :
      Tools/scripts/build_bootloaders.py YourBoardName
      # 或者
      ./waf distclean
      ./waf configure --board YourBoardName --bootloader
      ./waf bootloader
      
      编译结果保存在 ardupilot/build/YourBoardName/bin
    • DFU模式烧录工具
      dfu-util 目前只支持 STM32F2/F3/F4 系列的处理器的烧录,而如CUAV X7类型的飞控处理器是H7系列的,需要用到 stm32CubeProgrammer 来烧录 Bootloader
    • 如何进入DFU模式,请参考飞控版自己的文档
      这里以 CUAV X7+ pro 为例:按下 boot 按键,再插入USB线,即可进入DFU模式。
    • 烧录 Bootloader 到飞控板
      • 针对STM32F2/F3/F4 系列飞控,使用dfu-util
      sudo apt-get install dfu-util
      dfu-util -a 0 --dfuse-address 0x08000000 -D new-board-bootloader.bin -R
      
      • 针对STM32H7系列,使用stm32CubeProgrammer,以 CUAV X7+ pro 为例
        1)下载 stm32CubeProgrammer 并安装,中途会提示安装java。
        2)按下CUAV X7飞控的 boot键,再插入USB,此时指示灯程绿色常亮,电脑(windows)的设备管理器中显示识别到DFU设备,此时证明飞控进入DFU模式并被PC顺利检测到:
        在这里插入图片描述
        在这里插入图片描述
        3)此时再打开安装好的stm32CubeProgrammer,选择USB连接方式,点击连接:
        在这里插入图片描述
        连接后会看到当前飞控flash中的二进制程序:Bootloader程序 + Ardupilot程序
        在这里插入图片描述
        点击Open file,选择要烧录的 AP_Bootloader.hex文件,设置好起始地址,最后点击烧录(download):
        在这里插入图片描述
        烧录成功:
        在这里插入图片描述

5. 关于 Board ID

  • 意义:固件防篡改
  • 如果飞控中正在使用的 bootloader 程序的 board id 和即将要烧录的飞控固件不一致,则通过Misson Planner 无法将固件烧录到飞控中,这提供了固件防篡改的作用!!
  • APJ Tools 可以修改编译好的 .apj 固件中的 board id 和飞控预设参数。
  • 飞控固件和 bootloader 的 board id 定义在 hwdef_bl.dat 和 hwdef.dat 中。
  • 新飞控板的 Board ID 如何取值?
    • 一般,新飞控板的 Board ID 取值要 >1000;
    • 如果固件开启了 OpenDroneID 功能,建议 Board ID 取值 >10000,一般取:10000 + base board ID;
    • 查阅目前已经被使用的 Board ID 请参考: board_types.txt

6. 参考文献

【1】https://ardupilot.org/dev/docs/common-oem-customizations.html
【2】https://ardupilot.org/dev/docs/porting.html

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: S5500-20TP-SI是一款网络交换机产品,固件即交换机的固定软件,用于控制和管理交换机的功能。固件是嵌入在交换机硬件内部的软件程序,为交换机提供各种功能和配置选项。 S5500-20TP-SI交换机的固件包括操作系统、交换机驱动程序和管理界面等多个部分。操作系统是交换机的核心,控制和管理交换机的各种功能,例如网络接口的管理、数据包的转发和路由等。交换机驱动程序负责与硬件设备的交互,确保交换机能够正确地读取和处理数据流。管理界面提供给管理员使用,用于配置和监控交换机的各种参数和状态。 S5500-20TP-SI交换机的固件可以通过固件升级来升级到新版本,以获得新功能和性能优化。固件升级通常需要通过网络或本地接口进行,管理员可以从供应商官方网站或其他渠道下载最新的固件包,并按照官方文档提供的步骤进行固件更新操作。 固件的稳定性和安全性对于交换机的正常运行和网络安全非常重要。因此,在升级固件时,管理员应该确保固件包的完整性和合法性,避免使用未经认证或来源可疑的固件。另外,在升级固件前应备份当前的配置文件和数据,以防止升级过程中出现错误导致数据丢失。 总之,S5500-20TP-SI交换机的固件是控制和管理交换机功能的重要软件,管理员应定期检查和更新固件,以获得更好的性能和功能,同时注意固件升级的安全性和稳定性。 ### 回答2: S5500-20TP-SI是一种网络交换机产品,固件是指交换机上运行的软件系统。固件对于交换机的正常运行起着至关重要的作用。 该固件通常用于对交换机的配置、管理和控制。它包含了交换机的操作系统和功能模块,用于实现不同的网络协议、交换机端口管理、VLAN划分、安全策略和流量控制等功能。 通过升级或更新固件,可以获得更稳定、更安全和更高性能的交换机操作系统。固件的升级通常会修复已知的漏洞和错误,提供新的功能和改进的网络性能。 同时,固件还能够对交换机进行配置,包括端口的开关、速度和双工模式、VLAN的设置、QoS和安全策略的配置等等。通过固件配置,可以满足不同网络环境下的需求和应用场景。 总的来说,S5500-20TP-SI固件是该交换机产品不可或缺的一部分,它对于交换机的正常工作起着重要作用。在使用过程中,需要根据实际需求对固件进行配置和管理,并及时进行升级,以获得更好的网络性能和更高的安全性。 ### 回答3: S5500-20TP-SI是一款交换机设备,固件是指设备操作系统的软件版本。固件常常包含了设备的驱动程序、配置文件和操作系统内核等。S5500-20TP-SI交换机的固件会经常进行更新,以增加新功能、修复存在的问题和提升设备性能等。 S5500-20TP-SI交换机的固件升级具有以下几个重要的好处。首先,固件升级可以修复软件存在的漏洞和问题,提升设备的安全性和稳定性,保障网络的正常运行。其次,固件升级可以增加设备的性能和功能,提供更多的网络管理和监控功能,方便管理员对网络进行更好地控制和管理。另外,固件升级还可以兼容和支持新的硬件设备,提高网络的兼容性和扩展性。 对于固件的更新,我们需要在准备工作充分的情况下进行,以避免固件升级过程中出现意外。在更新固件之前,我们应该备份设备的配置文件,以免丢失重要的网络配置信息。另外,我们还需要了解并下载正确的固件版本,并遵循厂商提供的升级指南和步骤进行操作。 在固件升级的过程中,我们需要关闭设备的其他服务和功能,确保升级过程的顺利进行。升级完成后,我们需要对网络设备进行测试和验证,保证网络的正常运行。同时,我们还应该关注厂商提供的后续支持和更新,及时获取并安装新的固件版本,以保证网络设备的最新性和可靠性。 综上所述,S5500-20TP-SI交换机的固件对于设备的稳定性、安全性和功能性都起着重要的作用。我们应该定期进行固件升级,并遵循厂商提供的操作指南,以保证设备的正常运行和网络的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值