2.6 移植指南

Mynewt OS是一个包含调度器,时间控制,缓存管理,同步对象的完整多任务环境。同时也包含如控制台,命令shell,镜像管理,bootloader,文件系统等库和服务。

这些软件中的大多数都是平台独立的,不需要任何干预即可在你的平台上运行。但是一些组件却需要特定平台的支持。

这些组件的平台依赖可以分为以下几类:

  • CPU核心依赖——在目标平台上,需要特定代码或配置来操作CPU核心
  • MCU依赖——在目标平台上,需要特定代码或配置来操作MCU或SoC
  • BSP依赖——需要特定的代码或配置来适应目标平台的特定的布局和功能

2.6.1 BSP移植

2.6.1.1 BSP依赖

即使CPU核心、MCU和MCU HAL(Hardware Abstraction Layer,硬件抽象层)提供了所有功能,仍然有一些必须针对特定系统设定的东西。这些都在Mynewt中提供了,它允许你灵活的设计特定功能、外设以及产品中所需要的特性。

在Mynewt中,这些特定的设置和组件都包含在BSP中(Board Support Package,板级支持包)。BSP包含了在一个目标平台或硬件板上运行Mynewt的特定信息。Mynewt支持一些常见的开源硬件以及一些常见的MCU开发板。这些开发系统足以让你启动和运行原型,但当你要构建一个产品,此时你需要有自己平台,而这些或多或少会与Mynewt所支持的平台有区别。

BSP中提供的信息可以根据MCU和它的底层核心架构而有所不同。例如,一些MCU为UART,SPI等分配有独立的引脚,因此在使用这些外设时不需要BSP中特殊配置。然而,有些MCU是引脚多路复用,它允许MCU被映射到几个不同的引脚,对于这些MCU,BSP必须指定与当前系统硬件布局相匹配的UART引脚。

  • 如果你的BSP已经得到Mynewt的支持,那么就不需要额外的BSP移植工作,只需要通过newt工具中指定Mynewt目标的bsp属性
  • 如果你的BSP还没有得到Mynewt的支持,可以根据BSP移植的说明添加支持

2.6.1.2 移植

Apache Mynewt核心库已经包含了一些不同的开发板,对于每个支持的开发板,在hw/bsp目录下都有一个BSP包。

接下来将介绍如何从头开始创建BSP包。

  • 选择的MCU的数据手册
  • 开发板的原理图
  • MCU中关于CPU核心的信息

这个文档适用于任何硬件,示例BSP将使用Nordic nRF52。

2.6.2 MCU依赖

一些操作系统代码依赖于系统的MCU或SoC。例如,MCU可以指定系统的潜在内存映射——代码和数据可以驻留在哪里。

  • 如果你的MCU已经得到Mynewt的支持,那么将没有额外的MCU移植工作,只需要通过newt工具指定目标中的arch属性(通常在BSP文件中指定,bsp.yml中的bsp.arch属性)
  • 如果MCU还没有得到Mynewt的支持,那么需要根据MCU移植的说明添加支持

MCU HAL

Mynewt的框架支持硬件抽象层,用于普通的或芯片外的MCU外设,如GPIO,UART,闪存等。即使你的MCU已经在核心操作系统得到支持,但依然需要为一个新的外设实现HAL功能。关于HAL抽象和实现信息,可以参考HAL API。

2.6.3 CPU核心依赖

一些操作系统代码依赖于系统正在使用的CPU核心。例如,一个特定的CPU核心有一套特定的汇编语言指令集,并且可能需要特殊的交叉编译器或编译器设置恰当的指令集。

  • 如果你的CPU架构已经得到Mynewt的支持,那么将没有额外的CPU核心移植工作,只需要通过newt工具指定目标中的arch、compiler属性(通常在BSP文件中指定,bsp.yml中的bsp.arch,bsp.compiler)
  • 如果CPU架构还没有得到Mynewt的支持,那么需要根据CPU架构移植的说明添加支持