当前 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