设备节点的创建有二种方法:
1)手动创建:mknode命令
当insmod后,还需要手动moknod创建设备节点才能被应用层打开,并且使用完成之后还要删除节点。
2) 自动创建:mdev
mdev,它是应用层的一个应用程序。内核驱动和应用层mdev之间有一套信息传输机制(netlink协议),驱动注册和注销时信息会被传给mdev,由mdev在应用层进行设备文件的创建和删除。使用时,在安装驱动模块之前应用层(根文件系统)启用mdev,并且内核驱动模块中使用相应接口函数即可。mdev只认类,要想让其自动创建一个节点,就需要设备从属于一个类
例如:如下在模块初始化函数中调用class_create创建一个类,名字为firstdrv,用class_device_create创建类下的一个设备 ,名字为xyz。
在模块卸载函数中调用device_deatory和class_destory
编译驱动模块并insmod加载后就会在sys/class下看到生成了一个类firstdrv,类下面还有一个设备xyz,xyz下面的dev文件内容就是主设备号和次设备号。这样当/sys目录里面的内容一更改,medv便会根据这些系统信息自动创建节点了(这是由于在创建根文件系统时的脚本文件/etc/init.d/rcS文件里有一句echo /sbin/mdev > /proc/sys/kernel/hotplug):
执行ls -l /dev./xyz 发现确实自动生成了一个节点/dev/xyz;执行cat /proc/drivers也可以看到firstdrv;