首页 > 其他分享 >paging_init 详解

paging_init 详解

时间:2023-07-01 19:00:43浏览次数:31  
标签:ext set r3 pte init paging 详解 页表 v7

建立二级页表项由 set_pte_ext 宏实现,实际上底层调用的是在内核启动之初获取的 list->processor->set_pte_ext,这是处理器相关的处理函数,对应的函数实现为 cpu_v7_set_pte_ext,在 arch/arm/mm/proc-v7-2level.S 中。

ENTRY(cpu_v7_set_pte_ext)
#ifdef CONFIG_MMU
    str    r1, [r0]            @ linux version

    bic    r3, r1, #0x000003f0
    bic    r3, r3, #PTE_TYPE_MASK
    orr    r3, r3, r2
    orr    r3, r3, #PTE_EXT_AP0 | 2

    tst    r1, #1 << 4
    orrne    r3, r3, #PTE_EXT_TEX(1)

    eor    r1, r1, #L_PTE_DIRTY
    tst    r1, #L_PTE_RDONLY | L_PTE_DIRTY
    orrne    r3, r3, #PTE_EXT_APX

    tst    r1, #L_PTE_USER
    orrne    r3, r3, #PTE_EXT_AP1

    tst    r1, #L_PTE_XN
    orrne    r3, r3, #PTE_EXT_XN

    tst    r1, #L_PTE_YOUNG
    tstne    r1, #L_PTE_VALID
    eorne    r1, r1, #L_PTE_NONE
    tstne    r1, #L_PTE_NONE
    moveq    r3, #0

 ARM(    str    r3, [r0, #2048]! )
 THUMB(    add    r0, r0, #2048 )
 THUMB(    str    r3, [r0] )
    ALT_SMP(W(nop))
    ALT_UP (mcr    p15, 0, r0, c7, c10, 1)        @ flush_pte
#endif
    bx    lr
ENDPROC(cpu_v7_set_pte_ext)

在 set_pte_ext 中,除了设置地址映射部分之外,还需要处理大量标志位的设置(比如 YOUNG、DIRTY bit),毕竟针对同一个页面,需要填充一个软件二级页表项和一个硬件二级页表项,硬件二级页表项给 MMU 使用,保存在 软件二级页表项 + 2048 地址处,在上面贴出的汇编代码中也有体现

 

标签:ext,set,r3,pte,init,paging,详解,页表,v7
From: https://www.cnblogs.com/god-of-death/p/17519730.html

相关文章

  • RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法
    RPM安装的Oracle19c修改init.ora进行修复以及最简单开机启动Oracle的方法背景今天开始使用自己心的ThinkBook14的笔记本因为已经没有了Linux测试环境供我使用.所以我就自己准备导入一个最开始的OpenEuler2203+Oracle19c的虚拟机.发现因为当时虚拟机是48G内存,但是我......
  • nginx之location规则详解
    一、语法规则:=开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可(非正则)~ 开头表示区分大小写的正则匹配~* 开头表示不区分大小写的正则匹配!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则/ 通用匹配,任何请求都会匹配......
  • nginx之proxy_pass规则详解
    在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。假设下面四种情况分别用http://192.168.1.1/proxy/test.html进行访问。第一种:location/proxy/{proxy_passhttp://127.0.0.1/;}代......
  • gcc/g++ 编译选项详解
    编译步骤gcc与g++区别gcc命令的常用选项编译优化选项-O优化-O1优化-O2-O0-Os-Ofast-Og-Oz-O选项控制特定的优化WarningsReference编译步骤gcc、g++分别是gnu的c&c++编译器。实际上,GCC能够编译三种语言:C、C++和Ob......
  • 【胖虎的逆向之路】——GOT/PLT Hook详解&针对自定义so库的Hook实操
    文章目录@[TOC](文章目录)前言一、ELF是什么?1、ELF的概念2、ELF的组成2.1、两种视图是什么呢?2.2、ELF文件头又是什么西西?2.2、ELF中节头表是什么南南呢?2.2、ELF中程序头表是什么北北呢?二、动态库装载、动态链接与重定位简单理解1、装载2、动态链接3、重定位三、PLT与GOTHoo......
  • find命令mtime,ctime,atime详解
    1.查找时间说明find./-name“*data*”-mtime+1当前目录下文件名包含data,而且修改时间在48小时以上的find./-name“*date*”-mtime+2当前目录下文件名包含data,而且修改时间在72小时以上的find./name“*data*”-mtime-1当前目录下文件名包含data,而且修改时间在24......
  • Docker网络管理_Docker0网络详解
    Docker网络管理_Docker0网络详解清空所有容器来测试dockerstop$(dockerps-aq)dockerrm$(dockerps-aq)思考注意:每启动一个docker容器,docker就会给容器分配一个ip,只要安装docker就会有一个docker0网卡。evth-pair技术evth-pair就是一对的虚拟设备接口,它们都......
  • python import详解
    参考:https://zhuanlan.zhihu.com/p/156774410import绝对是我们在使用python时最常用的语句之一了,但其实关于import,需要注意的地方还真不少,如导入第三方库,导入自己写的库,导入相对路径下文件中的方法,在包内部的相对与绝对导入等导入源;有导入的顺序;有LazyLoad惰性导入方法;有已经导......
  • laravel8配置全局公共函数步骤详解
    1.首先添加文件,app/Helpers.php,我这里是这个名字因为习惯了,你也可以自己定义<?phpif(!function_exists("getFileName")){/***从路径中获取文件名*@param$fileName*@returnstring*/functiongetFileName($fileName){$s......
  • 【后端】SSM框架下REST风格代码注释详解
    前言最近学习了一下SSM,不得不说,spring不用注解真的是天打雷劈,就那个bean真的就是折磨人。下面是我总结的spring注解。@Value此注解可以用来获取导入的jdbc.properties文件的值。@Value("${jdbc.driver}")privateStringdriver;//用法是这样的12jdbc.properties文件:jdbc.driv......