字符设备驱动程序之自动创建设备节点
2013-06-26 15:14
302 查看
#include <linux/fs.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/types.h> #include <linux/device.h> static struct class *led_class; int led_open(struct inode *inode, struct file *file) { printk("led_open\n"); return 0; } ssize_t led_write(struct file *file, const char __user *user, size_t size, loff_t *off) { printk("led_write\n"); return 0; } static struct file_operations led_operation = { .owner=THIS_MODULE, .open=led_open, .write=led_write, }; int major; int led_init(void) { major=register_chrdev(0,"led",&led_operation); led_class = class_create(THIS_MODULE, "led_class"); device_create(led_class, NULL, MKDEV(major, 0), NULL,"led_device"); return 0; } void led_exit(void) { unregister_chrdev(major,"led"); device_destroy(led_class,MKDEV(major, 0)); class_destroy(led_class); } module_init(led_init); module_exit(led_exit); MODULE_LICENSE("GPL");
主要思路:先创建一个类,在类下创建设备!这样我们就不需要在开发板上查看主设备号,然后手动创建设备节点了!在开发板上:ls /sys/class/会看到我们创建的类,ls /sys/class/led_class/会看到我们在类下创建的设备!不过真正的设备节点在/dev目录下面,通过命令:ls /dev/led_device可以查看到!
需要注意的是,我们在编写应用程序的时候,open函数里面的设备名字要跟驱动里面device_create指定的设备名字相一致!
但是,系统做了什么呢?在开发板的/etc/init.d/rcS文件里面有如下的信息:
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
这两行信息就是说,一旦发生了热插拔事件(比如创建了类,在类下创建了设备),就会调用/sbin/mdev命令,mdev命令会通过环境变量中的 ACTION 和 DEVPATH来判断此次热插拔事件影响了/sys目录下的那个文件,一旦发现了这个文件,就会进入这个文件里面去查找dev的属性文件,并根据属性创建设备节点!比如我们加载驱动的的时候,会在 /sys/class/目录下创建类,在 /sys/class/led_class目录下创建设备,在
/sys/class/led_class目录下有个dev文件,dev文件里面就有设备的主次设备号,mdev就会根据主次设备号在/dev/目录下创建设备节点!
相关文章推荐
- 字符设备驱动程序之自动创建设备节点
- 字符设备驱动程序之自动创建设备节点
- 字符设备驱动程序之自动创建设备节点
- 字符设备驱动程序之自动创建设备节点
- Linux 字符设备驱动结构(二)—— 自动创建设备节点
- linux字符设备驱动总结之:全自动创建设备及节点 .
- linux字符驱动之自动创建设备节点
- linux字符驱动之自动创建设备节点
- Linux 字符设备驱动结构(二)—— 自动创建设备节点
- 自动创建节点的字符杂项设备 misc_register
- Linux设备驱动第四天(自动创建设备节点、LED驱动程序)
- 自动创建节点的字符杂项设备 misc_register
- Tiny6410_LED驱动程序_自动分配主设备号+手动创建设备节点
- TQ2440 LINUX 2.6.30.4 LED驱动感言,从最初的打印字符,到自动分配设备号,到自动创建设备节点,到次设备号分控led
- Tiny6410_LED驱动程序_自动分配主设备号+自动创建设备节点
- Linux 字符设备驱动结构(二)—— 自动创建设备节点
- linux字符设备驱动总结之:全自动创建设备及节点
- 内核驱动程序中实现设备节点的自动创建
- TQ2440 LINUX 2.6.30.4 LED驱动感言,从最初的打印字符,到自动分配设备号,到自动创建设备节点,到此设备号分控led
- 字符设备自动创建设备节点