有关注册设备文件、删除注册的设备文件、注册中断、删除中断的用法

有关注册设备文件、删除注册的设备文件、注册中断、删除中断的用法

注册设备文件 函数原型: int register_chrdev(unsigned int major, const char *name, struct file_operations *fops); 参数说明: major是为设备驱动程序向系统申请的主设备号,如果为0则系统为此驱动程序动态地分配一个主设备号 name是设备名 fops是各个调用的入口点的说明 返回值: 返回 0 表示成功; 返回 -EINVAL 表示申请的主设备号非法,一般来说是主设备号大于系统所允许的最大设备号; 返回 -EBUSY 表示所申请的主设备号正在被其他设备驱动程序使用 如果是动态分配主设备号成功,此函数将返回所分配的主设备号 说明:如果register_chrdev操作成功,设备名将会出现在/proc/devices文件里 在成功的向系统注册了设备驱动程序后(调用register_chrdev()成功后),就可以用mknod 命令来把设备映射为一个特别文件,其他程序使用这个设备的时候,只要对此特别文件进行操作就可以了。 代码范例: int rc; rc = register_chrdev(dev_MAJOR, "dev_test", file_operations); if(rc < 0) { printk("Error: register dev error!/n"); return -1; } 删除注册的设备文件 函数原型: int unregister_chrdev(unsigned int major, const char *name); 函数说明: major和name必须和传递给register_chrdev的相同,否则调用失败。 代码范例: unregister_chrdev(dev_MAJOR, "dev_test"); 注册中断 头文件: #include <linux/interrupt.h> 函数原型: int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *), unsigned long flags, const char *dev_name, void *dev_id); 参数说明: unsigned int irq是中断号。有时从linux中断号到硬件中断号的映射并不是一对一的。这里,传递给内核函数的参数是Linux中断号而不是硬件中断号。 irqreturn_t(*handler)(int, void *) 安装的处理函数指针。它的返回值一般有2种:IRQ_HANDLED和IRQ_NONE。它的第一个参数就是请求的中断号,第二个参数见下面void *dev_id的解释。 unsigned long flags 申请时的选项。它决定中断处理程序的一些特性,描述IRQ与I/O设备之间的关系。IRQF_DISABLED表示当调用action handler时保持irqs禁用(即:快速中断处理);IRQF_SHARED表示允许在多个设备间共享中断;IRQF_SAMPLE_RANDOM表示设备可以被看作是事件随即的发生源,内核可以用它做随即数种子; const char *dev_name 这个传递给request_irq的字串用在/proc/interrupts来显示中断的拥有者 void *dev_id 用作共享中断线的指针。它是一个独特的标识,用在当释放中断线时以及可能还被驱动用来指向它自己的私有数据区(来标识哪个设备在中断)。如果中断没有被共享,dev_id可以设置为NULL 返回值: 返回 0 表示成功 返回 -INVAL 表示irq > 15或handler == NULL 返回 -EBUSY 表示中断已经被占用且不能共享 int rc; rc = request_irq(irq_NUM, callback_function, 0, "dev_name", NULL); if(rc) { printk("Error: register dev error!/n"); return -1; } 删除注册的中断 函数原型: void free_irq(unsigned int irq, void *dev_id); 代码范例: free_irq(irq_NUM, NULL);

你可能感兴趣的:(linux,struct,File,null,Random,callback)