linux下platformデバイスと駆動登録の優先順位
1797 ワード
, probe
int driver_probe_device(struct device_driver * drv, struct device * dev)
{
if (drv->bus->match && !drv->bus->match(dev, drv))
return -ENODEV;
dev->driver = drv;
if (drv->probe) {
int error = drv->probe(dev);
if (error) {
dev->driver = NULL;
return error;
}
}
device_bind_driver(dev);
return 0;
}
私が答えてあげよう
満足のいく回答
2012-07-09 09:18
,platform ( ) arch_initcall() , initcall level 3; module_init() , device_initcall(), initcall level 6。
kernel (kernel_init@init/main.c), (arm :kernel/arch/arm/vmlinux.lds) __initcall_start , level level 。
platform , probe(), , 。
問い詰める
platform , platform , 。 device_register driver_registe , , , 。
に答える
1、 module_init() , subsys_initcall(), , ;
2、 , ( probe() ), , 。 driver_registe()-->device_register(), , 。
問い詰める
, 2 ,
driver_register device_register , ,
1 , I2C, 。
に答える
, , USB hcd , , 。
, , , device_attach()--> driver_probe_device() 。
, probe() , , probe() , 。 , 。
, driver_attach()-->driver_probe_device(), 。
問い詰める
, , , , 、