tiny6410的MMU的配置于使用
来源:互联网 发布:动态分配二维数组 编辑:程序博客网 时间:2024/04/29 15:14
由手册《Arm1176jzfs》的第六节可知,tiny6410MMU的配置与使用需要分三步:
1、建立一级页表
/*
* 用于段描述符的一些宏定义
*/
#define MMU_FULL_ACCESS (3 << 10) /* 访问权限 */
#define MMU_DOMAIN (0 << 5) /* 属于哪个域 */
#define MMU_SPECIAL (1 << 4) /* 必须是1 */
#define MMU_CACHEABLE (1 << 3) /* cacheable */
#define MMU_BUFFERABLE (1 << 2) /* bufferable */
#define MMU_SECTION (2 << 0) /* 表示这是段描述符 */
#define SECDESC (MMU_SECTION | MMU_SPECIAL | MMU_DOMAIN | MMU_FULL_ACCESS)
#define MMU_SECDESC_WB (MMU_FULL_ACCESS | MMU_DOMAIN | MMU_SPECIAL | MMU_CACHEABLE | MMU_BUFFERABLE | MMU_SECTION)
void create_page_table(void)
{
unsigned long *ttb = (unsigned long *)0x50000000;
unsigned long vaddr, paddr;
vaddr = 0xA0000000;
paddr = 0x7f000000;
*(ttb + (vaddr >> 20)) = (paddr & 0xFFF00000) | MMU_SECDESC;
/*内存映射*/
vaddr = 0x50000000;
paddr = 0x50000000;
while (vaddr < 0x54000000)
{
*(ttb + (vaddr >> 20)) = (paddr & 0xFFF00000) | MMU_SECDESC_WB;
vaddr += 0x100000;
paddr += 0x100000;
}
}
2、写入TTB
/*设置TTB*/
"ldr r0, =0x50000000\n"
"mcr p15, 0, r0, c2, c0, 0\n"
3、使能MMU
void mmu_init()
{
__asm__(
/*设置TTB*/
"ldr r0, =0x50000000\n"
"mcr p15, 0, r0, c2, c0, 0\n"
/*不进行权限检查*/
"mvn r0, #0\n"
"mcr p15, 0, r0, c3, c0, 0\n"
/*使能MMU*/
"mrc p15, 0, r0, c1, c0, 0\n"
"orr r0, r0, #0x0001\n"
"mcr p15, 0, r0, c1, c0, 0\n"
:
:
);
}
然后在主函数中调用这两个函数就可以了。
- tiny6410的MMU的配置于使用
- arm9 bootloader 的 MMU配置与使用--section
- MMU的使用:地址映射
- MMU的使用:地址映射
- 配置适用于Tiny6410的linux内核
- MMU配置和使用
- 什么是MMU,MMU的作用
- Tiny6410上的madplayer安装使用步骤
- tiny6410关闭mmu和cache
- Tiny6410 lcd的移植
- tiny6410 uboot的移植
- MMU工作原理以及S3C2440的MMU
- MMU工作原理以及S3C2440的MMU
- MMU工作原理以及S3C2440的MMU
- ubuntu下关于git的配置和使用
- ZooKeeper的集群配置(使用于单机伪集群)
- ARM中mmu的映射原理与配置步骤
- 有关MMU的问题!
- 【正一专栏】从人民的名义看失败的婚姻关系
- 【正一专栏】一直的梦想——我的读书记
- NYOJ 248
- CentOS 7 源码编译mysql5.7.11 ,如果在阿里云内存不足编译失败处理方法
- Javascript面向对象(八)——Class
- tiny6410的MMU的配置于使用
- 用户登入记住密码案例
- python新式类和经典类的区别
- Mybatis总结(5)---Mybatis输入输出映射
- NYOJ 247 SPFA算法
- jquery的Post方法$.post()
- 商品展示 进行增删改查
- 优化枚举问题
- h5的相对定位、绝对定位、固定定位以及案例练习