class_create 一共有两个参数,参数 owner 一般为 THIS_MODULE,参数 name 是类名字。设备类名对应 /sys/class 目录的子目录名。返回值是个指向结构体 class 的指针,也就是创建的类。 卸载驱动程序的时候需要删除掉类,类删除函数为 class_destroy void class_destroy(struct class *cls); // cls要删除的类 ②...
提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下: struct class *myclass ; class_create(THIS_MODULE, “my_device_...
//创建类,为THIS_MODULE模块创建一个类,这个类叫做hello_class hello_class = class_create(THIS_MODULE, "hello_class"); if (IS_ERR(hello_class)) //如果返回错误 { //打印类创建失败 printk("failed to allocate class\n"); //返回错误 return PTR_ERR(hello_class); } /*在hello_class类下面创建...
为了udev获得驱动的信息,驱动必须将信息导出到sysfs,方法是 class_create , device_create /** * class_create - create a struct class structure * @owner: pointer to the module that is to "own" this struct class * @name: pointer to a string for the name of this class. * * This is used ...
/sys/class/leds//trigger文件进行控制。 triggers:指向LED设备可用触发器的链表。 LED框架初始化 staticint__initleds_init(void){ leds_class = class_create(THIS_MODULE,"leds");if(IS_ERR(leds_class))returnPTR_ERR(leds_class); leds_class- >pm = &leds_class_dev_pm_ops; ...
if((cdev_add(&my_cdev, dev,1)) <0)gotor_class; if(IS_ERR(dev_class = class_create(THIS_MODULE,"my_class")))gotor_class; if(IS_ERR(device_create(dev_class,NULL, dev,NULL,"my_device")))gotor_device; init_waitqueue_head(&my_waitqueue); ...
}mtd_class=class_create(THIS_MODULE,"mtd");//创建类if(IS_ERR(mtd_class)){printk(KERN_ERR"Error creating mtd class.\n");unregister_chrdev(MTD_CHAR_MAJOR,"mtd");returnPTR_ERR(mtd_class);}register_mtd_user(¬ifier);//调用register_mtd_user(),将notifier添加到mtd_notifiers链表中return0;...
cls = class_create(THIS_MODULE, "hellocls"); if (IS_ERR(cls)) { printk(KERN_ERR "class_create() failed for cls\n"); result = PTR_ERR(cls); goto out_err_1; } devno = MKDEV(major, minor); class_dev = device_create(cls, NULL, devno, NULL, "hellodev"); ...
(一)解析:class_create函数和class_destroy函数 创建一个类 和 删除一个类。 (二)class_create函数原型 struct class *class_create(struct module *owner, const char *name); 1. 查看函数注释: / * * 创建一个struct类结构 * @owner:指向“拥有”这个struct类的模块的指针 ...
Init !!\n");major_number=register_chrdev(0,DEVICE_NAME,NULL);if(major_number<0){printk(KERN_ALERT"hrtimer_test: Register fail!\n");returnmajor_number;}printk(KERN_ALERT"Registe success, major number is %d\n",major_number);class=class_create(THIS_MODULE,CLASS_NAME);if(IS_ERR(class))...