static struct class *firstdrv_class; //分配一个类
static struct class_device *firstdrv_class_dev;
static struct file_operations first_drv_fops =
{
.owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */
/* .open = first_drv_open,
.write = first_drv_write, */
};
int major;
static int first_drv_init(void)
{
/*注册—字符*/
major = register_chrdev(0, "first_drv", &first_drv_fops); // 注册驱动程序, 告诉>内核
//参数0是系统随机分配主设备号
firstdrv_class = class_create(THIS_MODULE, "firstdrv");
firstdrv_class_dev = class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); /* /dev/xyz */
//功能是让系统自动生成设备节点
return 0;
}
static void first_drv_exit(void)
{
unregister_chrdev(major, "first_drv"); // 卸载
class_device_unregister(firstdrv_class_dev);
class_destroy(firstdrv_class);
}
module_init(first_drv_init);
module_exit(first_drv_exit);
MODULE_LICENSE("GPL"); //这是一个协议