Есть ли ресурсы для обучения написанию драйверов?


26

У меня приличный опыт проектирования аппаратных и встраиваемых систем в целом, но я никогда не писал драйвер для операционной системы.

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

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

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


1
Отличный вопрос, я тоже заинтересован в этом.
Ежик

Я принял самый широкий ответ. Для получения информации для каждой ОС мне понравился ответ. Ответ Джеби был отличным для Linux. Мне было трудно решить.
Кортук

Ответы:


10

Большая часть моего недавнего опыта написания реальных драйверов ОС была с 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». В противном случае, очень тщательно.
Кортук

11

Хороший драйвер инкапсулирует возможности оборудования и делает их доступными для ОС / приложений естественным образом.

Как лучше всего это сделать, во многом зависит от того, на какую операционную систему вы нацеливаетесь и для какого типа оборудования предназначен драйвер.

Мой опыт полностью связан с Linux и небольшими пользовательскими OSen в реальном времени.

Для Linux я бы рекомендовал прочитать Драйверы устройств Linux . Это дает хорошее представление о различных вариантах драйверов Linux и об абстракциях, которые предоставляет им операционная система.

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

Устройства с произвольным доступом, такие как флэш-память и жесткие диски, обрабатываются блочными устройствами. ddможет получить доступ к этим. Для хорошего примера взгляните на систему Linux MTD .

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

Драйверы, которые основаны на существующих общих драйверах, таких как USB, могут быть написаны в пользовательском пространстве. Используя, например, libusb .


4
Linux Device Drivers - хорошая книга. К сожалению, эти вещи сильно зависят от ОС. Linux, вероятно, проще всего написать, потому что в дереве исходных текстов уже так много драйверов для справки. Если вы написали встроенный код для управления периферийными устройствами микропроцессора, вы, вероятно, хорошо знакомы с основами драйверов устройств.
markrages

да, я удаляю свои комментарии. моя вина.
Кортук

1
Как упомянул Маркрагес, внутренности драйвера, который управляет фактическим оборудованием, будут одинаковыми, независимо от того, установлена ​​у вас ОС или нет. Основные различия при написании драйверов: 1) интерфейсы должны соответствовать стандартной модели (например, open, close, read, write, ioctl) для ОС, и 2) способу установки и активации драйвера.
tcrosley

1
@ tcrosley, если у вас есть много информации об этих особенностях, я хотел бы увидеть ответ об этом.
Кортук

3

У меня нет никакого опыта в этом вопросе, но я собираюсь дать свои два цента.

Вы можете начать здесь 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

Я надеюсь, что немного помог


Это очень поможет, если я задам вопрос: «Где я могу выучить португальский онлайн, чтобы научиться писать драйверы?» Спасибо за помощь.
Кортук

2
Не беспокойтесь об изучении португальского. Ссылки на развитие диска, которые я прошел, на английском языке. Даже DriveEntry написан на английском тоже. К сожалению, пост о книгах на португальском языке, но книги на английском языке. И что важнее всего, это книги, а не почта.
Даниэль Грилло
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.