一、移植前的准备

1. 准备目标硬件(开发板/芯片/模组)

TencentOS tiny目前主要支持ARM Cortex M核芯片的移植,比如STM32 基于Cortex M核全系列、NXP 基于Cortex M核全系列等。本教程将使用STM32官方Demo开发板 NUCLEO-L073RZ进行示例移植,其他 ARM Cortex M系列开发板和芯片移植方法类似。

调试ARM Cortex M核还需要仿真器, NUCLEO-L073RZ自带ST-Link调试器,如果您的开发板或者芯片模组没有板载仿真器,就需要连接外置的仿真器,如J-Link、U-Link之类的。

2.准备编译器环境

本移植指南针对的是Keil编译器,所以我们移植内核前需要先安装Keil编译器,能编译ARM Cortex M核的Keil编译器现在也叫MDK,最新版本5.28a,下载地址为:https://www.keil.com/demo/eval/arm.htm填写注册信息即可下载,下载完成在windows环境下按照提示安装即可,安装完成后需要自行购买软件License,避免32K Flash下载限制。由于新版本的MDK编译器和芯片支持包是分离的,所以MDK(Keil)安装完成后,还需要安装对应芯片的器件支持包(PACK包),比如本教程示例的NUCLEO-L037RZ开发板的芯片是STM32L073RZ,就需要安装Keil.STM32L0xx_DFP.2.0.1.pack系列器件支持包,MDK所有支持芯片的PACK包下载地址为:http://www.keil.com/dd2/Pack/#/eula-container ,您只需要根据您的芯片型号下载对应的PACK包即可,当然您也可以在MDK集成开发环境中在线下载安装。

3. 准备芯片对应的裸机工程

移植TencentOS tiny基础内核需要您提前准备一个芯片对应的裸机工程,裸机工程包含基本的芯片启动文件、基础配置(时钟、主频等)、以及串口、基本GPIO驱动用于RTOS测试。

本教程使用ST官方的STM32CubeMX软件来自动化生成MDK裸机工程,STM32CubeMX的下载地址为:

https://www.st.com/content/st_com/zh/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html

安装STM32CubeMx还需要事先安装好JDK环境,您可以在互联网上查找如何安装和配置JDK环境,此处不再赘述。

CubeMX安装完成后,我们就可以使用CubeMX来给NUCLEO-L037RZ开发板生成裸机工程了,如果您的芯片不是STM32,而是其他厂商的ARM Cortex M系列,您可以根据产商的指导准备裸机工程,后续的内核移植步骤是一致的。

3.1 首先启动STM32CubeMX,新建工程

一、移植前的准备 - 图1

3.2 选择MCU型号

一、移植前的准备 - 图2

如上图所示:通过MCU筛选来找到自己开发板对应的芯片型号,双击后弹出工程配置界面,如下图:

一、移植前的准备 - 图3

3.3 Pin设置界面配置时钟源

一、移植前的准备 - 图4

3.4 Pin设置界面配置串口

一、移植前的准备 - 图5

3.5 Pin设置界面配置GPIO

一、移植前的准备 - 图6

3.6 配置总线时钟

一、移植前的准备 - 图7

3.7 工程生成参数配置

一、移植前的准备 - 图8

3.8 代码生成方式配置

一、移植前的准备 - 图9

3.9 生成工程

一、移植前的准备 - 图10

3.10 keil下的裸机工程

点击生成代码后,生成的裸机工程效果如下:一、移植前的准备 - 图11

这样NUCLEO-L073RZ裸机工程生成完成,该工程可直接编译并烧写在板子上运行。

4. 准备TencentOS tiny的源码

TencentOS tiny的源码已经开源,github下载地址为:https://github.com/Tencent/TencentOS-tiny.git

一级目录二级目录说明
archarmTencentOS tiny适配的IP核架构(含M核中断、调度、tick相关代码)
boardNUCLEO_L073RZ移植目标芯片的工程文件
kernelcoreTencentOS tiny内核源码
pmTencentOS tiny低功耗模块源码
osalcmsis_osTencentOS tiny提供的cmsis os 适配

由于本教程只介绍TencentOS tiny的内核移植,所以这里只需要用到 arch、board、kernel、osal四个目录下的源码。