1. 概述

1.1 基本概念

MMU全称“Memory Management Unit”,顾名思义就是“内存管理单元”。

1.2 运作机制

建立页表描述符号表,将物理地址映射成虚拟地址,以虚拟地址为媒介来操作和管理实际的物理内存。

页表描述符号表,是由用户根据所使用的主芯片的页表描述格式,去创建、修改和管理的,而内存则依据页表描述符号表进行映射、权限控制等。页表描述符号表在创建或修改后,需要将它写入协处理器CP15才能生效,而协处理CP15正是内存管理的实际执行者。

综合来说,对MMU操作就是通过修改页表描述符和控制CP15协处理器来实现的,具体运作流程如下图1所示。

Huawei LiteOS的MMU有两个方面的作用:

  • 提供硬件机制的内存cache/nocache属性的控制接口。
  • 提供硬件机制的内存访问权限控制接口。

2. 开发指导

2.1 使用场景

系统内部有些内存不希望被修改,否则会造成不可预测的后果,此时可以用MMU修改该段内存的访问权限。访问该段内存时会检查访问权限,若权限不正确则会触发异常,起到保护该段内存数据的作用。

2.2 功能

Huawei LiteOS中MMU模块为用户提供以下接口:

功能分类 接口名 描述
内存访问权限控制 LOS_MMUParamSet 修改指定地址段的内存cache状态、buffer状态、读写权限状态

参数:

BUFFER_ENABLE/BUFFER_DISABLE ---- 使能/关闭buffer

CACHE_ENABLE/CACHE_DISABLE ---- 使能/关闭cache

ACCESS_PERM_RW_RW/ACCESS_PERM_RO_RO ---- 可读写/只读

举例:

LOS_MMUParamSet(&__text_start, &__text_end, BUFFER_ENABLE|CACHE_ENABLE|ACCESS_PERM_RO_RO);

描述:

将__text_start, __text_end这两个地址之间的内存设置为(写回)启用cache、 buffer、只读。

说明

LOS_MMUParamSet的入参1和入参2需要4KB对齐,入参3最好是显示的选择以上列举的3种类型的宏。

3 注意事项

  • 目前MMU二级页表可操作最小内存单位是4KB,所以要设置访问权限的内存区域的起始地址和结束地址都要4KB对齐。一级页表修改未做对外接口,无需关注。
  • 通过该接口可控制的内存大小,取决于分配用于存放二级页表的内存大小,例如Hi3516a:预留了0x800000000x80008000的内存用于存放页表,其中0x80000000x80004000用于存放一级页表,0x80004000~0x80008000(16K)用于存放二级页表(每条表项占用4byte,每条表项对应4K内存),所以最多可以控制16M的可配置内存。

4 编程实例

4.1 实例描述

调用接口LOS_MMUParamSet,修改内存区域的读写权限,再通过在该内存区域进行写操作,查看是否读写权限正确修改。

步骤1 修改一段区间的内存读写权限为只读。

步骤2 在该段区间的内存中进行简单的写操作。

系统进入异常,说明将该内存设置为“只读”成功。

步骤3 注释掉2中的写操作,而是直接调用接口将读写权限重新修改为可读可写。

系统不进入异常,说明将该内存设置为“可读可写”成功。

4.2 编程实例

UINT32 MMU_Sample()
{
UINT32 *pAlignaddr;
PRINTK("---- TEST START ----\n");
pAlignaddr = (UINT32 *)(&__text_start);
PRINTK(">>1\n");
LOS_MMUParamSet(&__text_start, &__text_end, BUFFER_ENABLE|CACHE_ENABLE|ACCESS_PERM_RO_RO);
*pAlignaddr = 0xa; //if done, be exc
PRINTK(">>2\n");
LOS_MMUParamSet(&__text_start, &__text_end, BUFFER_ENABLE|CACHE_ENABLE|ACCESS_PERM_RW_RW);
*pAlignaddr = 0xb;
PRINTK(">>3\n");
PRINTK("---- TEST END ----\n");
return LOS_OK;
}

4.3 运行结果

liteos MMU(十八)的更多相关文章

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

    在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...

  2. Bootstrap <基础二十八>列表组

    列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...

  3. Bootstrap <基础十八>面包屑导航(Breadcrumbs)

    面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...

  4. 最全的MySQL基础【燕十八传世】

    1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...

  5. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  6. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十八】

    <Web 前端开发精华文章推荐>2013年第六期(总第十八期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  7. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. Python之路【第十八篇】:Web框架们

    Python之路[第十八篇]:Web框架们   Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...

  9. Unity3D研究院之Jenkins的使用(七十八)

    长夜漫漫无心睡眠,来一篇嘿嘿.我相信如果已经用Shell脚本完成IOS和Android打包的朋友一定需要Jenkins 怎么才能让策划打包ipa和apk?怎么才能彻底省去程序的时间,只要在同一局域网内 ...

  10. 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...

随机推荐

  1. MSSQL 删除重复数据

    --删除重复数据,无标识列情况 if object_id(N'test',N'U') is not null drop table test go create table test( id INT, ...

  2. python anaconda 常用操作;conda 命令指南

    在使用 python anaconda时,经常会用到很多常用操作,记录下来,方便以后更好地使用: conda: Conda既是一个包管理器又是一个环境管理器.你肯定知道包管理器,它可以帮你发现和查看包 ...

  3. 有static的方法和没有static的调用

    package com.yh.test02; public class Test { public static void main(String[] args) { Test.method1(); ...

  4. Servlet一次乱码排查后的总结

    由来 在写一个小小的表单提交功能的时候,出现了乱码,很奇怪request上来的参数全部是乱码,而从数据库查询出来的中文显示到页面正常,锁定肯定是request对象那里出了问题.后来经过排查,发现是我封 ...

  5. docker修改系统时间总结

    最近弄docker烦躁的一笔,时区问题踩了不少坑,为了以后再遇到类似问题再花时间查资料,特记录一下... Ubuntu: echo "Asia/Shanghai" > /et ...

  6. Global Azure Bootcamp 2019 宁波站活动总结

    4月27日,由微软MVP技术社区发起的Global Azure Bootcamp 2019盛会在全球80多个国家270个城市举办.本次活动由全国众多Azure专家及微软MVP技术社区成员,分别在北京. ...

  7. 抓包工具之fiddler实战1-基本设置

    Fiddler概述 百度搜索fiddler能找到官网网站,百度软件中心也提供了下载,本人去下载了基本和官网的版本一致,但还是建议大家下载软件一定去官网进行下载. Fiddler是干什么的 在百度百科里 ...

  8. 美团技术分享:深度解密美团的分布式ID生成算法

    本文来自美团技术团队“照东”的分享,原题<Leaf——美团点评分布式ID生成系统>,收录时有勘误.修订并重新排版,感谢原作者的分享. 1.引言 鉴于IM系统中聊天消息ID生成算法和生成策略 ...

  9. 三、动态SQL

    动态SQL MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 动态SQL的元素 元素 作用 备注 if 判断语句 单条件分支判断 choose.whe ...

  10. 在.net core程序中使用EntityFrameok(非EF Core)

    最近用NoSQL较多写,用传统的EF到不多,但在一些.net core小程序中也小试牛刀过,不过当时用的是微软为.net core量身定制的Entity Framework Core,只是一些比较常规 ...