Почему прошивка и драйверы должны быть отдельными?

Почему прошивка и драйверы должны быть отдельными?

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

Вопрос в том, почему мы просто не можем объединить эти два слоя в один. Просто драйвер, который знает, как общаться с ОС и транслирует все запросы напрямую в низкоуровневые операции устройства. Это для простоты разработки (т. е. для сокращения знаний разработчика, необходимых для разработки этого программного обеспечения)? Разве невозможно общаться с устройством с помощью программного обеспечения, которое не находится во флэш-памяти?

решение1

Нет, оба типа программного обеспечения обычно работают на разных типах машин.

Прошивка работает на процессоре/контроллере периферийного устройства, драйвер работает на ЦП вашей машины. Обычно это даже разные типы.

В теории, одинмогпоручите ЦП вашего компьютера выполнять все битовые операции в периферийном устройстве. Это делалось в ранних компьютерах. Но это имеет высокую цену.

Часто внешний протокол включает жесткие временные ограничения (например, сетевая карта или дисплей CRT). Ваш процессор должен будет обрабатыватьмногопрерываний, чтобы работа была сделана в нужный момент. По этой причине на знаменитом Sinclair ZX-81 дисплей отключался, когда процессор выполнял тяжелую работу — не было времени на обновление экрана :)

Поэтому мы пытаемся сегодня разъединить работу периферийных устройств. ЦП будет получать уведомления, когда полная сетьпакетприбыл, и не нужно опрашивать провод для замены бит.

решение2

Прошивка работает на устройстве, используя аппаратное обеспечение устройства напрямую. Один из способов взглянуть на это так: прошивка — это API для ОС, неважно, какая ОС работает на компьютере, если он получает инструкцию x, то прошивка выполнит y и может вернуть значение z. Устройство будет иметь собственные часы, которые будут контролировать скорость выполнения инструкций, собственную память, а процессор на устройстве может отличаться от процессора компьютера, например, компьютер может быть amd64, но устройство имеет процессор arm64. Прошивка не взаимодействует с ЦП или оперативной памятью напрямую, она берет инструкции с шины и помещает данные обратно на шину.

Драйверы работают на компьютере либо на уровне ядра ОС, либо на уровне пользователя ОС, драйвер зависит от ОС и должен соответствовать требованиям ОС, чтобы иметь возможность функционировать. Драйвер обычно обрабатывает любую работу, которая требует ЦП и/или ОЗУ компьютера, после завершения обработки инструкции инструкция передается устройству через прошивку.

решение3

На самом деле, их не обязательно разделять.

Во многих случаях можно охватить весь спектр — от управления оборудованием непосредственно из центрального процессора до реализации максимально возможного объема функций в прошивке.

Вот неполный список конструктивных соображений, касающихся баланса прошивки и драйвера:

  1. Хотите ли вы использовать стандартный драйвер или интерфейс?

Конечно, можно создать USB-флеш-накопитель, который предоставит драйверу семантику NAND и сохранит микросхему контроллера. И как-то распространить ваш экзотический драйвер (для Windows, Linux, MAC, принтеров Konica и т. д. и т. п.). С другой стороны, пользователи и разработчики ОС ожидают, что USB-накопитель будет работать со стандартным драйвером блочного устройства. Оптическая мышь с интерфейсом не-HID? Тоже не очень хорошая идея.

  1. Обременены ли некоторые из Ваших функциональных возможностей патентами/NDA/коммерческой тайной?

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

  1. Соблюдение правил?

Многие прошивки, связанные с радиосвязью (Wi-Fi, сотовая связь, Bluetooth), обеспечивают соблюдение правил использования частотного спектра.

  1. Стоимость? Обычно существует оптимальная точка в отношении расходов на проектирование и производство.

и т.д., и т.п.

Вдобавок ко всему, существует довольно много устройств, в которых отсутствует ПЗУ, поэтому прошивка фактически является частью драйвера и загружается на устройство при каждом включении питания.

Связанный контент