chr driver
时间:2007-02-14 来源:ffjnfj
实现chr driver的一般方法:
定义一个结构,包括一个cdev成员,在驱动模块init函数中,通过
cdev_init(&mydev, &fops);
cdev_add(&mydev,xxx);
完成注册,这样在open时,inode->i_cdev就是结构的cdev成员,从而可以取得该结构
以及其他的成员变量,这样在open函数中可以将该结构mydev赋予file->private_data,
这样在其他的函数,比如read中就可以直接使用private_data,这个应该只是为了方便,
后者可以稍稍减少几条指令,因为file总是可以找到对应的inode
总线生成的dev(比如pci_dev)与char dev的关系?
其实没有甚么关系,pci_dev只是表示一个pci设备,如果他要被看作一个char dev,当然
要实现chr driver了
drivers/input/input.c中,register_chrdev,这样所有input设备都使用同一个major号13
当user打开一个input设备时,便会使用同一组操作input_fops,该结构主要就是定义了一个
函数input_open_file,在该函数中会重新设置device file对应的file_operations.
1) 通过input_register_handler可以注册一个handler
2) 比如当插入一个usb input设备时,通过该设备的驱动.probe就可以注册一个device,然后
将handler,device联系起来
也就是说一个handler可以驱动几个设备,这个handler相当于这个usb device的驱动的一部分,
只是很多devices共享了
定义一个结构,包括一个cdev成员,在驱动模块init函数中,通过
cdev_init(&mydev, &fops);
cdev_add(&mydev,xxx);
完成注册,这样在open时,inode->i_cdev就是结构的cdev成员,从而可以取得该结构
以及其他的成员变量,这样在open函数中可以将该结构mydev赋予file->private_data,
这样在其他的函数,比如read中就可以直接使用private_data,这个应该只是为了方便,
后者可以稍稍减少几条指令,因为file总是可以找到对应的inode
总线生成的dev(比如pci_dev)与char dev的关系?
其实没有甚么关系,pci_dev只是表示一个pci设备,如果他要被看作一个char dev,当然
要实现chr driver了
drivers/input/input.c中,register_chrdev,这样所有input设备都使用同一个major号13
当user打开一个input设备时,便会使用同一组操作input_fops,该结构主要就是定义了一个
函数input_open_file,在该函数中会重新设置device file对应的file_operations.
1) 通过input_register_handler可以注册一个handler
2) 比如当插入一个usb input设备时,通过该设备的驱动.probe就可以注册一个device,然后
将handler,device联系起来
也就是说一个handler可以驱动几个设备,这个handler相当于这个usb device的驱动的一部分,
只是很多devices共享了
相关阅读 更多 +