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

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

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

文档系统特殊文件

文档系统特殊文件提供了从文档系统访问硬件设备的可行性。这些访问点使用mknod 命令在文档系统/dev 目录中生成。命令如下:mknod 。

其中, 是给予硬件设备的名称,如 /dev/hda1 是给予硬盘驱动器的通用名称。 是设备驱动程序的类型--字符(char)、区块等。 代表设备类别和与之相配的驱动程序。 表示设备类别中的一个实例,并仅对设备驱动程序适用。例如,某个系统中同时采用2个硬盘驱动器,它们都具有同样的主要编号,使用同样的设备驱动软件,但是该设备驱动程序软件却会在内部根据次要编号区分这2个硬盘驱动器。

值得注意的是,并非所有的设备都执行特殊文件接口。如同本文前面已经提及的,网络设备驱动程序就不采用这种接口访问设备。

这种情况下,在设备文档系统里,就会使用 devfs来获得文档设备特殊文件。devfs 目前广受欢迎,但仍然还不是内核的默认功能。如果采用devfs 文档系统,那么就无需mknod 来生成特殊文件了。相反,设备驱动程序软件会使用直接的devfs 文档系统接口在空闲时刻或者设备刚被初始化时生成特殊文件。

编程实例概述

为便于示范非标准嵌入式平台的Linux设备驱动程序,本文将说明EP9312的设备驱动程序实现情况。其中,EP9312 IDE设备驱动程序是区块设备, EP9312触摸屏为字符设备,代码中的高级API/硬件接口、初始化序列和应用软件编码均将予以说明。

字符设备驱动程序实例:触摸屏设备驱动程序

EP9312触摸屏控制器因其数据只能按顺序获取而被列为Linux字符设备。触摸屏字符驱动程序的执行是相当简单的--设备向操作系统注册,并通过文档系统特殊文件进行访问。有关硬件代码包含在文档操作表的一套函数中。我们将从内核初始化开始,解释该驱动程序的执行情况。

初始化EP9312触摸屏的函数是:

 int __init ep93xx_ts_init(void)

该函数处理2项工作:当设备被中断驱动时获取设备IRQ和在操作系统内注册触摸屏设备。

函数request_irq() 在请求IRQ时被调用,并注册中断处理器函数以在设备发生系统中断时处理所需的任务。

而函数 register_chrdev() 则是用来注册字符设备的。该函数表现形式如下:

int register_chrdev(unsigned int major,
  const char * name,
  struct file_operations *fops)

该函数安装了字符设备硬件的内核接口。主要编号用于把驱动程序映射到 /dev 目录中的文档系统特殊文件。设备被赋予一个名称,以便内核识辨。此外,file_operations 结构具有对函数指针表的一个指针,该表指向硬件的相应函数。

然而,仍然有一些字符设备不符合预先确定的字符设备范畴。这些设备就用主编号10一起归于"其他类型",注册设备用以下函数:

 int misc_register(struct miscdevice * misc)


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