设为首页 加入收藏

TOP

Linux下的硬件访问方法
2014-11-24 12:51:45 来源: 作者: 【 】 浏览:0
Tags:Linux 硬件 访问 方法

1、 寄存器与内存


寄存器与内存的区别在哪里呢


寄存器和RAM 的主要不同在于寄存器操作有副作用side effect或边际效果):读取某个地址时可能导致该地址内容发生变化,比如很多设备的中断状态寄存器只要一读取,便自动清零。


2、 内存与I/O


在X86处理器中存在I/O空间的概念,I/O空间是相对内存空间而言的,他们是彼此独立的地址空间,在32位的x86系统中,I/O空间大小为64K,内存空间大小为4G


3、 IO/内存空间


X86支持内存空间、IO空间


ARM只支持内存空间


MIPS只支持内存空间


PowerPC只支持内存空间


4、 IO端口与IO内存


IO端口:当一个寄存器或内存位于IO空间时,称其为IO端口


IO内存:当一个寄存器或内存位于内存空间时,称其为IO内存


5、 操作I/O端口


对I/O端口的操作需按如下步骤完成:


1申请


2访问


3释放


1)申请I/O端口


内核提供了一套函数来允许驱动申请它需要的I/O端口,其中核心的函数是:


struct resource *request_region(unsigned long first,unsigned long n, const char *name)


这个函数告诉内核,你要使用从first 开始的n个端口,name参数是设备的名字。如果申请成功,返回NULL申请失败,返回NULL


系统中端口的分配情况记录在/proc/ioports(展示)。如果不能分配需要的端口,可以来这里查看谁在使用。


2)访问I/O端口


I/O端口可分为8-位, 16-位, 和32-位端口。Linux内核头文件(体系依赖的头文件) 定义了下列内联函数来访问I/O 端口:


3)释放I/O端口


当用完一组I/O 端口(通常在驱动卸载时),应使用如下函数把它们返还给系统:


void release_region(unsigned long start, unsigned long n)


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇S3C6410硬件WATCHDOG TIMER(看门.. 下一篇Struts 2中的表达式语言

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)
·C语言中,指针函数和 (2025-12-24 22:20:03)
·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)