Unix操作系统之设备驱动程序

系统 其他OS
struct file主要用于与Unix操作系统文件系统对应的设备驱动程序使用。当然,其它设备驱动程序也可以使用它。它提供关于被打开的文件的信息。

由于经常学习Unix操作系统的一些知识,而且很喜欢Unix操作系统,在工作中也很喜欢总结关于Unix操作系统相关的经验教训,下面就Unix操作系统下的设备驱动程序问题来详细说说吧。

Unix操作系统下的设备驱动程序

具体到系统里,设备驱动程序所提供的这组入口点由一个结构来向系统进行说明,其中,struct inode提供了关于特别设备文件/dev/driver(假设此设备名为driver)的信息,它的定义为:
dev_t i_rdev& /* Device major and minor numbers*/
struct vm_area_struct * i_mmap&
unsigned short i_flags& /* Mount flags see fs.h */

struct file主要用于与Unix操作系统文件系统对应的设备驱动程序使用。当然,其它设备驱动程序也可以使用它。它提供关于被打开的文件的信息,定义为:unsigned short f_flags& /* The flags arg passed to open */

在结构file_operations里,指出了设备驱动程序所提供的入口点位置,分别是:

1 lseek,移动文件指针的位置,显然只能用于可以随机存取的设备。

2 read,Unix操作系统进行读操作,参数buf为存放读取结果的缓冲区,count为所要 读取的数据长度。返回值为负表示读取操作发生错误,否则返回实际读取 的字节数。对于字符型,要求读取的字节数和返回的实际读取字节数都必须是inode- i_blksize的的倍数。

3 write,进行写操作,与read类似。

4 readdir,取得下一个目录入口点,只有与Unix操作系统文件系统相关的设备驱动程序 才使用。

5 selec,进行选择操作,如果驱动程序没有提供select入口,select操 作将会认为设备已经准备好进行任何的I/O操作。

6 ioctl,进行读、写以外的其它操作,参数cmd为自定义的的命令。

7 mmap,用于把设备的内容映射到地址空间,一般只有块设备驱动程序使 用。

8 open,打开设备准备进行I/O操作。返回0表示打开成功,返回负数表示失败。如果驱动程序没有提供open入口,则只要/dev/driver文件存在就认为打开成功。

9 release,即close操作。 设备驱动程序所提供的入口点,在设备驱动程序初始化的时候向系统进行登 记,以便系统在适当的时候调用。LINUX系统里,通过调用register_chrdev 向系统注册字符型设备驱动程序。register_chrdev定义为:
int register_chrdevunsigned int major, const char *name,

其中,major是为设备驱动程序向Unix操作系统申请的主设备号,如果为0则Unix操作系统为此 驱动程序动态地分配一个主设备号。name是设备名。fops就是前面所说的对各个 调用的入口点的说明。此函数返回0表示成功。返回-EINVAL表示申请的主设备号 非法,一般来说是主设备号大于系统所允许的***设备号。返回-EBUSY表示所申 请的主设备号正在被其它设备驱动程序使用。

如果是动态分配主设备号成功,此 函数将返回所分配的主设备号。如果register_chrdev操作成功,设备名就会出 现在/proc/devices文件里。

初始化部分一般还负责给设备驱动程序申请系统资源,包括内存、中断、时 钟、I/O端口等,这些资源也可以在open子程序或别的地方申请。在这些资源不 用的时候,应该释放它们,以利于资源的共享。 在Unix操作系统里,对中断的处理是属于系统核心的部分,因此如果设备与系

统之间以中断方式进行数据交换的话,就必须把该设备的驱动程序作为Unix操作系统核心的一部分。设备驱动程序通过调用request_irq函数来申请中断,通过free_irq 来释放中断。

以上,我们就完成了对Unix操作系统下的设备驱动程序介绍。希望对大家对Unix操作系统的学习有所帮助。

【编辑推荐】

  1. 略述Unix操作系统缺点
  2. 盘点Unix操作系统优势所在
  3. 深度讲解Unix操作系统程指
  4. 学习Unix操作系统进程
  5. Unix操作系统Vi编辑程序操作模式
责任编辑:小霞
相关推荐

2010-04-19 10:18:30

Unix操作系统

2010-05-10 15:53:24

Unix系统

2010-05-10 16:08:41

Unix系统

2010-04-16 18:15:11

Unix操作系统

2011-01-10 18:21:38

linux编写程序

2010-04-16 14:30:11

2010-04-16 18:02:30

Unix操作系统

2009-12-07 09:39:04

Linux设备驱动硬件通信

2010-04-19 12:47:39

Unix操作系统

2010-04-13 12:27:44

Unix操作系统

2010-04-09 11:11:34

Unix操作系统

2021-11-29 07:55:45

Linux GPIO Linux 系统

2010-04-15 14:40:26

Unix操作系统

2010-04-19 18:18:30

Unix操作系统

2010-04-19 17:39:50

Unix操作系统

2010-04-16 17:19:58

Unix操作系统

2010-04-14 13:59:45

Unix操作系统

2010-04-16 17:49:28

Unix操作系统

2010-04-08 17:56:42

Unix操作系统

2010-04-09 11:24:38

Unix操作系统
点赞
收藏

51CTO技术栈公众号