首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>linux 内核>文章内容
Linux内核对I/O端口的管理实现(下)
来源:www.unix5.com 作者:riechelr_hl 发布时间:2007-05-29  

5 访问I/O端口空间

在驱动程序请求了I/O端口空间中的端口资源后,它就可以通过CPU的IO指定来读写这些I/O端口了。在读写I/O端口时要注意的一点就是,大多数平台都区分8位、16位和32位的端口,也即要注意I/O端口的宽度。

Linux在include/asm/io.h头文件(对于i386平台就是include/asm-i386/io.h)中定义了一系列读写不同宽度I/O端口的宏函数。如下所示:

⑴读写8位宽的I/O端口

 

  unsigned char inb(unsigned port);
  void outb(unsigned char value,unsigned port);

其中,port参数指定I/O端口空间中的端口地址。在大多数平台上(如x86)它都是unsigned short类型的,其它的一些平台上则是unsigned int类型的。显然,端口地址的类型是由I/O端口空间的大小来决定的。

⑵读写16位宽的I/O端口

 

  unsigned short inw(unsigned port);
  void outw(unsigned short value,unsigned port);

⑶读写32位宽的I/O端口

 

  unsigned int inl(unsigned port);
  void outl(unsigned int value,unsigned port);


1 对I/O端口的字符串操作

除了上述这些“单发”(single-shot)的I/O操作外,某些CPU也支持对某个I/O端口进行连续的读写操作,也即对单个I/O端口读或写一系列字节、字或32位整数,这就是所谓的“字符串I/O指令”(String Instruction)。这种指令在速度上显然要比用循环来实现同样的功能要快得多。

Linux同样在io.h文件中定义了字符串I/O读写函数:

⑴8位宽的字符串I/O操作

 

  void insb(unsigned port,void * addr,unsigned long count);
  void outsb(unsigned port ,void * addr,unsigned long count);

⑵16位宽的字符串I/O操作

 

  void insw(unsigned port,void * addr,unsigned long count);
  void outsw(unsigned port ,void * addr,unsigned long count);

⑶32位宽的字符串I/O操作

 

  void insl(unsigned port,void * addr,unsigned long count);
  void outsl(unsigned port ,void * addr,unsigned long count);

2 Pausing I/O

在一些平台上(典型地如X86),对于老式总线(如ISA)上的慢速外设来说,如果CPU读写其I/O端口的速度太快,那就可能会发生丢失数据的现象。对于这个问题的解决方法就是在两次连续的I/O操作之间插入一段微小的时延,以便等待慢速外设。这就是所谓的“Pausing I/O”。

对于Pausing I/O,Linux也在io.h头文件中定义了它的I/O读写函数,而且都以XXX_p命名,比如:inb_p()、outb_p()等等。下面我们就以out_p()为例进行分析。

共6页: 上一页 [1] [2] [3] 4 [5] [6] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
·深入分析 Linux操作系统的内核链
·Linux内核可装载模块对设备驱动
·概述Linux系统的驱动框架及驱动
·详解Linux 2.6内核新文件系统变
·Linux系统可卸载内核模块完全指
·FreeBSD手册讲解(一)--配置FreeB
·编译Linux操作系统的内核讲解
·Linux系统可卸载内核模块完全指
  相关文章
·Linux内核对I/O端口的管理实现(
·使用 Linux 系统调用的内核命令
·Linux操作系统的源代码目录树结
·内核设计篇
·Linux内核入侵检测安全增强实现
·Linux内核入侵检测安全增强实现
·深入分析 Linux操作系统的内核链
·走向Linux系统高手之路 编译内核
·Linux内核可装载模块对设备驱动
·详细解析Linux操作系统的内核空
·Linux操作系统内核启动参数详细
·Linux系统可卸载内核模块完全指

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!