芯片架构的相关代码位于platform/arch中。

arch目录下已经实现了基本通用的CPU架构的porting,如果新增单板的CPU架构在此列表中,则跳过本章节进入新增MCU描述。

下面是支持的arch列表:

ARM ARM9
Cortex-M0/M0+
Cortex-M3
Cortex-M4
Cortex-M7
Cortex-A5
Cortex-A7
Cortex-A9
Xtensa lx6
lx106
C-SKY cskyv2-l
Renesas rl78
rx600
MIPS mips32
mips-I
Linux
RISC-V risc_v32I

2、新增CPU适配点

对于系统中已经支持的CPU架构,可以直接使用对应的platform/arch模块,如果需要新增CPU架构支持,需要适配下面几个接口,其对所有CPU架构通用:

cpu_intrpt_save 关中断
cpu_intrpt_restore 开中断
cpu_intrpt_switch 中断退出切换(在中断处理函数尾部使用,需要确保被打断的上下文正确保存,中断退出后,回到当前最高优先级任务)
cpu_task_switch 任务切换(需要保存老任务上下文、获取最高优先级任务、恢复新任务上下文)
cpu_first_task_start 进入第一个任务调度
cpu_task_stack_init 任务栈初始化
cpu_cur_get 获取当前核号

涉及到新CPU架构移植,可联系相关支持人员。

3、CPU arch目录规范

规范:新增CPU架构规范,以ARM体系为例

ARM armv5 armcc/gcc/iccarm
armv6m armcc/gcc/iccarm m0
armv7m armcc/gcc/iccarm m3
m4
m7
armv7a armcc/gcc/iccarm a5
a7
a9

三级和四级目录按照具体情况可选。对于三级目录,如果此架构的演化只会使用一套编译体系即gcc,则不需要分此目录;如果二级目录可以区分不同的处理器系列或架构类型,则按照具体情况不需要添加。

规范:arch需要包含下面几个文件

k_types.h 基本数据类型定义,无特殊情况可沿用
port.h CPU接口头文件
port_c.c CPU适配.c文件,主要是cpu_task_stack_init适配
port_s.S CPU适配.s文件,相关汇编实现

章节2.2.2列出的CPU的适配接口按照实际情况在port_c.c 或者port_s.S中实现。其他CPU架构相关的文件需要放在arch目录下,可以按照实际需求安放。

3.1、arch mk文件编写

规范: 没有例外情况,统一在二级Process arch目录添加对应的编译mk文件。

arch mk添加规范如下(以armv7m为例):

NAME := arch_armv7m                       #arch_+架构名  
$(NAME)_MBINS_TYPE := kernel              #多bin情况下,归属kernel还是app
$(NAME)_VERSION    := 1.0.2               #menuconfig版本号
$(NAME)_SUMMARY    := arch for armv7m     #描述              
$(NAME)_SOURCES       +=                  #组件包含.c文件
GLOBAL_INCLUDES       +=                  #包含头文件   
ifeq ($(COMPILER),armcc)                  #区分编译器
ifeq ($(HOST_ARCH),Cortex-M4)             #区分Process series

3.2、config.in文件编写

arch Config.in添加规范如下(以armv7m为例):

config AOS_ARCH_ARMV7M            # 定义组件配置选项
    bool                          # 配置选项类型
    help
      arch for armv7m             # 配置选项帮助

if AOS_ARCH_ARMV7M
# Configurations for arch armv7m  # 如有必要,定义更多组件内配置选项
endif

Arch组件配置选项命名规范:使用前缀“AOS_ARCH_” + 组件NAME。 原则上在3.1版本中,mk只用来增加定义的组件components,其他配置和宏定义统一在Config.in定义。具体参考组件化指导文档。