Я новичок, и я пытаюсь понять концепцию стека драйверов устройства? Я знаю, что стек драйвера устройства имеет три уровня: драйвер низкого уровня, диспетчер шины и драйвер высокого уровня. Мой вопрос в том, существуют ли отдельные коды для драйвера низкого уровня и диспетчера автобусов? Если они существуют, где я могу найти драйверы низкого уровня для аппаратных контроллеров в файловой системе Linux? Спасибо.стек драйвера устройства
ответ
Ядро Linux имеет три уровня драйверов устройств, которые хранятся для большей части системы драйверов устройства в ядре. Драйвер шины, драйвер протокола и драйвер устройства. Возьмем в качестве примера устройство SPI, которое вы хотите написать драйверу (например, какой-то датчик). Обычно вы будете писать драйвер, используя лист данных устройства, чтобы узнать, как он работает и какие регистры содержат информацию. Это делается в драйвере устройства.
Драйвер устройства отправляет команды в драйвер протокола, который в основном определяет, как выглядит команда SPI (как вам нужно заполнить структуру данных для чтения/записи регистра устройства).
Обычно соединение SPI между вашим SOC и датчиком осуществляется через специальное оборудование внутри SOC для отправки команд SPI. Это водитель автобуса. Так что у вас есть что-то вроде этого в программном обеспечении: device_driver < -> protocol_driver < -> bus_driver
в аппаратных средствах это выглядит следующим образом: SOC_SPI_module < -> Датчик
Идея заключается в том, чтобы инкапсулирования модуль SOC SPI из драйвера устройства, поэтому, когда вы программируете драйвер устройства, вам не нужно заботиться о SOC, который вы используете для доступа к вашему устройству.
Надеюсь, я был в состоянии помочь вам.
В драйвере Linux-устройств это объектно-ориентированное программирование на языке C в целом. В этом мы имеем на более широкой точки зрения «module_init» как конструктор & «module_exit» как деструктора.
В соответствии с моей точкой зрения как «INIT & выхода» процесса взаимодействует с аппаратными средствами контроллера устройства таким образом, что можно назвать как «драйвер нижнего уровня» . После того, как управление проходит через «файловые операции & рабочих процессов драйвера», как «Менеджер шины, или Process Manager» пользователь через контрольный «процесс IOCTL» «драйвер высокого уровня», как.
Если пользователь должен взаимодействовать с устройством, то "процесс IOCTL" < -> "Файловые операции" < -> "module_init & module_exit & частично файловых операций.".