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. jQuery从零开始(一)

    1.jQuery是什么? 轻量级的工具库,类库. Jquery可以写的很少的代码,干的很多的事情. 2.学习心态,常用的功能 jQuery只是一个工具,它的实现原理还是js.以练习为主,多看多练. 常 ...

  2. could not launch process: debugserver or lldb-server not found: install XCode's command line tools or lldb-server

    0x00 事件 VS 调试 go 的时候,发生了这个错误,导致无法调试: could not launch process: debugserver or lldb-server not found: ...

  3. 如何在在手机上安装linux(ubuntu )关键词:Termux

    目录 Termux软件 @(如何在在手机上安装ubuntu 关键词:Termux) Termux软件 Termux是一款开源且不需要root,运行在Android终端上极其强大的linux模拟器. 首 ...

  4. Linux系统学习 二、测评-身份鉴别1

    身份鉴别 1)对登陆操作系统和数据库系统的用户进行身份表示和鉴别 1.密码文件中的口令字段是否不为空 2.检查各个用户主目录下的.rhosts文件 3.查看/etc/hosts.equiv 学习: 1 ...

  5. python xlwt写入excel操作

    引用https://www.cnblogs.com/python-robot/p/9958352.html 安装 $ pip install xlwt 例子: import xlwt # 创建一个wo ...

  6. webdriver浏览器版本驱动对应以及下载

    对于webdriver和各个浏览器的版本的对应,我最近发现浏览器驱动的对应在selenium库的源码里都有提及,路径是:python>site-packages>selenium>w ...

  7. nginx--代理和负载均衡

    nginx代理 nginx的代理分为正向代理和反向代理 正向代理指的是,一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原 ...

  8. Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

  9. 一文学会 TypeScript 的 82% 常用知识点(下)

    一文学会 TypeScript 的 82% 常用知识点(下) 前端专栏 2019-11-23 18:39:08     都已经 9021 年了,TypeScript(以下简称 TS)作为前端工程师不得 ...

  10. SVN基本使用

    1.把服务器的所有内容下载到本地 svn checkout 服务器地址 --username=使用者 --password=密码 2.添加文件 touch main.m(文件名) : 创建main.m ...