Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[component][mpu] [update] memory protect unit abstract layer. #5379

Closed
wants to merge 2 commits into from

Conversation

liukangcc
Copy link
Member

@liukangcc liukangcc commented Dec 14, 2021

拉取/合并请求描述:(PR description)

[

描述

MAL (mpu abstract layer) 是 rt-thread 官方基于 Memory Protect Unit (MPU) 做的一款用于内存保护的抽象层组件。

作用

内存保护单元(MPU),提供了内存区域保护功能。通过 MPU,可以使程序更具健壮性,提高嵌入式系统的稳定性,使系统更加安全。通过使用 MPU 组件能使 RT-Thread 操作系统在进军军工、医疗、汽车等行业更具竞争力。MAL 组件具有以下特性:

  • 线程堆栈溢出检测
  • 内存隔离,某一线程使用的内存区域,其他线程禁止访问
  • 为每个线程设定不同的区域的内存的访问权限

测试

已在 ART-Pi 上测试完成
]

以下的内容不应该在提交PR时的message修改,修改下述message,PR会被直接关闭。请在提交PR后,浏览器查看PR并对以下检查项逐项check,没问题后逐条在页面上打钩。
The following content must not be changed in the submitted PR message. Otherwise, the PR will be closed immediately. After submitted PR, please use a web browser to visit PR, and check items one by one, and ticked them if no problem.

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • 本拉取/合并请求代码是高质量的 Code in this PR is of high quality
  • 本拉取/合并使用formatting等源码格式化工具确保格式符合RT-Thread代码规范 This PR complies with RT-Thread code specification


struct rt_mal
{
rt_uint16_t index;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个作用是什么,会不会非对齐

@@ -0,0 +1,33 @@
menu "MPU abstraction layer"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is mal here? Please discuss.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个什么意思呢,是名字不好,还是放的位置不好?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mal这个名字直接放置于components下都会显得奇怪。或者放入到components/drivers目录下,或者定义一些公共的API接口,由不同的硬件架构进行实现,从而放到libcpu中。

@BernardXiong BernardXiong added the discussion This PR/issue needs to be discussed later label Dec 15, 2021
HardFault_Handler PROC
MemManage_Handler
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个Handler在这里去掉了 ,如果不开mal是不是就报错了?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里要考虑不开MAL的情况下,如果触发了异常,怎么处理

@BernardXiong
Copy link
Member

从名字上来说,直接使用mpu应该会更直接

Copy link
Member

@BernardXiong BernardXiong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

请仔细考虑 & 设计

@@ -0,0 +1,33 @@
menu "MPU abstraction layer"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mal这个名字直接放置于components下都会显得奇怪。或者放入到components/drivers目录下,或者定义一些公共的API接口,由不同的硬件架构进行实现,从而放到libcpu中。

default 2

config RT_MPU_REGIONS_NUMBER
int "Set mpu regions number"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个MPU是一份ARM only的实现吗?如果是这样,那么放入到components下是非常不适合的

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

是通用的实现,支持 ARM RISCV


static rt_err_t _mpu_get_info(rt_thread_t thread, rt_uint32_t type, void *arg)
{
return RT_EOK;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

所有的risc-v实现都是空的?…… Please tag this PR as draft.

@@ -127,6 +127,9 @@ PendSV_Handler PROC
STR r1, [r0] ; update from thread stack pointer

switch_to_thread
IMPORT rt_mpu_table_switch
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TAB/space ……

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

汇编.s .asm .S .a后缀也应该纳入ci格式检查

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不过上次FreeRTOS那边曾经提到过一个问题,貌似有些编译器如果改成空格会出问题,所以需要format之后再实际编译测试一下才可以。

@supperthomas supperthomas changed the title [update] memory protect unit abstract layer. [component][mpu] [update] memory protect unit abstract layer. May 4, 2023
@mysterywolf mysterywolf marked this pull request as draft May 13, 2023 04:31
@Guozhanxin Guozhanxin closed this Dec 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussion This PR/issue needs to be discussed later
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants