当前位置: 技术问答>linux和unix
linux led驱动
来源: 互联网 发布时间:2016-12-26
本文导语: 三星2440led的驱动中定义了#define DEVICE_NAME "leds",在测试程序中是open("/dev/leds0");请问这怎么理解?是用misc_register进行设备注册的,如何进行设备节点的自动分配? 另外在设置时sbc2440_leds_ioctl(struct inode *inode, str...
三星2440led的驱动中定义了#define DEVICE_NAME "leds",在测试程序中是open("/dev/leds0");请问这怎么理解?是用misc_register进行设备注册的,如何进行设备节点的自动分配?
另外在设置时sbc2440_leds_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)里包含四个参数,实际调用中没有用到struct inode *inode, 请问这个参数有何作用?
另外在设置时sbc2440_leds_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)里包含四个参数,实际调用中没有用到struct inode *inode, 请问这个参数有何作用?
|
举例来说
1.设备名:leds
register_chrdev_region()中用到。
可在/proc/devices在查看到
主设备号 设备名
250 leds
2.设备节点:/dev/leds0
mknod /dev/leds0 c 250 0
创建设备节点时,将设备跟驱动程序绑定。
一个主设备号对应一个驱动程序
次设备号指向驱动程序所实现的设备
|
1.open 是打开 /devleds0,这个设备文件节点
2.混杂设备是简化过程的字符设备,节点的自动创建,就两个函数,class_create、device_create,前提是udev,已运行
3.inode 是你open leds0 时,操作系统,根据leds0 透过VFS自动生成
建议:看下 inode、file、file_operation这三个结构体功能含义,要搞清楚,注册的过程和机制,追踪源代码,是比较好的办法
|
inode会由文件名得到的.
|
struct inode *inode参数是为了和file_operation f_ops中的函数指针的参数类型保持一致,不然,无法调用注册的函数。至于这个参数用不用,在不同的函数里面有可能对待方法不同
|
函数的定义的变量,返回都是规定好的,方便扩展的,统一接口,虽然你使用不到,别人还是会用到的。所以要按它的格式来,没有你可以不操作,