SDM845 虚拟地址分配
宏定义符号 | 描述 | 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: 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 虚拟地址分配相关推荐
- linux 添加接口永久,在Linux中,配置虚拟网络接口
介绍 您是否知道可以为一个物理网络接口分配多个IP地址?例如,当使用Apache和虚拟主机时,此技术非常有用,因为它允许您使用两个不同的IP地址访问同一Apache服务器. 临时虚拟网络接口 在Lin ...
- 理解 Linux 的虚拟内存
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://zhenbianshu.github.io/ 虚拟内存 毋庸置疑,虚拟内存绝对是操作系统中最重要的概念之一.我 ...
- Linux虚拟内存,你理解到位了?
点击关注公众号,Java干货及时送达 前不久组内又有一次我比较期待的分享:"Linux 的虚拟内存".是某天晚上加班时,我们讨论虚拟内存的概念时,leader 发现几位同事对虚拟内 ...
- linux性能调优原创翻译系列
Linux进程管理: 进程是可以运行在处理器CPU上的一个可执行的实例.进程完成工作需要所有linux内核需要的资源. 所有的在linux操作系统上运行的内存都是由task_struct 体系来管理的 ...
- KVM虚拟机源代码分析
1,KVM结构及工作原理 1.1 KVM结构 KVM基本结构有两部分组成.一个是KVM Driver ,已经成为Linux 内核的一个模块.负责虚拟机的创建,虚拟内存的分配,虚拟CPU寄存器的读写以 ...
- Xen与KVM虚拟化技术调研报告
1.概述 随着计算机硬件的制作工艺提高,如CPU单位面积可容纳的器件多了好几倍,其他硬件的也快速发展,促使单机性能远远超出满足一个应用的需求.同时,目前传统服务器的利用率大约为20%-30%,通过虚拟 ...
- 关于虚拟内存,你需要了解的一些概念
来源 | https://zhenbianshu.github.io/ 前不久组内又有一次我比较期待的分享:"Linux 的虚拟内存".是某天晚上加班时,我们讨论虚拟内存的概念时, ...
- KVM之EPT与影子页表(七)
一.简述Linux内存映射 这部分其实是一个很庞大的话题,它包括分段.分页机制等,在不同架构.不同地址转换机制下,地址转换过程是不同的.本文的重点不在于这些复杂的分段分页保护机制.保护模式.实模式等内 ...
- OVS DPDK vhost-user详解(十一)
这篇文章是对vhost-user / virtio-pmd架构的深入技术研究,该架构针对基于DPDK的高性能用户空间网络,面向所有有兴趣了解这些基本细节的架构师和开发人员. 介绍 本文将在读者熟悉vh ...
最新文章
- 管理邮件用户(附图)---Michaelf
- sqlerver mysql_转 MYSQL学习(一)
- gravity、layout_gravity及orientation
- Erlang 进程创建性能测试
- 测试思想-测试总结 缺陷分析与统计浅析
- atmega328 48手动解锁 擦除
- 【React】React Fiber
- 新浪微博技术架构分析-转载
- 06_02_Spring 任务一:IOC控制反转
- 选择商品的时候,弹不出来商品选择框
- PMP考试冲刺计算专题
- 计算机无法选择字体,电脑系统字体无法修改字体大小怎么办?
- C语言程序设计第三版崔武子,清华大学出版社-图书详情-《C语言程序设计教程学习辅导》...
- javaweb基于JSP开发Java在线学习平台 大作业 毕业设计源码
- win10 只有一种语言且只有一种输入法的情况下,如何才能在打开新的窗口中默认英文输入
- 全套PR资源--含RAR解压密码
- python怎么输出中文
- tk1刷机+ROS安装+rplidar安装和配置+turtlebot安装和配置
- “猝死”,我离你有多远
- ImageJ如何对图像进行旋转
热门文章
- QQ、微信等通讯工具可以用,浏览器确不能上网
- SpringCloud工程搭建之Eureka服务搭建(必选)
- 教育网使用http proxy下载android源代码
- Elsevier论文latex模板公式自动左对齐无法居中的问题解决
- Intellij IDEA的Bookmarks
- JavaScript实战学习笔记三20200412
- ICML 2019 | SGC:简单图卷积网络
- postfix 521拒绝问题
- 【python】灰色预测平均房价趋势kera深度学习库的介绍
- ABAP--使用SLIN事务码进行ABAP程序扩展语法检查,提高程序开发的质量[转]