I am trying to update a kernel driver for Android, I have added some printk\'s to debug it, the _init function is invoked, but the probe function is not. What I am missing ? Whe
The probe
function is called whenever the device is seen. This can happen on device boot, or it can occur when the device is connected. Check out this article for more info.
When a module_init is called (insmod in case of dynamic loading) then the driver registration is done, and the various callbacks probe, resume, suspend related to the driver are present.
Now the main thing to understand this is what all happens in probe function. If you notice then in probe most the initialisation related to device is done (eg. settings associated with DEVICE), so obviously this should execute when device is present.
Probe is called when the device and driver name/id are matched i.e. verified that these will be coupled/linked. So now we are sure that say Driver ABC will be associated with Device ABC; so do the initialization settings for Device ABC in probe of Driver ABC.
Found the answer after some research, For a "platform" device the probe function is invoked when a platform device is registered and it's device name matchs the name specified on the device driver.
More details here: http://comments.gmane.org/gmane.linux.kernel.kernelnewbies/37050
Now I just need to figure why the device is not being registered :\