Вопрос о драйверах устройств и ядре - PullRequest
0 голосов
/ 01 мая 2011

В настоящее время моя ОС загружается с дискеты. Поскольку драйвер флоппи-диска устарел, я планирую изменить загрузочный носитель.

Когда я пытаюсь выяснить, какой загрузочный носитель использовать, я понимаю, что независимо от того, что я выбрал, мне нужно написать для него драйвер устройства. Хотя BIOS реального режима может предоставить мне некоторые прерывания для взаимодействия с этим устройством, я однажды сам вошел в защищенный режим. Итак, я начинаю читать для некоторого руководства. Но эта книга о написании драйвера устройства для системы Linux . Таким образом, это означает, что драйверы устройств являются специфическими для операционной системы.

Теперь у меня появились следующие вопросы:

  • В каких аспектах драйвер устройства зависит от операционной системы?
  • Как операционная система и драйверы устройств расположены в памяти?
  • Как взаимодействуют операционная система и драйверы устройств?
  • Если я оперативно подключаю устройство, как операционная система узнает, где найти подходящий драйвер устройства?

1 Ответ

3 голосов
/ 01 мая 2011

Драйвер устройства - это фрагмент кода, который реализует интерфейс между устройством и (обычно) ядром операционной системы. В связи с этим оно обязательно зависит от операционной системы, для которой оно предназначено - это является основной целью, чтобы эта операционная система знала об устройстве и позволяла ему использовать его функции.

Это не означает, что код для драйвера устройства не может быть общим в разных ОС. Некоторые их части могут быть переносимыми (сторона устройства), но сторона интерфейса (которая взаимодействует с ОС) зависит от API, который определяет / предоставляет ОС.

Расположение в памяти полностью зависит от системы. Не должно быть никаких особых политик расположения памяти для драйверов по сравнению с другими службами ядра. Само устройство вполне может накладывать ограничения на расположение памяти, но это уже другая тема.

ОС определяет, как она взаимодействует с драйверами устройств через API. У вас есть документация о том, как Linux делает это в этой (замечательной) книге. Другие ОС могут сделать это по-другому - разработчики ОС устанавливают правила. Если вы создаете ядро, вы определяете API.

Горячая замена не легка. Один из способов сопоставления состоит в том, чтобы использовать некоторую форму справочной таблицы с информацией от устройства в качестве «ключа» и подходящей структурой / указателем драйвера устройства / любым другим в качестве значения, или наоборот (с API в ваших драйверах). это позволяет узнать, какие идентификаторы устройств могут обрабатывать). Идентификаторы устройств могут быть идентификаторами устройств PCI, USB-идентификаторами, ... в зависимости от шины и типа устройства.

...