*参照元 [#l576f6f5] #backlinks *説明 [#gc3b4075] -パス: [[linux-4.4.1/drivers/base/driver.c]] -FIXME: これは何? --説明 **引数 [#v5d0eb4f] -struct device_driver *drv -- --[[linux-4.4.1/device_driver]] **返り値 [#k2a2d19c] -int -- **参考 [#a6eba294] *実装 [#i91e6833] /** * driver_register - register driver with bus * @drv: driver to register * * We pass off most of the work to the bus_add_driver() call, * since most of the things we have to do deal with the bus * structures. */ int driver_register(struct device_driver *drv) { int ret; struct device_driver *other; BUG_ON(!drv->bus->p); - --[[linux-4.4.1/BUG_ON()]] if ((drv->bus->probe && drv->probe) || (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); - -drv->bus は struct bus_type * 型 --[[linux-4.4.1/bus_type]] --[[linux-4.4.1/printk()]] other = driver_find(drv->name, drv->bus); if (other) { printk(KERN_ERR "Error: Driver '%s' is already registered, " "aborting...\n", drv->name); return -EBUSY; } - --[[linux-4.4.1/driver_find()]] ret = bus_add_driver(drv); if (ret) return ret; - --[[linux-4.4.1/bus_add_driver()]] ret = driver_add_groups(drv, drv->groups); if (ret) { bus_remove_driver(drv); return ret; } kobject_uevent(&drv->p->kobj, KOBJ_ADD); - --[[linux-4.4.1/driver_add_groups()]] --[[linux-4.4.1/bus_remove_driver()]] --[[linux-4.4.1/kobject_uevent()]] return ret; } EXPORT_SYMBOL_GPL(driver_register); - --[[linux-4.4.1/EXPORT_SYMBOL_GPL()]] *コメント [#l417199d]