您的位置:首页 > 其它

I/O端口的访问

2016-01-18 15:35 267 查看


Linux中的任何设备驱动程序都可对I/O端口进行操作,这样很容易引起混乱,因此Linux提供了三个宏check_region(start,n)、request_region(start,n,name)、release_region(start,n)来对端口使用情况进行控制,它们在include/linux/ioport.h中进行了定义。

check_region(start,n)检查一片区域是否正在被使用,如果正在被使用,则返回非零值。
request_region(start,n,name)创建一片新的标记为正在被使用的区域。

release_region(start,n)释放正在使用的区域,也就是将指定I/O端口区域标记为没有使用状态。

参数start表示用到的I/O端口的基地址,n标明从start开始的I/O端口范围,name为使用这段I/O地址的设备名。

在申请了I/O端口区域之后,就可以放心地访问,Linux使用inb(p)、inw(P)、insb(p,d,l)、insw(p,d,l)、outb(v,p)、outw(v,p)、outl(v,p)、outsb(p,d,l)、outsl(p,d,l)等宏来访问I/O端口,他们在include/asm/io.h中进行定义。

宏中in表示从端口输入,out表示从输出到端口。

b表示访问字节,w表示访问字,l表示访问长整数,s表示流数据,如outw表示输出一个字。
参数p表示要访问的I/O端口号,v表示要输出的数值,d表示内存缓存起始地址,l表示输出输入的量。

eg:
intb(p)表示从端口p输入一个字节。

outsw(p,d,l)表示输出从内存地址d开始的l个字到端口p。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: