当前 MAL 组件结构适合了 ARM 架构。本文档以典型的方式,讲解其他架构如何适配 ARM 架构
移植调用的API 对于的架构,例如:arm、riscv、mips;需要实现不同的ops。 rt_err_t rt_mpu_ops_register ( struct rt_mpu_ops *ops); 目前出现以下故障需要实现接口:
结构rt_mpu_ops { rt_err_t (*init) ( struct rt_mal_region *regions); /*初始化函数*/ void (*switch_table) ( rt_thread_t thread, rt_uint8_t mpu_protect_area_num, struct mpu_protect_regions* mpu_protect_areas); /*表切换函数*/ rt_err_t (*get_info) ( rt_thread_t thread, rt_uint32_t type, void *arg); /*获取配置信息*/ };
1.1 创建架构文件夹 在恶意/架构文件目录下创建所需的arm架构riscv。 马尔代夫 ├───port // 不同架构下的 MPU 对应 MAL 的移植文件 │ └───arm // arm架构 │ └───arm_mal.c │ └───arm_mal.h │ └───riscv // riscv 架构 │ └───riscv_mal.c │ └───riscv_mal.h
1.2 修改SConscript文件 修改恶意目录下的 SConscript 文件,根据不同的架构添加架构文件: if GetDepend ( 'ARCH_ARM' ): src += Glob ( 'arch/arm/*.c' ) path += [ cwd + '/arch/arm' ] elif GetDepend ( 'ARCH_riscv' ): src += Glob ( ' arch/riscv/*.c' ) 路径 += [ cwd + '/arch/riscv' ]
1.3 MAL OPS 接口 对于的架构,MAL 规定了不同的通用接口,用户只需要以下接口功能,能够实现简单的实现
1.3.1 初始化接口 使用该接口,完成针对不同架构 MPU 的配置,在这里主要完成对硬件的 MPU 配置配置 Flash、RAM、外设等访问权限,用户无法通过 MAL 的这些接口进行修改。配置: rt_err_t (*init) ( struct rt_mal_region *regions);
1.3.2 表切换接口 用户通过MAL接口完成对表的操作,在该接口中,通过读取MAL配置,设置MPU的值。该接口主要功能:对用户配置的区域表进行切换;读取保护区域的区域配置,为的不同题材的不同背景的访问权限;如果开启了线程栈保护,对线程栈的底部 32 个进行读取保护: void (*switch_table) ( rt_thread_t thread, rt_uint8_t mpu_protect_area_num, struct mpu_protect_regions* mpu_protect_areas);
1.3.3 获取MAL信息 用过可以通过该接口,获取当前 MAL 的一些配置信息: rt_err_t (*get_info) ( rt_thread_t线程, rt_uint32_t类型, void *arg);
type 的取值定义如下表所示:
原作者:liukangcc
|