arm64 中的__virt_to_phys
在arm64上的线性映射区还是可以通过__virt_to_phys 来将虚拟地址转成物理地址,我们来看看其在arm64上的实现
#define __virt_to_phys(x) __virt_to_phys_nodebug(x)
#define __is_lm_address(addr) (!(((u64)addr) & BIT(vabits_actual - 1)))#low memory的虚拟地址到物理转换
#define __lm_to_phys(addr) (((addr) & ~PAGE_OFFSET) + PHYS_OFFSET)
#kernel image(包含text段等)映射在vmalloc 区域的虚拟地址到物理地址的转换
#define __kimg_to_phys(addr) ((addr) - kimage_voffset)#从这里可以看出在arm64上,线性映射段一共有两块,一块是大家熟悉的low memory
一块是kernel image 映射所在的vmalloc。也就是说vmalloc 在arm64 中针对kernel image 是
线性映射的。
#define __virt_to_phys_nodebug(x) ({ \phys_addr_t __x = (phys_addr_t)(__tag_reset(x)); \__is_lm_address(__x) ? __lm_to_phys(__x) : __kimg_to_phys(__x); \
})那这个kimage_voffset是在head.s 中赋值的
SYM_FUNC_START_LOCAL(__primary_switched)adrp x4, init_thread_unionadd sp, x4, #THREAD_SIZEadr_l x5, init_taskmsr sp_el0, x5 // Save thread_infostr_l x21, __fdt_pointer, x5 // Save FDT pointerldr_l x4, kimage_vaddr // Save the offset betweensub x4, x4, x0 // the kernel virtual andstr_l x4, kimage_voffset, x5 // physical mappings
arm64 中的__virt_to_phys相关推荐
- Arm64中的异常处理
闲话 最近优化环境中出现了多次不同种类的异常,其他文章中也有提及,为此专门去研究了一下Arm64的异常处理机制和代码,之前主要的开发和应用环境为X86,ARM接触很少,也没有机会去研究和学习,总以为不 ...
- ARM64中的ASID地址空间标识符
文章目录 1. 从ARM32到ARM64 1.1 ARM32的TLB机制 1.2 ASID(地址空间标识符) 1.2.1 ARM32的TTBR0寄存器格式 1.2.2 ARM64的TTBR0寄存器格式 ...
- ARM64中的内存屏障指令
内存屏障指令是系统编程中很重要的一部分,特别是在多核并行编程中.本章重点介绍内存屏障指令产生的原因.ARM64处理器内存屏障指令以及内存屏障的案例分析等内容. 18.2.1 使用内存屏障的场景 在大部 ...
- ARM64系统中兼容系统调用表compat_sys_call_table的定义和初始化
在我使用的某国产ARM64笔记本上(安装的统信UOS系统), Linux内核有2个系统调用表sys_call_table和compat_sys_call_table 其中sys_call_table为 ...
- linux kernel中的栈的介绍
目录 1.linux kernel中的中断irq的栈stack (1).arm32体系的irq的栈 (2).arm64体系的irq的栈 2.linux kernel中的栈stack (1).概念介绍: ...
- ARM64的启动过程之(二):创建启动阶段的页表
原文地址: http://www.wowotech.net/linux_kenrel/create_page_tables.html 一.前言 本文主要描述了ARM64启动过程中,如何建立初始化阶段页 ...
- linux spinlock/rwlock/seqlock原理剖析(基于ARM64)
背景 Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 吹起并发机制研究的进攻号角了! 作为第一篇文章 ...
- arm linux内核启动过程,ARM64的启动过程之(一):内核第一个脚印
ARM64的启动过程之(一):内核第一个脚印 作者:linuxer 发布于:2015-10-10 15:06 分类:ARMv8A Arch 一.前言 kernel的整个启动过程涉及的内容很多,不可能每 ...
- 一文解析linux spinlock/rwlock/seqlock原理(基于ARM64)
说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 吹起并发机制研究的进攻号角了! 作为第一篇文 ...
最新文章
- Warning in install.packages : package ‘RGtk2’ is not available for this version of R
- 思科防火墙PIX ASA精华配置总结
- 定义一个结构体指针需要分配存储空间
- css实现页面文字不换行、自动换行、强制换行
- 动态规划-----------01背包,完全背包与多重背包
- C#实现winform软件开机自动启动并最小化到系统托盘
- php 7.1 openssl安装,介绍 php7.1 安装openssl扩展,php openssl
- spring-cloud搭建
- BZOJ 1005: [HNOI2008]明明的烦恼
- 忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...
- 【Alpha阶段】第七次scrum meeting
- 传奇霸业维护服务器,37传奇霸业6月21日部分区服维护计划
- PonyAI进军自动驾驶货运,乘用无人车历史性“小马过河”
- (转)UML类图与类的关系详解
- html5 如何打包成apk,将H5封装成android应用APK文件的几种方法
- @RunWith报错/SpringJUnit4ClassRunner报错或无法使用
- Ubuntu环境下下载Android-SDK-Linux之后使用adb连接设备报错
- 电信版本-中兴B860AV1.1-T-S905M-B NAND闪存 线刷救砖固件
- Web Polygraph 安装
- win10文件资源管理器默认打开我的电脑及左侧导航设置