Создание драйверов и прошивок - PullRequest
1 голос
/ 25 июня 2010

Если бы мне сказали, что мне нужно создать драйвер для какого-либо продукта (скажем, игрового контроллера), как бы я его создал?Это то, что вы могли бы нормально делать в C / C ++?

А как насчет прошивки для внешнего устройства для подключения к USB?Как это обычно создается?Это также делается на C / C ++ или каком-либо языке более низкого уровня?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 25 июня 2010

Драйверы устройств для операционных систем настольных компьютеров обычно написаны на C или C ++.Операционная система, на которую вы нацеливаетесь, будет иметь какую-то форму среды разработки или драйвера устройства.Зачастую эти комплекты разработки можно получить бесплатно.

Существуют книги, доступные для Windows, Linux и MacOS X (и другие), в которых подробно описан процесс создания драйвера устройства.

Есливаш драйвер связан с устройством на определенной аппаратной шине (PCI, PCI-X, USB, SCSI, SATA и т. д.), вы также можете получить книги по этой конкретной технологии.Понимание этой аппаратной системы может значительно облегчить проектирование вашего драйвера.

Еще один хороший ресурс - это открытый исходный код, аналогичный вашим устройствам.Вы можете получить это из источника ядра Linux или источника FreeBSD и изучить, как реализованы определенные аспекты устройства вашего типа.

РЕДАКТИРОВАТЬ: Я почти забыл упомянуть, что вам также понадобятся таблицы данных, схемы и /или теория работы информации о самом устройстве.

1 голос
/ 25 июня 2010

Я добавлю к хорошему ответу Амардипа следующие книги, которые помогут вам подумать о работе драйверов контекстных устройств и их структуре:

Linux: http://www.amazon.com/Understanding-Linux-Kernel-Third-Daniel/dp/0596005652

Windows: http://www.amazon.com/Programming-Microsoft-Windows-Driver-Model/dp/0735618038/ref=sr_1_1?ie=UTF8&s=books&qid=1277439434&sr=1-1

Mac OS: http://www.amazon.com/Mac-OS-Internals-Systems-Approach/dp/0321278542/ref=sr_1_1?ie=UTF8&s=books&qid=1277439467&sr=1-1

1 голос
/ 25 июня 2010

Вы делаете это на любом языке, который может общаться с интерфейсом. Если для этого требуются прямые порты или адреса, тогда вы используете ассемблер или C. Если есть интерфейс более высокого уровня, такой как libusb, вы можете использовать практически любой язык, который вам нравится.

...