Linux系统下设备驱动的安全端口分配

豆豆网   技术应用频道   2007年03月11日  【字号: 收藏本文

本文详细介绍Linux系统下设备驱动的安全端口分配

  摘要:

  编写设备驱动是一个具有挑战性和冒险性的工作。当设备通过init_mo dule函数登记时,设备的资源应当被分 配。一个主要的设备资源是I/O端口。作为动态连接的驱动程序,开发者应当小心将未被使用的I/O端口分配 给这些设备。 首先驱动程序应侦测这些端口是否被使用或释放。然后再为设备申请获取端口。当驱动模块被 从内核中移出时,端口应该被释放。这篇文章讨论了Linux设备驱动的安全端口分配的复杂性。

  介绍

  设备驱动开发者一个主要关心的问题是设备的资源分配。这些资源包括I/O端口,内存和中断。这篇文章试图解释I/O子系统的基本原理和资源分配的重要性,主要是I/O端口的资源处理。同时还将阐明如何侦测,申请和释放设备的端口地址。

  基本的硬件元素,如端口,总线和设备控制器,构成了大量的不同的I/O设备。设备驱动向I/O子系统提供了 一个通用的设备存取界面,这非常类似于系统调用(systmem call)在应用程序和操作系统之间提供的标准界 面。现在有很多种类型的设备附属在电脑上,举例说来有: 存储设备,如磁盘,磁带,光驱和软驱; 人机交 互设备,如键盘,鼠标和屏幕; 传输设备,如网卡和调制解调器。不论这些不同设备的数目巨大,我们只需要理解一些基本的概念,即设备如何加载以及软件如何控制硬件。

  基本概念

  设备由两部分组成,一个是被称设备为控制器的电器部分,另一个是机械部分。控制器通过系统总线加载到 电脑上。典型的方式是,一组互不冲突的寄存器组被赋予到各个控制器。I/O端口包含4组寄存器,即状态寄 存器,控制寄存器,数据输入寄存器,数据输出寄存器。状态寄存器拥有可以被主机读取的(状态)位,用来 指示当前命令是否执行完毕,或者字节是否可以被读出或写入,以及任何错误提示。控制寄存器则被主机写操作以启动一条命令或者改变设备的(工作)模式。数据输入寄存器用于获取输入而数据输出寄存器则向主机发送结果。

作者:tanktang    责编:豆豆技术应用

正在加载评论...