@ iSegFault : probe () будет вызван, чтобы убедиться, что устройство существует и функциональность в порядке. Если устройство не поддерживает горячее подключение, функциональность probe () можно поместить в init ( ). Это уменьшит объем оперативной памяти драйвера. P.S ссылка
Probe () происходит во время загрузки устройства или когда устройство подключено. Для устройства «платформа» функция датчика вызывается, когда устройство платформы зарегистрировано, и его имя устройства соответствует имени, указанному в драйвере устройства. P.S ссылка
Функция i2c_detect проверяет адаптер I2C, ища разные адреса, указанные в структуре addr_data. Если устройство найдено, то вызывается функция chip_detect. P.S ссылка .
Одна ссылка, которая наверняка очистит ваши сомнения. P.S ссылка
В ядре 2.4.29 я могу показать вам, как происходит проверка? Пожалуйста, смотрите ниже (Имя файла: drivers / acorn / char / pcf8583.c )
static struct i2c_driver pcf8583_driver = {
name: "PCF8583",
id: I2C_DRIVERID_PCF8583,
flags: I2C_DF_NOTIFY,
attach_adapter: pcf8583_probe, /* This will be called from i2c-core.c P.S see below function i2c_add_driver()*/
detach_client: pcf8583_detach,
command: pcf8583_command
};
Имя файла: drivers / i2c / i2c-core.c
int i2c_add_driver(struct i2c_driver *driver)
{
........................
........................
/* now look for instances of driver on our adapters
*/
if (driver->flags& (I2C_DF_NOTIFY|I2C_DF_DUMMY)) {
for (i=0;i<I2C_ADAP_MAX;i++)
if (adapters[i]!=NULL)
/* Ignore errors */
driver->attach_adapter(adapters[i]); /*This is a location from where probe is called. Pointer **driver** is of type **pcf8583_driver** which you have passed into this function*/
}
ADAP_UNLOCK();
return 0;
}
Несколько важных ссылок:
1) http://www.slideshare.net/varunmahajan06/i2c-subsystem-in-linux2624
2) http://www.programering.com/a/MjNwcTMwATM.html
3) http://www.linuxjournal.com/article/6717
4) http://www.developermemo.com/2943157/
5) http://free -electrons.com / doc / kernel-Architecture.pdf
6) http://www.techques.com/question/1-3014627/Probe-problem-when-writing-a-I2C-device-driver
В PCI для ядра-2.4.29 он вызывается при идентификации поставщика и идентификатора устройства. Драйвер шины PCI сделает это за вас. Пожалуйста, смотрите ниже код:
Имя файла: drivers / pci / pci.c
static int pci_announce_device(struct pci_driver *drv, struct pci_dev *dev)
{
const struct pci_device_id *id;
int ret = 0;
if (drv->id_table) {
id = pci_match_device(drv->id_table, dev); /* check for device presence*/
if (!id) {
ret = 0;
goto out;
}
} else
id = NULL;
dev_probe_lock();
if (drv->probe(dev, id) >= 0) { /* This is a location from where probe is called*/
dev->driver = drv;
ret = 1;
}
dev_probe_unlock();
out:
return ret;
}