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(),        。

問い詰める
 ,      ,  ,    ,   、