Ответ 1
Часть 1
В linux драйверы запускаются в пространстве ядра. И да, поскольку вы заявляете о существенных последствиях безопасности для этого. Большинство исключений в драйверах снимут ядро, потенциально поврежденную память ядра (со всеми возможными последствиями). Драйверы Buggy также влияют на безопасность системы, а вредоносные драйверы могут делать абсолютно все, что они хотят.
Тенденция, наблюдаемая в ядрах MacOSX и Window NT, - это драйверы пользовательского пространства. Microsoft в течение некоторого времени нажимает Windows Serverpace Driver Framework, а MacOSX уже давно предоставляет API-интерфейсы пользовательского пространства для драйверов Firewire и USB, а также совместимые с классом драйверы для многих USB-устройств периферийные устройства. довольно необычно устанавливать сторонние драйверы устройств режима ядра на MacOSX.
Возможно, плохая репутация Windows, используемая для паники ядра, может быть отнесена к драйверам режима (часто низкого качества), которые поставляются с примерно каждым мобильным телефоном, камерой и принтером.
Драйверы графической подсистемы Linux практически полностью реализованы в пользовательском пространстве с минимальной частью резидентности ядра, а Fuse позволяет реализовать системы регистрации в пользовательских пространствах, пространство.
Часть 2
USB, Firewire, MCI (а также PCI-e) имеют механизмы перечисления, через которые драйвер шины может соответствовать устройству драйверу. На практике это означает, что все устройства обнаруживают метаданные, описывающие, что они собой представляют.
В метаданных содержится идентификатор DeviceID, VendorID и описание функций, которые предоставляет устройство, и связанных с ним идентификаторов классов. ClassIDs облегчают общие драйверы классов.
Понятно, что операционная система попытается найти драйвер, который специально поддерживает VendorID и DeviceID, а затем вернется к той, которая поддерживает ClassID (ы).
Сравнение устройств с драйверами является основной концепцией в основе модели устройств Linux, а точные критерии соответствия, используемые для сопоставления, - это функция match()
на конкретной шине драйвер.
Как только драйверы устройств привязаны к устройству, он использует драйвер шины (или адресную информацию, предоставленную им) для выполнения чтения и записи. В случае PCI и Firewire это IP-адрес с отображением памяти. Для USB это информация о адресе шины.
Дерево документации Linux дает некоторое представление о дизайне модели устройств Linux, но на самом деле это не чтение начального уровня.
Я также рекомендую читать драйвер устройства Linux (3-е издание)