У меня приличный опыт проектирования аппаратных и встраиваемых систем в целом, но я никогда не писал драйвер для операционной системы.
Я хотел бы знать, есть ли какие-нибудь хорошие руководства, желательно онлайн, хотя хорошие книги заинтересуют меня, которые дадут мне хорошее представление о том, что мне нужно знать для разработки и реализации драйверов для операционной системы.
Это, вероятно, заставит людей стрелять в меня, и хотя я хотел бы видеть хорошее руководство, независимо от того, на какой ОС оно основано, я хотел бы видеть руководство на основе Windows, в основном из-за того, что большинство людей Я бы продал товар, имел бы окна.
Пожалуйста, дайте мне знать, если есть какая-либо дополнительная информация, которую я могу добавить, чтобы сделать это более ясным.
Ответы:
Большая часть моего недавнего опыта написания реальных драйверов ОС была с Linux, и лучшим справочным ИМО являются Linux Device Drivers, 3-е издание Джонатана Корбета, Алессандро Рубини и Грега Кроа-Хартмана (2005), о котором уже упоминалось. Он доступен на Amazon , Safari Books On-Line , а также для бесплатной загрузки .
Еще пара книг на эту тему - Essential Linux Device Drivers , автор Sreekrishnan Venkateswaran (2008) (также доступный в Safari Books Online ) и Написание драйверов устройств Linux: руководство с упражнениями (Том 3) от Dr Jerry Cooperstein (2009).
Что касается драйверов устройств Windows, последняя книга по этой теме (опубликованная две недели назад), по-видимому, называется «Драйвер устройства Windows 7 » Рональда Д. Ривза, доктора философии. (2010). Он также доступен в Safari Books Online .
Более старая книга, которая будет посвящена Windows XP, называется: « Программирование модели драйвера Microsoft Windows, второе издание» , Уолтер Оней (2002). Он также доступен в Safari Books Online .
Еще одна книга, которая, как представляется, уже не печатается, но доступна в Safari Books Online, - « Разработка драйверов с помощью Windows Driver Foundation» , автор Penny Orwick and Guy Smith (2007). Я предполагаю, что это будет охватывать Windows Vista.
Наконец, у Microsoft есть ссылки на множество блогов и т. Д., В которых обсуждается разработка драйверов.
источник
Хороший драйвер инкапсулирует возможности оборудования и делает их доступными для ОС / приложений естественным образом.
Как лучше всего это сделать, во многом зависит от того, на какую операционную систему вы нацеливаетесь и для какого типа оборудования предназначен драйвер.
Мой опыт полностью связан с Linux и небольшими пользовательскими OSen в реальном времени.
Для Linux я бы рекомендовал прочитать Драйверы устройств Linux . Это дает хорошее представление о различных вариантах драйверов Linux и об абстракциях, которые предоставляет им операционная система.
Устройства, такие как последовательные порты, где данные считываются последовательно, обычно обрабатываются драйверами символьных устройств с узлом устройства в пользовательском пространстве для чтения приложениями.
cat
можно читать из них.Устройства с произвольным доступом, такие как флэш-память и жесткие диски, обрабатываются блочными устройствами.
dd
может получить доступ к этим. Для хорошего примера взгляните на систему Linux MTD .Драйверы, которые занимаются аппаратными средствами низкого уровня, почти наверняка должны быть реализованы в пространстве ядра. Вы можете сделать загружаемый модуль ядра во время выполнения или статически разместить свой код в ядре Linux.
Драйверы, которые основаны на существующих общих драйверах, таких как USB, могут быть написаны в пользовательском пространстве. Используя, например, libusb .
источник
У меня нет никакого опыта в этом вопросе, но я собираюсь дать свои два цента.
Вы можете начать здесь http://www.osr.com/index.html или здесь https://www.osronline.com/index.cfm
Здесь, в Бразилии, у нас есть хороший блог об этой проблеме. Он написан на португальском и английском языках. К сожалению, большинство статей на португальском языке.
В этом блоге есть пост на португальском языке о книгах: http://translate.google.com.br/translate?hl=pt-BR&ie=UTF-8&sl=pt&tl=en&u=http://driverentry.com.br/ блог /% 3Fp% 3D825 & TWU = 1
Я надеюсь, что немного помог
источник