宏定义符号 描述 value
VA_START 内核地址空间的起始地址 0xffffff80-00000000
TEXT_OFFSET bootloader会把kernel image从外设copy到RAM中,那么具体copy到什么位置呢?从RAM的起始地址开始吗?实际上是从TEXT_OFFSET开始的,偏移这么一小段内存估计是为了bootloader和kernel之间传递一些信息。所以,这里TEXT是指kernel text segment,而OFFSET是相对于RAM的首地址而言的。 
TEXT_OFFSET必须要4K对齐并且TEXT_OFFSET的size不能大于2M。

if config_arm64_randomisze_text_offset

is not defined:

0x80000 = 512K

PAGE_OFFSET kernel image的起始虚拟地址,一般而言也就是系统中RAM的首地址,在该地址TEXT_OFFSET之后保存了kernel image。 
PAGE_OFFSET必须要2M对齐
0xffffffc0-00000000
TASK_SIZE 一般而言,用户地址空间从0开始,大小就是TASK_SIZE,因此,这个宏定义的全称应该是task userspace size。对于ARM64的用户空间进程而言,有两种,一种是运行在AArch64状态下,另外一种是运行在AArch32状态,因此,实际上代码中又定义了TASK_SIZE_32和TASK_SIZE_64两个宏定义。

lower VA subrange:
0 ~ 0x7f-ffffffff

upper VA subrang:

0xffffff80-00000000 ~ 0xffffffff-ffffffff

PHYS_OFFSET 系统内存的起始物理地址。在系统初始化的过程中,会把PHYS_OFFSET开始的物理内存映射到PAGE_OFFSET的虚拟内存上去。 adrp  x24 _PHYS_OFFSET

#define VA_BITS            (CONFIG_ARM64_VA_BITS) 
#define PAGE_OFFSET        (UL(0xffffffff-ffffffff) << (VA_BITS - 1))

SDM845上VA_BITS是39,所以PAGE_OFFSET是 0xffffffff-ffffffff << 38 = 0xffffffc0-00000000.

#define VMALLOC_START        (VA_START)
#define VA_START        (UL(0xffffffffffffffff) << VA_BITS)
#define __phys_to_virt(x)    ((unsigned long)((x) - PHYS_OFFSET + PAGE_OFFSET))

VA_START = 0xffffffff-ffffffff << 39 = 0xffffff80-00000000

Lower VA subrange : 从0x0000_0000_0000_0000 到 (2^(64-T0SZ) - 1) 
Upper VA subrange : 从(2^64 - 2^(64-T1SZ)) 到 0xFFFF_FFFF_FFFF_FFFF

64 - T0SZ = 39

64 - T1SZ = 39 

user space:  0 ~ (2^39 - 1) --> 0 ~ 0x7f-ffffffff

kernel space:  (2^64 - 2^39) ~ (2^64 - 1) --> 0xffffff80-00000000 ~ 0xffffffff-ffffffff

SDM845 虚拟地址分配相关推荐

  1. linux 添加接口永久,在Linux中,配置虚拟网络接口

    介绍 您是否知道可以为一个物理网络接口分配多个IP地址?例如,当使用Apache和虚拟主机时,此技术非常有用,因为它允许您使用两个不同的IP地址访问同一Apache服务器. 临时虚拟网络接口 在Lin ...

  2. 理解 Linux 的虚拟内存

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://zhenbianshu.github.io/ 虚拟内存 毋庸置疑,虚拟内存绝对是操作系统中最重要的概念之一.我 ...

  3. Linux虚拟内存,你理解到位了?

    点击关注公众号,Java干货及时送达 前不久组内又有一次我比较期待的分享:"Linux 的虚拟内存".是某天晚上加班时,我们讨论虚拟内存的概念时,leader 发现几位同事对虚拟内 ...

  4. linux性能调优原创翻译系列

    Linux进程管理: 进程是可以运行在处理器CPU上的一个可执行的实例.进程完成工作需要所有linux内核需要的资源. 所有的在linux操作系统上运行的内存都是由task_struct 体系来管理的 ...

  5. KVM虚拟机源代码分析

    1,KVM结构及工作原理 1.1  KVM结构 KVM基本结构有两部分组成.一个是KVM Driver ,已经成为Linux 内核的一个模块.负责虚拟机的创建,虚拟内存的分配,虚拟CPU寄存器的读写以 ...

  6. Xen与KVM虚拟化技术调研报告

    1.概述 随着计算机硬件的制作工艺提高,如CPU单位面积可容纳的器件多了好几倍,其他硬件的也快速发展,促使单机性能远远超出满足一个应用的需求.同时,目前传统服务器的利用率大约为20%-30%,通过虚拟 ...

  7. 关于虚拟内存,你需要了解的一些概念

    来源 | https://zhenbianshu.github.io/ 前不久组内又有一次我比较期待的分享:"Linux 的虚拟内存".是某天晚上加班时,我们讨论虚拟内存的概念时, ...

  8. KVM之EPT与影子页表(七)

    一.简述Linux内存映射 这部分其实是一个很庞大的话题,它包括分段.分页机制等,在不同架构.不同地址转换机制下,地址转换过程是不同的.本文的重点不在于这些复杂的分段分页保护机制.保护模式.实模式等内 ...

  9. OVS DPDK vhost-user详解(十一)

    这篇文章是对vhost-user / virtio-pmd架构的深入技术研究,该架构针对基于DPDK的高性能用户空间网络,面向所有有兴趣了解这些基本细节的架构师和开发人员. 介绍 本文将在读者熟悉vh ...

最新文章

  1. 管理邮件用户(附图)---Michaelf
  2. sqlerver mysql_转 MYSQL学习(一)
  3. gravity、layout_gravity及orientation
  4. Erlang 进程创建性能测试
  5. 测试思想-测试总结 缺陷分析与统计浅析
  6. atmega328 48手动解锁 擦除
  7. 【React】React Fiber
  8. 新浪微博技术架构分析-转载
  9. 06_02_Spring 任务一:IOC控制反转
  10. 选择商品的时候,弹不出来商品选择框
  11. PMP考试冲刺计算专题
  12. 计算机无法选择字体,电脑系统字体无法修改字体大小怎么办?
  13. C语言程序设计第三版崔武子,清华大学出版社-图书详情-《C语言程序设计教程学习辅导》...
  14. javaweb基于JSP开发Java在线学习平台 大作业 毕业设计源码
  15. win10 只有一种语言且只有一种输入法的情况下,如何才能在打开新的窗口中默认英文输入
  16. 全套PR资源--含RAR解压密码
  17. python怎么输出中文
  18. tk1刷机+ROS安装+rplidar安装和配置+turtlebot安装和配置
  19. “猝死”,我离你有多远
  20. ImageJ如何对图像进行旋转

热门文章

  1. QQ、微信等通讯工具可以用,浏览器确不能上网
  2. SpringCloud工程搭建之Eureka服务搭建(必选)
  3. 教育网使用http proxy下载android源代码
  4. Elsevier论文latex模板公式自动左对齐无法居中的问题解决
  5. Intellij IDEA的Bookmarks
  6. JavaScript实战学习笔记三20200412
  7. ICML 2019 | SGC:简单图卷积网络
  8. postfix 521拒绝问题
  9. 【python】灰色预测平均房价趋势kera深度学习库的介绍
  10. ABAP--使用SLIN事务码进行ABAP程序扩展语法检查,提高程序开发的质量[转]