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

时间: 2024-10-23 22:00:17

【翻译】【linux设备驱动】linux地址类型的相关文章

Linux 设备驱动 Edition 3

原文网址:http://oss.org.cn/kernel-book/ldd3/index.html Linux 设备驱动 Edition 3 By Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman 由 quickwhale 翻译的简体中文版 V0.1.0 2006-6-2 遵循原版的版权声明. 还在完善中. 欢迎任何意见, 请给我邮件. 请发信至 quickwhale 的邮箱 <[email protected]> 版权 ©

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

综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争. 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时.并行被执行.而并发的执行单元对共享资源(硬件资源和软件上的全局.静态变量)的访问则容易导致竞态(race conditions).可能导致并发和竟态的情况有: SMP(Symmetric Multi-Processing),对称多处理结构.SMP是一种紧耦合.共享存储的系统模型,它的特点是多个CPU使用共

Linux设备驱动开发 - 平台设备驱动

Linux2.6的内核中引入了一种新的设备驱动模型-平台(platform)设备驱动,平台设备驱动分为平台设备(platform_device)和平台驱动(platform_driver),平台设备的引入使得Linux设备驱动更加便于移植. 一.平台设备平台设备结构体: 1 struct platform_device { 2 const char * name; /* 设备名 */ 3 int id; 4 struct device dev; /* 设备结构体 */ 5 u32 num_res

linux设备驱动系列:如何处理竞态关系

综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争. 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时.并行被执行.而并发的执行单元对共享资源(硬件资源和软件上的全局.静态变量)的访问则容易导致竞态(race conditions).可能导致并发和竟态的情况有: SMP(Symmetric Multi-Processing),对称多处理结构.SMP是一种紧耦合.共享存储的系统模型,它的特点是多个CPU使用共

linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现【转】

本文转自自:http://blog.chinaunix.net/uid-25014876-id-59418.html linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现 一.结构体struct file和struct inode 在之前写的函数,全部是定义了一些零散的全局变量.有没有办法整合成到一个结构体当中?这样的话,看起来和用起来都比较方便.接下来就要说这方面的问题. 不过先要介绍一下除了fops以外的两个比较重要的结构体: 1)struct file 在内核中,f

Linux设备驱动开发基础

1.驱动概述和开发环境搭建 1.1驱动设备的作用 对设备驱动最通俗的解释就是"驱动硬件设备行动".驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮训.中断处理.DMA通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据. 由此可见,设备驱动充当了硬件和应用软件之间的纽带,他使得应用软件只需要调用系统软件的应用编程接口(API)就可让硬件去完成要求的工作.在系统中没有操作系统的情况下,工

Linux 设备驱动模型

Linux系统将设备和驱动归一到设备驱动模型中了来管理 设备驱动程序功能: 1,对硬件设备初始化和释放 2,对设备进行管理,包括实参设置,以及提供对设备的统一操作接口 3,读取应用程序传递给设备文件的数据或回送应用程序请求的数据 4,检测或处理设备出现的错误 设备驱动模型提供了硬件的抽象包括: 1,电源管理 其实,电源管理就是一些设备不工作的时候,让它歇一会,休眠一会(最低消耗),达到省电的目的 它的一个重要的功能是: 省电模式下,使系统中的设备以一定的先后顺序挂起 在全速工作模式下,使系统的设

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

本文转载自:http://blog.chinaunix.net/uid-25014876-id-111745.html linux设备驱动归纳总结(九):1.platform总线的设备和驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这一节可以理解是第八章的延伸,从这节开始介绍platform设备驱动. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

linux设备驱动归纳总结(三):2.字符型设备的操作open、close、read、write【转】

本文转载自:http://blog.chinaunix.net/uid-25014876-id-59417.html linux设备驱动归纳总结(三):2.字符型设备的操作open.close.read.write 一.文件操作结构体file_operations 继续上次没讲完的问题,文件操作结构体到底是什么东西,为什么我注册了设备之后什么现象都没有?可以验证文件操作结构体的内容. file_operations是一个函数指针的集合,用于存放我们定义的用于操作设备的函数的指针,如果我们不定义,