欢迎光临散文网 会员登陆 & 注册

Betaflight 的Makefile 体系与移植

2022-10-17 22:47 作者:二木山人  | 我要投稿

betaflight 的 makefile体系是整体构建固件的基础, 因为支持基本整个全系列STM 芯片,从F103 一直到 H7 (目前官方已经移除F1、F3 的支持,仅支持F4、F7、H7系列),芯片的架构、配置、存储布局、内存布局等各不相同,另外还要考虑一部分特定目标需要配置特定的信息,所以betaflight 实现了一个十分复杂的makefile体系。 所以构建betaflight 最好的方式是按照官方文档,使用 make +arm-gcc + binutils 工具链进行构建。 调试最好使用 gdb+openocd +Jlink/STlink/Daplink 进行仿真调试。


所需背景知识:

1、makefile 语法

2、linux 下 make、gcc、gdb、binutils 等编译工具链基础知识

3、git 、python 等基本工具知识

如果以上背景知识不够扎实,可以边看边搜边补充。


先介绍 betaflight 的makefile体系:


整体betaflight的makefile 包括3部分:

betaflight/make 目录,

betflight/Makefile

betaflight/src/main/targets/target.mk


第一部分:betaflight/make 文件夹相关目录结构与用途如下:

make

----mcu                                     具体MCU 的定义,如果新增MCU 需要在这里配置

--------AT32F43x.mk                 本次移植新增的at32f435/7 系列mcu构建脚本,新建
--------SITL.mk                           软件仿真构建目标
--------STM32F1.mk                  stm32f103 mcu 构建脚本
--------STM32F3.mk
--------STM32F4.mk
--------STM32F7.mk
--------STM32G4.mk
--------STM32H7.mk

---source.mk                          betaflight 公用源文件清单、usb以及其他库文件清单,速度、大小优化裁剪文件清单等          需要微调,增加at系列source file

---targets.mk                         所有的目标信息配置,需要配置 at新增的target

---targets_list.mk                   所有目标清单,包括支持的、淘汰的等,不需要动

---tools.mk                            自动安装构建相关工具的清单,不需要动

---checks.mk                         相关校验清单,不需要动

---openocd.mk                      openocd 仿真配置清单,包括jlink、stlink等,本次移植没有用

---system-id.mk                      其他配置相关清单,判断当前系统是什么系统 ,不需要动

---macosx.mk                         mac os下 的编译环境配置,不需要动

---windows.mk                        windows 下的编译环境配置,不需要动

--- linux.mk                             linux 下的编译环境配置 ,不需要动

--- build_verbosity.mk             交互式构建的设置,不需要动


第二部分:主Makefile

betaflight/ Makefile                   makefile 是bf的 主makefile文件,通过include make文件夹和target文件夹下的makefile来实现根据命令自动构建具体的目标固件的构建规则。 主makefile 不需要做修改。


第三部分: betaflight/src/main/target/AT32F437DEV

具体的target 配置文件夹,主要包括 targe.h  target.c  target.mk 三个文件,为了移植到at32 的starter 开发板上,新增 AT32F437DEV 目标

target.h  :新增目标头文件配置,主要是配置spi、i2c、uart、beeper、timer、led 等针脚配置以及启用的timer 、gpio端口等,这部分信息会被编译后的 转换为  PG 配置信息,对应到 bf 地面站 CLI 命令行里的Resource 信息 ,另外还包括具体使用什么 ACC 和GYRO、 具体传感器信息等,通过 #define  USE_xxxx  等宏定义打开编译时包含的传感器驱动代码等。 一般考虑到mcu 的flash 大小以及构建的目标硬件配置来设定

target.c  与target.h 配套使用,但是主要配置的是

timerHardware[USABLE_TIMER_CHANNEL_COUNT]

通过 DEF_TIM 宏来给需要通过timer  输出PWM 的针脚定义配置信息, 主要包括:CameraControl、LedStrip、Motor、Servo 等需要pwm 驱动的外设针脚定义以及使用的DMA 通道。


以上target.h和target.c 的相关针脚映射不可以随便定义,需要查具体芯片的用户手册与数据手册GPIO 复用表格,来设定具体目标板的针脚IO分配。 配置错误可能会导致硬件无法使用。所以移植过程中需要反复的核对配置信息。


target.mk   这个文件是 target 的关键, 通过targets.mk 通过扫描 target 目录下的具体子目录名称作为 BASE_TARGET  参数,而 target.mk 文件里


为了移植AT32F43x 系列MCU ,需要做以下工作:

1、搭建编译环境,可以在linux 或者安装了cygwin 的windows bash 中,在betaflight 目录下执行 :make arm_sdk_install  命令,会自动安装 arm 相关工具链到 betaflight/tools/文件夹下,后面的固件构建也会自动引用这个文件夹下的工具 。

2、新建target 配置,如上文分析

3、增加 targets.mk 配置

4、新增 mcu/AT32F43X.mk 配置

通过以上几步基本构建了新移植的at32f435/7 系列mcu 的makefile体系,后面的移植过程中通过make命令进行目标固件的构建工作。


Betaflight 的Makefile 体系与移植的评论 (共 条)

分享到微博请遵守国家法律