我需要使用两个PTE位来存储我的内核模块在拦截页面保护错误时将使用的自定义“状态”值.

我正在开发Galaxy Nexus,它有一个ARM Cortex A9(我相信ARM v7). Linux内核版本3.0.31. Linux PTE定义如下(来自arch / arm / include / asm / pgtable.h:

/*

* "Linux" PTE definitions.

*

* We keep two sets of PTEs - the hardware and the linux version.

* This allows greater flexibility in the way we map the Linux bits

* onto the hardware tables,and allows us to have YOUNG and DIRTY

* bits.

*

* The PTE table pointer refers to the hardware entries; the "Linux"

* entries are stored 1024 bytes below.

*/

#define L_PTE_PRESENT (_AT(pteval_t,1) << 0)

#define L_PTE_YOUNG (_AT(pteval_t,1) << 1)

#define L_PTE_FILE (_AT(pteval_t,1) << 2) /* only when !PRESENT */

#define L_PTE_DIRTY (_AT(pteval_t,1) << 6)

#define L_PTE_RDONLY (_AT(pteval_t,1) << 7)

#define L_PTE_USER (_AT(pteval_t,1) << 8)

#define L_PTE_XN (_AT(pteval_t,1) << 9)

#define L_PTE_SHARED (_AT(pteval_t,1) << 10) /* shared(v6),coherent(xsc3) */

只需查看这个定义列表,就会看到3,4,5位可用,以及11位和更高位.但是,我知道20个最重要的位[31:12]用于页码(PFN,我相信),所以我不能使用其中任何一个.

我可以自由地使用位[5:3]还是会产生问题?我花了几个小时寻找答案,但我只能找到有关Linux如何使用PTE位进行x86架构的文档.

更新:

我已经编制了一个我相信每个PTE位的列表.

bit 0 PRESENT

bit 1 YOUNG

bit 2 MEMORY TYPES 0 B FILE (only when not PRESENT)

bit 3 MEMORY TYPES 1 C

bit 4 AP0

bit 5 AP1

bit 6 DIRTY

bit 7 RD_ONLY

bit 8 USER

bit 9 XN

bit 10 SHARED

bit 11 EXT_NG (no idea what this is)

bit 12 |---|

... |PFN|

bit 31 |---|

不幸的是我没有看到指定没有读取或写入权限的方法,但不知何故,带有PROT_NONE的mmap似乎仍然有效.我知道如何指定读取或R / W权限,但我仍然需要知道如何设置页面没有权限.

arm linux 进程页表,linux-kernel – ARM Linux页表项格式 – 未使用的位?相关推荐

  1. arm linux 进程页表,arm-linux内存页表创建

    linux的内存(正式)页表是在内核代码执行到start_kernel函数后执行paging _init函数建立的,这里要注意一个事情就是说,这里paging_init函数可以正常创建内存页表的条件有 ...

  2. arm linux 进程页表,linux内存管理(五)arm页表

    最近比较忙,好多天没更新了,后面可能还需要20多篇文章才能把整个内存管理讲透. 前面讲述了一个通用的页表机制,以及简单介绍了TLB.今天会介绍arm的页表机制,这里特指32位arm. 目前内核提供了一 ...

  3. Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

    Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别 ...

  4. linux进程属主6,20150917 Linux进程查看与管理以及作业管理

    第一.基础知识 MBR引导--内核--内核程序-->协调其它程序 一般内核运行在硬件之上,各应用也在硬件之前 1)OS的基本功能:文件系统.网络功能.进程管理.内存管理.驱动程序.安全功能 以上 ...

  5. python做Linux进程运行,Python实现在Linux系统下更改当前进程运行用户

    在上一篇文章中,我们讲了如何在linux上用python写一个守护进程.主要原理是利用linux的fork函数来创建一个进程,然后退出父进程运行,生成的子进程就会成为一个守护进程.细心观察的可能会发现 ...

  6. linux进程看门狗使用方式,Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法...

    Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法 [技术领域] [0001] 本发明涉及Linux系统的进程监控技术领域,特别是涉及一种Linux系统中基于看 门狗的精细化进程监控方法及 ...

  7. linux进程的通信文件映射,Linux进程间通信 -- mmap函数的使用

    mmap/munmap函数 函数原型 #include void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t ...

  8. linux进程异常退出分析,ECS Linux程序异常退出提示“out of memory”的临时解决办法...

    ECS Linux上的程序会出现异常退出的情况,退出的原因多数是因为系统内存不足,Linux内存不足通常会触发 Linux 内核里的 Out of Memory (OOM) killer,OOM ki ...

  9. linux进程间的通信实验,linux实验进程之间的通信.doc

    院 系: 计算机学院 实验课程:linux内核设计与实现 实验项目:进程之间的通信 指导老师:冯刚 开课时间: 2010 - 2011 年度第 2 学期 专 业:计算机科学与技术(师范) 班 级:2班 ...

最新文章

  1. Java源码详解四:String源码分析--openjdk java 11源码
  2. centos7 安装php nts,centos7安装php7,亲测可行
  3. HTTP深入浅出 http请求
  4. [Oracle]理解undo表空间
  5. Java7里try-with-resources分析--转
  6. matlab 二维线图绘制函数 plot用法参数
  7. ranger管mysql_添加Kafka的Ranger访问权限策略
  8. 整数区间(信息学奥赛一本通-T1324)
  9. 【Java】四种方法复制视频文件比较
  10. 大页内存的使用:大页内存分配与释放
  11. myPRO HMI/SCADA 产品被曝多个严重漏洞
  12. java 获取本机mac地址并转为字符串
  13. Appium 控件定位链接整理(appiumdriver)
  14. UnityShader中插值平滑曲线
  15. Jenkins 升级到2.42 Junit test report 出现错误的解决
  16. Tomcat配置优化(一)
  17. 学写网页 #05# CSS Mastery 笔记 1~3
  18. spring boot中的banner制作
  19. 逆波兰式的产生及计算(C++/Java)---编译原理
  20. el-table纵向和横向都有滚动条的时候,右下角会出现白色方块区域

热门文章

  1. 类型缩放Google map 地图类型
  2. 查看ubuntu版本
  3. VS2010中添加lib库引用
  4. 判断 小程序_第五届美亚杯赛前必备:从案情资料到小程序解题
  5. 程序员基本功10栈和队列
  6. 自旋波matlab计算,[首藏作品](4865)从电子到磁振子,自旋波计算开启新篇章...
  7. linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...
  8. oracle客户端没有deinstall.bat,Oracle数据库11gR2的卸载 - deinstall
  9. 详解C++17下的string_view
  10. Android中保存数据的三种方法