【翻译】【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()将物理地址转换回内核逻辑地址,但只针对低地址生效。

posted on 2017-05-28 16:46 UseYourImagination 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/useyourimagination/p/6916022.html

【翻译】【linux设备驱动】linux地址类型相关推荐

  1. 如何学习linux设备驱动

    面对不断升级的内核,如何学习linux设备驱动   面对不断升级的linux内核.GNU开发工具.linux环境下的各种图形库,很多linux应用程序开发人员和linux设备驱动开发人员即兴奋,又烦躁 ...

  2. 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动

    本节书摘来自异步社区<Linux 设备驱动开发详解(第2版)>一书中的第1章,第1.1节,作者:宋宝华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 L ...

  3. NXP LS1046A及飞腾新四核 FT2004 PCIE EP端LINUX设备驱动开发

    文章目录 前言 一.PCIE 硬件简介 二.PCIE EP地址映射原理介绍 1. PCI总线的各种域(存储器域.PCI总线域) 2. 开发EP设备驱动要做的事 三.NXP LS1046A PCIE E ...

  4. linux设备驱动第五篇:驱动中的并发与竟态

    目录[-] 综述 信号量与互斥锁 Completions 机制 自旋锁 其他的一些选择 不加锁算法 原子变量与位操作 seqlock(顺序锁) 读取-拷贝-更新(RCU) 小结 综述 在上一篇介绍了l ...

  5. 《Linux设备驱动开发详解 A》一一2.3 接口与总线

    本节书摘来华章计算机出版社<Linux设备驱动开发详解 A>一书中的第2章,第2.3节,作者:宋宝华 更多章节内容可以访问云栖社区"华章计算机"公众号查看.1 2.3 ...

  6. 【Linux开发】linux设备驱动归纳总结(六):3.中断的上半部和下半部——tasklet...

    linux设备驱动归纳总结(六):3.中断的上半部和下半部--tasklet xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  7. (转)Linux设备驱动之HID驱动 源码分析

    //Linux设备驱动之HID驱动 源码分析 http://blog.chinaunix.net/uid-20543183-id-1930836.html HID是Human Interface De ...

  8. 【Linux开发】linux设备驱动归纳总结(九):1.platform总线的设备和驱动

    linux设备驱动归纳总结(九):1.platform总线的设备和驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-83299.html linux设备驱动归纳总结(五):3.操作硬件--IO静态映射 xxxxxxxxx ...

最新文章

  1. TypeScript 素描 - 函数
  2. Sqoop找不到主类 Error: Could not find or load main class org.apache.sqoop.Sqoop
  3. NYOJ 228 士兵杀敌(五)
  4. web前端技术分享:管理系统全栈项目之注册功能
  5. Oracle笔记之表空间
  6. C++ 简单实现基数排序(list容器)
  7. php 区块链算法_PoW/BFT等5种主流区块链共识算法的开源代码实现
  8. 推动边缘计算的七项核心技术
  9. javascript学习随笔(编写浏览器脚本 Navigator Scripting )
  10. PTA4-11 先序输出叶结点
  11. linux 用户权限 数字,几个linux命令之用户权限相关命令
  12. HDU 5666 Segment 数论+大数
  13. opencv学习笔记三十二:Haar特征与积分图像
  14. 智慧城市、智慧工地、平安城市、雪亮工程等监控项目中应用SkeyeVSS国标GB28181流媒体服务
  15. Word XP 中目录的编制方法,Word XP 功能键使用大全
  16. HTTP协议报文头部结构和Web相关工具
  17. 一篇文章教会你使用Python网络爬虫下载酷狗音乐
  18. 解决:电脑屏幕每隔几分钟就闪一次(瞬间黑屏一次),鼠标指针伴随着加载的状态(漏斗或者转圈),然后瞬间恢复正常
  19. 罗永浩:我对3月27日那场锤子发布会非常懊悔
  20. Navicat连接Linux的MySQL出错排查

热门文章

  1. python跳出if条件_python的if条件判断
  2. CSS中的四种样式及选择器
  3. 看eShopOnContainers学一个EventBus
  4. java语法基础(总结)
  5. Understanding the Framework (理解FMS框架)
  6. VMware运行时“内部错误”的解决方法
  7. Spring——AOP配置时的jar包异常
  8. 无需SherlockActionbar的SlidingMenu使用详解(一)——通过SlidingMenu设置容器并解决滑动卡顿的问题
  9. Linux下如何生成core dump 文件(解决segment fault段错误的问题)
  10. js new Date()不带时分秒时,时间变了 问题解决