芯片架构的相关代码位于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定义。具体参考组件化指导文档。
在文档使用中是否遇到以下问题
更多建议
匿名提交