что такое ядро драйвера ??
Обратите внимание на следующий поток вызовов в исходном коде Linux.
tps65086_regulator_probe ---> devm_regulator_register -> Regulator_register -> device_register (/drivers/regulator/tps65086-regulator.c ---> / drivers / Regulator / core.c- -> drivers / base / core.c).
tps65086 драйвер вызывает ядро регулятора, которое, в свою очередь, вызывает ядро драйвера. Этот драйвер соответствует стандартной модели драйвера.
include / linux / device.h ----> здесь определены объекты модели драйвера.
drivers / base / -> Здесь определены все функции, которые работают с объектами модели драйвера.
мы можем называть это драйвером core и является базой для любого драйвера. Каркасная работа. Все регистрации приходят сюда с более высоких уровней. На этом основана любая подсистема драйверов ..weather PCI / USB / Platform.
drivers / base / core.c - это основной файл стандартной модели драйвера.
Небольшая путаница в именах - Однако мы можем сослаться на drivers / base / - как ядро драйвера.
Какая-либо разница между драйвером персонажа и другим драйвером ??
/drivers/char/tlclk.c tlclk_init -> register_chrdev -> register_chrdev -> cdev_add -> kobj_map (fs / char_dev.c ---> /drivers/base/map.c).
символ регистрация устройства выполняется с помощью char_dev, драйвера файловой системы, который снова использует инфраструктуру базы моделей драйверов.
whare как несимвольный драйвер, например tps65086-Regulator.c, может быть зарегистрирован в ядре драйвера, как показано ниже. tps65086_regulator_probe ---> devm_regulator_register -> Regulator_register -> device_register -> device_add -> kobject_add (/drivers/regulator/tps65086-regulator.c ---> / drivers / Regulator / core.c ---> драйверы /base/core.c)
Кроме того, это зависит не только от типа драйвера, но и от того, что это за устройство и как с ним нужно обращаться. Вот драйвер pci, который регистрирует символьное устройство. tw_probe -> register_chrdev -> cdev_add -> kobj_map (/drivers/scsi/3w-xxxx.c -> fs / char_dev.c ---> /drivers/base/map.c)
Не существует стандартного правила, должен ли драйвер вызывать ядро драйвера или нет.
Любой стек / фреймворк может иметь собственное ядро для управления устройством, как в случае с драйвером mlx5_ib (drivers / infiniband / core /). < br> Но, наконец, в основном он будет использовать инфраструктуру Kobject и объекты модели драйвера, такие как struct device.
Инфраструктура модели драйвера введена для устранения избыточного кода ядра и структур данных.
поэтому большинство драйверов основаны на этом, и это эффективный способ написания драйвера для Linux.
person
sudheer
schedule
15.06.2018