第一部分 必要的设备结构体
1)linux 2.6内核中使用cdev结构体表示字符设备: struct cdev { struct kobject kobj;//内嵌的kobject对象 struct module *owner;//所属模块 struct file_operations *ops;//文件操作结构体 struct list_head list; dev_t dev;//设备号,长度为32位,其中高12为主设备号,低20位为此设备号 unsigned int count; };
可以使用下列宏从dev_t中获得主次设备号: 也可以使用下列宏通过主次设备号生成dev_t: MAJOR(dev_t dev); MKDEV(int major,int minor); MINOR(dev_t dev); 说明:在2.6内核中可以容纳大量的设备,而先前的内核版本却限于255个主设备号和255个此设备号。 2)file_operations结构体中的成员函数是字符设备驱动程序设计中的主体内容,这些函数实际会在应用程序进行linux的open(),write(),read(),close()等系统调用时被最终调用。目前的file_operations结构已经变得非常大,在这里我们就关心和我这个设备程序有关的几个函数,以后用到了,咱们再提也