【翻译】【linux设备驱动】linux地址类型
Linux中使用的地址类型列表:
用户虚拟地址(User virtual addresses)
用户空间程序可见的普通地址。用户虚拟地址的长度为32位或64位,依赖于底层的硬件体系架构,每个进程有它自己的虚拟地址空间。
物理地址(Physical addresses)
处理器和系统内存之间使用的地址。物理地址的长度为32位或64位;32位操作系统上有时也可以使用大于32位的物理地址(PAE)
总线地址(Bus addresses)
外部总线和系统内存之间使用的地址。通常总线地址和物理地址是等同的,但也不一定。有些体系结构上,有一个IOMMU(IO memory management unit)将总线地址重映射为物理地址。IOMMU在许多场景下有帮助,比如将分散的物理内存重映射成连续的总线地址,设备看起来总线地址是连续的。但这也带来了额外的工作量,比如在DMA操作时,需要对IOMMU额外的编程(填写映射项)。当然,总线地址是和体系结构高度相关的。
内核逻辑地址(Kernel logical addresses)
内核逻辑地址组成了内核的普通地址空间。这些地址映射部分或全部主存地址,而且经常被认为它们貌似就是物理地址。在大多数体系架构上,逻辑地址和相关的物理地址之间就只差了一个固定的偏移量。逻辑地址的类型为硬件本地指针大小,因此,在32位重载的系统上,可能不能访问所有的物理地址。逻辑地址的类型通常为unsigned long或者void *。通过kmalloc分配出来的内存,地址类型为逻辑地址。
内核虚拟地址(Kernel virtual addresses)
内核虚拟地址和内核逻辑地址相似,因为它们就是内核空间地址向物理内存的映射。与内核逻辑地址不同的是,内核虚拟地址在映射时,不必线性或者一对一映射成物理地址。所有的内核逻辑地址为内核虚拟地址,但许多内核虚拟地址却不是内核逻辑地址。比如vmalloc分配出来的内存为内核虚拟地址(但未直接映射为物理地址)。kmap函数返回的也是内核虚拟地址。内核虚拟地址通常储存在指针变量中。
宏__pa()(定义在<asm/page.h>)将内核逻辑地址转换成物理地址。宏__va()将物理地址转换回内核逻辑地址,但只针对低地址生效。
转载于:https://www.cnblogs.com/useyourimagination/p/6916022.html
【翻译】【linux设备驱动】linux地址类型相关推荐
- 如何学习linux设备驱动
面对不断升级的内核,如何学习linux设备驱动 面对不断升级的linux内核.GNU开发工具.linux环境下的各种图形库,很多linux应用程序开发人员和linux设备驱动开发人员即兴奋,又烦躁 ...
- 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动
本节书摘来自异步社区<Linux 设备驱动开发详解(第2版)>一书中的第1章,第1.1节,作者:宋宝华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 L ...
- NXP LS1046A及飞腾新四核 FT2004 PCIE EP端LINUX设备驱动开发
文章目录 前言 一.PCIE 硬件简介 二.PCIE EP地址映射原理介绍 1. PCI总线的各种域(存储器域.PCI总线域) 2. 开发EP设备驱动要做的事 三.NXP LS1046A PCIE E ...
- linux设备驱动第五篇:驱动中的并发与竟态
目录[-] 综述 信号量与互斥锁 Completions 机制 自旋锁 其他的一些选择 不加锁算法 原子变量与位操作 seqlock(顺序锁) 读取-拷贝-更新(RCU) 小结 综述 在上一篇介绍了l ...
- 《Linux设备驱动开发详解 A》一一2.3 接口与总线
本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...
- 【Linux开发】linux设备驱动归纳总结(六):3.中断的上半部和下半部——tasklet...
linux设备驱动归纳总结(六):3.中断的上半部和下半部--tasklet xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- (转)Linux设备驱动之HID驱动 源码分析
//Linux设备驱动之HID驱动 源码分析 http://blog.chinaunix.net/uid-20543183-id-1930836.html HID是Human Interface De ...
- 【Linux开发】linux设备驱动归纳总结(九):1.platform总线的设备和驱动
linux设备驱动归纳总结(九):1.platform总线的设备和驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-83299.html linux设备驱动归纳总结(五):3.操作硬件--IO静态映射 xxxxxxxxx ...
最新文章
- TypeScript 素描 - 函数
- Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop
- NYOJ 228 士兵杀敌(五)
- web前端技术分享:管理系统全栈项目之注册功能
- Oracle笔记之表空间
- C++ 简单实现基数排序(list容器)
- php 区块链算法_PoW/BFT等5种主流区块链共识算法的开源代码实现
- 推动边缘计算的七项核心技术
- javascript学习随笔(编写浏览器脚本 Navigator Scripting )
- PTA4-11 先序输出叶结点
- linux 用户权限 数字,几个linux命令之用户权限相关命令
- HDU 5666 Segment 数论+大数
- opencv学习笔记三十二:Haar特征与积分图像
- 智慧城市、智慧工地、平安城市、雪亮工程等监控项目中应用SkeyeVSS国标GB28181流媒体服务
- Word XP 中目录的编制方法,Word XP 功能键使用大全
- HTTP协议报文头部结构和Web相关工具
- 一篇文章教会你使用Python网络爬虫下载酷狗音乐
- 解决:电脑屏幕每隔几分钟就闪一次(瞬间黑屏一次),鼠标指针伴随着加载的状态(漏斗或者转圈),然后瞬间恢复正常
- 罗永浩:我对3月27日那场锤子发布会非常懊悔
- Navicat连接Linux的MySQL出错排查
热门文章
- python跳出if条件_python的if条件判断
- CSS中的四种样式及选择器
- 看eShopOnContainers学一个EventBus
- java语法基础(总结)
- Understanding the Framework (理解FMS框架)
- VMware运行时“内部错误”的解决方法
- Spring——AOP配置时的jar包异常
- 无需SherlockActionbar的SlidingMenu使用详解(一)——通过SlidingMenu设置容器并解决滑动卡顿的问题
- Linux下如何生成core dump 文件(解决segment fault段错误的问题)
- js new Date()不带时分秒时,时间变了 问题解决