Вопрос о драйверах устройств и ядре

#operating-system #device-driver

#операционная система #устройство-драйвер

Вопрос:

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

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

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

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

Ответ №1:

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

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

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

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

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

Комментарии:

1. Я готовил ответ, но, прочитав ваш, решил отозвать свой. Я считаю это завершенным.