Linux 设备驱动--- 硬件访问
2013-03-09 19:59
197 查看
寄存器 与 内存:
寄存器与内存的区别在哪里?寄存器 和 RAM 的主要区别在于 寄存器操作有副作用:读取某个地址时可能导致该地址内容发生变化,
比如 很多设备的中断状态寄存器只要一读取,便自动清零.
内存 与 IO空间:
在 X86 处理器中存在 I/O空间的概念,I/O空间 是相对内存空间 而言的,他们是彼此独立的地址空间,在 32 位的 X86 系统中, I/O空间大小为
64K,内存空间大小为 4 G.
除了 X86 支持 内存、IO空间, ARM, MIPS , PowerPC 只支持 内存空间.
IO端口 与 IO内存:
IO 端口:当一个寄存器或内存处于 IO空间 时,称其为 IO端口 .
IO内存:
当一个寄存器或内存位于 内存空间 时,称其为 IO 内存.
操作 I/O 端口:
对 I/O 端口 的操作需要按如下步骤完成:1, 申请.
2, 访问.
3, 释放.
申请 I/O 内存:
内核提供了一套函数来允许驱动申请它需要的 I/O 内存.其核心函数是:
struct resource * request_mem_region ( unsigned long start , unsigned long len , char * name )
这个函数申请一个从 start 开始,长度为
len 字节的内存区,如果成功,返回 非NULL;否则返回
NULL.
所有已经在使用的 I/O 内存在 / proc / iomem中列出.
映射 I/O 内存:
在访问 I/O 内存前,必须进行 物理地址到虚拟地址的映射.函数: void * ioremap ( unsigned long phys_addr , unsigned long size )
访问 I/O 内存:
![](http://img.my.csdn.net/uploads/201303/09/1362832888_9064.jpg)
![](http://img.my.csdn.net/uploads/201303/09/1362832926_4963.jpg)
释放 I/O 内存:
I/O 内存不再需要使用时应当释放.步骤如下:
1, void iounmap ( void *addr )
2, void release_mem_region ( unsigned long start , unsigned long len )
相关文章推荐
- Linux下的硬件驱动——USB设备(下)…
- Linux硬件设备访问
- Linux硬件驱动:USB设备驱动开发篇
- Linux下的硬件驱动——USB设备(上)
- linux查看硬件信息及驱动设备
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- Linux下的硬件驱动——USB设备(上)…
- linux查看硬件信息及驱动设备相关整理
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- Linux硬件驱动:USB设备驱动开发篇
- Linux下的硬件驱动——USB设备
- Linux下的硬件驱动——USB设备(转)…
- Linux设备驱动工程师之路——硬件访问及混杂设备LED驱动
- Linux下的硬件驱动——USB设备(上)
- linux查看硬件信息及驱动设备相关整理
- Linux下的硬件驱动——USB设备
- Linux应用程序访问字符设备驱动详细过程解析
- Linux 驱动开发前奏---驱动开发概述、硬件访问技术
- Linux设备驱动程式学习(6)-高级字符驱动程式操作[(3)设备文档的访问控制]
- Linux下的硬件驱动——USB设备(上)…