驱动程序通常使用 dev_set_drvdata() 存储指向其状态的指针。当驱动程序成功地将自己绑定到该设备时,probe() 将返回零,并且驱动程序模型代码将完成其将驱动程序绑定到该设备的部分。 驱动程序的 probe() 可能会返回一个负的 errno 值,表示驱动程序没有绑定到这个设备,在这种情况下,它应该释放它分配的所有资源。
dev->class= led_class;//关联设备类dev->parent =NULL; dev->devt = devno;//关联设备号dev_set_drvdata(dev, NULL); dev_set_name(dev,"led");//设置节点名字dev->release =device_create_release; ret=device_register(dev);if(ret)gotoout_put_dev;return0; out_put_dev: put_device(dev); ...
if ((drv->bus->probe && drv->probe) || //警告信息,有新驱动的时候出出现此log。 (drv->bus->remove && drv->remove) || (drv->bus->shutdown && drv->shutdown)) printk(KERN_WARNING "Driver '%s' needs updating - please use " "bus_type methods\n", drv->name); other = driver_f...
vdev->dev.parent = vdev->dev_parent;//设置video结点名称,如果设备类型为VFL_TYPE_GRABBER,名称为videoXdev_set_name(&vdev->dev,"%s%d", name_base, vdev->num);//注册device文件,生成设备文件/dev/videoXret = device_register(&vdev->dev);/* Register the release callback that will be call...
dev_set_name(&mtd->dev, "mtd%d", i); //设置mtd设备信息mtd_info dev_set_drvdata(&mtd->dev, mtd); //注册设备 if (device_register(&mtd->dev) != 0) goto fail_added; //创建设备 if (MTD_DEVT(i)) device_create(&mtd_class, mtd->dev.parent, ...
platform_data :一个指针,用于保存具体的平台相关的数据。具体的driver模块,可以将一些私有的数据,暂存在这里,需要使用的时候,再拿出来,因此设备模型并不关心该指针得实际含义。 driver_data :同上,驱动层可通过dev_set/get_drvdata函数来获取该成员; class :指向了该设备对应类,开篇我们提到的触摸,鼠标以及键盘等...
/* /drivers/base/dd.c */intdev_set_drvdata(struct device*dev,void*data){int error;if(!dev->p){error=device_private_init(dev);if(error)returnerror;}dev->p->driver_data=data;return0;} /* /linux/device.h */struct device{struct device*parent;struct device_private*p;struct kobject ko...
struct device *dev, char *bus_name) { struct usb_hcd *hcd; hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL); if (!hcd) { dev_dbg (dev, "hcd alloc failed\n"); return NULL; } dev_set_drvdata(dev, hcd); ...
struct device *dev, char *bus_name) { struct usb_hcd *hcd; hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL); if (!hcd) { dev_dbg (dev, "hcd alloc failed\n"); return NULL; } dev_set_drvdata(dev, hcd); ...
#define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev) #define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data)) #endif /* _PLATFORM_DEVICE_H_ */ 1. 2. 3. 4. 5. 6. 7. 8. 9.