[国嵌攻略][048][MMU配置与使用]
MMU配置与使用
1.通过点亮LED使用虚拟地址来使用MMU,采用段页映射方式
2.任务步骤:1.建立一级页表 2.写入TTB 3.打开MMU
代码编写
1.虚拟地址的段地址0xA0000000,一级页表的起始地址0x30000000(通常放在内存的起始地址),物理地址的段地址0x56000000
2.表项的位置等于一级页表的起始地址加上虚拟地址的高12位
3.表项的内容
Section base address:段基地址
SBZ:保持0
AP:访问权限,设置为11表示任意情况可读可写,在ARM核手册有相关描述
Domain:域,ARM处理器分为16个域,每个域的访问权限由AP和域中的R S共同决定
C:是否使用Cache
B:是否使用Write Buffer
4.CP15,C1寄存器的0位设置MMU,设置成1,表示使能MMU;C2寄存器设置TTB,设置成0x30000000,表示转换表的基地址为0x30000000;C3寄存器设置Domain,设置成0xFFFFFFFF,每个域都为0b11表示不检测权限
5.当MMU打开后,不管是访问内存的地址还是访问外设的地址都要经过MMU的转换。内存的虚拟地址采用与物理地址相同
6.MMU(存储管理单元)的作用是使大程序能分段在小内存中不同地方运行。在操作系统中,转换表通常由操作系统来维护,添加表项和控制页的换出和换出。页表本身访问的地址空间不会变大,但能把大程序分段通过虚拟地址来访问在,看起来内存变大了。通常在引导中是不需要打开的。
/********************************************************************
*名称:enable_mmu
*功能:使能存储管理单元
*********************************************************************/
.global enable_mmu
enable_mmu:
//初始化转换表
ldr r0, =TTB
ldr r1, =VADDR
ldr r2, =PADDR loop_init_table:
cmp r1, #EADDR //如果虚拟地址等于结束地址,那么结束循环
beq end_init_table //设置表项地址
mov r3, r1, lsr#20 //取出虚拟地址的高12位
mov r3, r3, lsl#2 //计算虚拟地址相对于基地址的偏移地址,地址4字节,左移2位相当于乘以4
add r3, r0, r3 //计算表项地址 //设置表项值
ldr r4, =0xFFF00000
and r4, r2, r4 //取出物理地址的高12位
ldr r5, =SECTION_FLAG
orr r5, r4, r5 //设置转换表项
str r5, [r3] add r1, r1, #SECTION_SIZE
add r2, r2, #SECTION_SIZE
b loop_init_table end_init_table:
//设置转换表基地址
ldr r0, =TTB
mcr p15, 0, r0, c2, c0, 0 //设置访问域权限
mvn r0, #0 //设置访问域不检测权限
mcr p15, 0, r0, c3, c0, 0 //打开存储管理单元
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #0x00000001 //打开MMU,设置M[0]:1
mcr p15, 0, r0, c1, c0, 0 mov pc, lr
注意:在计算表项地址时,加的地址偏移要乘以4个字节,因为表项地址在转换表是32位
[国嵌攻略][048][MMU配置与使用]的更多相关文章
- [国嵌攻略][047][MMU功能解析]
MMU功能解析 1.Memory Management Unit(存储器管理单元) 2.两个进程读取同一个地址能读到不同的值.因为进程访问的是虚拟地址,通过MMU转换成不同的物理地址.不同的进程通过M ...
- [国嵌攻略][099][Linux内核配置与编译]
为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make m ...
- [国嵌攻略][182][Sqlite嵌入式数据库移植]
数据库系统构成 在计算机系统中,保存数据的方式一般有两种: 1.普通文件方式 2.数据库方式 相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性. 数据库系统一般由三个部分构成 1. ...
- [国嵌攻略][179][OpenSSL加密系统]
未加密传输的安全弊端 如果在网络传输中没有加密,就是以明文传输.传输的数据可以被抓包软件直接截获,并能读取里面的数据. 加密基本原理 1.对称加密 2.非对称加密 2.1.公钥私钥 公钥和私密要配对. ...
- [国嵌攻略][173][BOA嵌入式服务器移植]
1.解压boa嵌入式web服务 tar zxvf boa-0.94.13.tar.gz 2.进入src目录生成配置文件 ./configure 3.修改生成的Makefile CC=arm-linux ...
- [国嵌攻略][164][USB驱动程序设计]
USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...
- [国嵌攻略][163][linux-usb软件系统架构]
软件系统架构 1.主机端软件架构 USB设备驱动->USB核心->USB主控制器驱动->USB主控制器 2.设备端软件架构 Gadget驱动->Gadget API->U ...
- [国嵌攻略][162][USB协议分析]
USB设备逻辑结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点. USB设备描述符 当我们把USB设备( ...
- [国嵌攻略][158][SPI裸机驱动设计]
SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会 ...
随机推荐
- bzoj 4817: [Sdoi2017]树点涂色
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...
- CentOS7 nginx安装
1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. n gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没 ...
- 关于文件上传的ajax交互
首先我们来了解一下上传文件 <input type="file"> input的file常用上传类型 后缀名 MIME名称 *.3gpp audio/3gpp, vid ...
- find + xargs + cp 遇到文件名中带空格如何处理
一,需求为查询文件名为ZRSH开头的时间为7月至今的所有文件并打包 1.首先想到的就是find + xargs + cp 格式.. find 2016073* -type f -name *ZRS ...
- c#程序连接mysql,报"Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='"的解决方案
=============================================== 20170607_第一次修改 ccb_warlock === ...
- Verilog code
1.计数,用于对精度不高的计数 always @(posedge clk or negedge rst_n) begin if(!rst_n) div_cnt <= 'd0; else div_ ...
- 自动化测试辅助工具(Selenium IDE等)
本随表目录 Selenium IDE安装和使用 FireBug安装和使用 FirePath安装和使用 Selenium IDE安装 方式一:打开Firefox-->添加组件-->搜索出 ...
- Python的range函数详细用法
1. >>> range(1,5) #代表从1到5(不包含5) [1, 2, 3, 4]>>> 2. >>> range(1,5,2) #代表从 ...
- 线程安全Dictionary
public abstract class ReadFreeCache<TKey, TValue> { protected ReadFreeCache() : this(null) { } ...
- 关于Python的函数(Method)与方法(Function)
先上结论: 函数(function)是Python中一个可调用对象(callable), 方法(method)是一种特殊的函数. 一个可调用对象是方法和函数,和这个对象无关,仅和这个对象是否与类或实例 ...