字符设备驱动内核提供三种注册方法:
*2.6以前老版本注册方式
register_chrdev (unsigned int major, const char *name, struct file_operations*fops);//他只分配主设备号。从设备号在mknod的时候指定
register_chrdev函数的major参数如果等于0,则表示采用系统动态分配的主设备号
insmod 后,必须手工建立节点(当然,正常都写成脚本)
mknod dev/zxl01 c 200 0 //major 200
mknod dev/zxl02 c 200 1
*2.6 内核提供
register_chrdev_region(dev_t from, unsigned count, const char *name); //分配设备号,即向系统注册注册一个字符设备
指定从设备号from开始(dev_t 主次设备号),申请count个设备号,在/proc/devices中的名字为name
缺点:无法保证注册的设备号是其他人linux系统中未分配使用的设备号)
alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name)//动态分配主次设备号
也需要手动创建设备节点 mknod memdev c 260 0
*混杂设备 (较常用)
misc_register(struct miscdevice *) // 共享一个主设备号(10),自动生成设备节点
miscdevice 这个结构体里包括 次设备号,设备名,文件操作等
insmod 之后,在/proc/misc 和 /dev/ 目录下都会自动生成对应“设备明的设备” (上两种设备是在/proc/device 下查看)