ARM技术论坛
直播中

杨万富

8年用户 1620经验值
擅长:526774
私信 关注
[经验]

分享一种MAL组件适配ARM架构的方法

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

更多回帖

发帖
×
20
完善资料,
赚取积分