#operating-system #device-driver
#операционная система #устройство-драйвер
Вопрос:
В настоящее время моя ОС загружается с дискеты. Поскольку драйвер дискеты устарел, я планирую сменить загрузочный носитель.
Когда я пытаюсь выяснить, какой загрузочный носитель использовать, я понимаю, что независимо от того, что я выберу, мне нужно написать драйвер устройства для этого. Хотя BIOS реального режима может предоставлять мне некоторые прерывания для взаимодействия с этим устройством, я предоставлен сам себе, как только вошел в защищенный режим. Итак, я начинаю читать <Драйвер устройства Linux 3rd edition> для получения некоторого руководства. Но эта книга о написании драйвера устройства для системы Linux. Итак, это подразумевает, что драйверы устройств специфичны для операционной системы.
Теперь у меня возникли следующие вопросы:
- В каких аспектах драйвер устройства зависит от операционной системы?
- Как операционная система и драйверы устройств размещены в памяти?
- Как операционная система и драйверы устройств взаимодействуют друг с другом?
- Если я подключаю устройство «горячим» способом, как операционная система узнает, где найти нужный драйвер устройства?
Ответ №1:
Драйвер устройства — это фрагмент кода, который реализует интерфейс между устройством и (обычно) ядром операционной системы. В этом отношении это обязательно зависит от операционной системы, для которой оно предназначено — это основная цель, сделать эту операционную систему осведомленной об устройстве и позволить ей использовать его функции.
Это не означает, что код для драйвера устройства не может использоваться совместно в разных операционных системах. Некоторые их части могут быть переносимыми (на стороне устройства), но интерфейсная сторона (которая взаимодействует с ОС) зависит от API, который определяет / предоставляет ОС.
Расположение в памяти полностью зависит от системы. Не обязательно должны быть какие-либо конкретные политики расположения памяти для драйверов по сравнению с другими службами ядра. Само устройство вполне может накладывать ограничения на расположение памяти, но это уже другая тема.
Операционная система определяет, как она взаимодействует с драйверами устройств через API. У вас есть документация о том, как Linux это делает, в той (отличной) книге. Другие операционные системы могли бы сделать это по-другому — разработчики ОС устанавливают правила. Если вы тот, кто создает ядро, вы определяете API.
«Горячее подключение» непросто. Один из способов выполнения сопоставления — использовать некоторую форму таблицы подстановки с информацией с устройства в качестве «ключа» и подходящей структурой драйвера устройства / указателем / чем угодно в качестве значения или наоборот (наличие API в ваших драйверах, который позволяет вам знать, какие идентификаторы устройств могут обрабатываться). Идентификаторами устройств могут быть идентификаторы устройств PCI, идентификаторы USB, … зависит от шины и типа устройства.
Комментарии:
1. Я готовил ответ, но, прочитав ваш, решил отозвать свой. Я считаю это завершенным.