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"); //这是一个协议
本文介绍了一个简单的Linux字符设备驱动程序实现过程,包括设备号注册、类创建、设备节点生成及相应的初始化与退出函数。该驱动通过宏THIS_MODULE指向模块,并使用register_chrdev进行设备注册。
364

被折叠的 条评论
为什么被折叠?



