热门关键字:  PHP  Cisco  seo  网络广告 虚拟主机 中文域名
当前位置 :| 主页>服务器>Linux服务器>

为系统处理器编写Linux设备驱动程序

来源:赛迪网技术社区 作者:Tanya Ortega  时间:2006-10-08 点击:

硬件接口(EP9312 IDE控制器接口)被初始化并与高级IDE驱动程序一起注册后,高级IDE驱动程序通过探测相连的IDE设备硬件接口继续初始化。如果设备被探测到,则与操作系统一起注册。设备与操作系统一起注册后,向能在设备上执行的操作表上映射。这样,操作系统也获得了设备的额外信息,并需要对设备进行资源管理。这些额外信息包括大小和分区数量等。以下是注册IDE硬盘的函数调用:

register_disk(struct gendisk *gd, int drive,
unsigned minors,
struct block_device_operations *ops,
long size)

高级IDE驱动程序用探测设备时获得的的函数参数值调用这个函数。第一个参数是gd,它是描述盘片布局的数据结构。第二个参数--drive,是设备编号。对于EP9312而言,设备编号或为0,或为1,因为硬件只支持的两台设备。第三个参数--minors,是设备被探测时发现的盘片分区。第四个参数--block_device_operations,是函数指针列表,系IDE驱动程序硬盘执行所定义。被映射到该列表中的函数采用结构特殊函数执行不同任务。最后一个参数--size,是指设备的扇区数,它同样也是从设备中直接获得。

设备指针列表包括以下区块设备操作:

• open - 设备和驱动程序实例初始化

• release - 关闭设备或清除驱动程序实例

• ioctl - 填补空白,是通过内核向设备驱动程序传递的一种信息的一种方式

• check media change - 处理支持可移动媒体的设备

• revalidate - 处理支持可移动媒体的设备(通常为设备指定)

区块设备的设备操作列表不包括任何输入输出操作。对于区块设备而言,request方法用于处理设备输入输出,并与等待的输入输出操作队列相关,因此进一步与字符设备有所区分。Request方法和队列均由高级IDE设备驱动器定义,与操作系统一起注册并与设备主要编号相连。

除了将设备和操作系统一起注册,高级IDE设备驱动程序还通过数据结构在本地管理该设备,数据结构包括映射到IDE设备特别函数的函数指针。下面是映射到针对IDE硬盘函数的该数据结构的一部分:

static ide_driver_t idedisk_driver = {
…
cleanup: idedisk_cleanup,
standby: do_idedisk_standby,
flushcache: do_idedisk_flushcache,
do_request: do_rw_disk,
end_request: NULL,
ioctl: NULL,
open: idedisk_open,
release: idedisk_release,
media_change: idedisk_media_change,
revalidate: idedisk_revalidate,
pre_reset: idedisk_pre_reset,
capacity: idedisk_capacity,
special: idedisk_special,
proc: idedisk_proc,
reinit: idedisk_reinit,
… 
  };

值得注意的是,一些函数指针直接向与操作系统一起注册的文件操作列表函数指针映射,而此时IDE设备驱动器内部使用其他函数指针。例如,高级设备驱动程序内部使用函数指针do_request 和 end_request处理要求方法输入输出。


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商连接