Драйвер PCIe для Windows CE и Windows Desktop - PullRequest
32 голосов
/ 16 сентября 2011

Мне нужен небольшой совет для разработки собственного драйвера PCIe. Драйвер должен поддерживать Windows CE 6.0 и Windows Desktop (xp, 7 и 8, когда он будет готов).

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

1) Используйте существующую структуру драйверов, такую ​​как Jungo WinDriver, которая позволяет нам один раз разработать драйвер и скомпилировать его для нескольких платформ. Это также имеет то преимущество, что большая часть разработки будет осуществляться в пользовательском пространстве, поэтому это должно упростить процесс разработки.

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

Каковы будут преимущества и недостатки каждого варианта? Вы бы порекомендовали альтернативные подходы?

Ответы [ 2 ]

2 голосов
/ 22 октября 2012

Как я и просил некоторое время назад, я постараюсь поделиться своим опытом сейчас, более чем через год после того, как я задал оригинальный вопрос. Мы решили использовать Windriver, но до сих пор мы написали только драйвер для Windows CE 6.0, поэтому я не могу комментировать межплатформенную поддержку.

Использование Windriver в Windows CE 6.0 имеет как преимущества, так и недостатки. Это означает, что весь наш код драйвера теперь находится в библиотеке, поэтому его было легче разрабатывать и отлаживать (по сравнению со стандартным драйвером, который требует Platform Builder). Так что с точки зрения разработки это было приятно. Производительность тоже была в порядке. В начале работы с API-интерфейсом Windriver и его использованием были некоторые трудности, особенно с DMA и прерываниями, но я не думаю, что это было хуже, чем изучение сырого Windows CE 6.0 PCI API.

Единственный реальный недостаток, о котором я могу думать, это то, что «реальный» драйвер легче разделить между несколькими процессами, чем библиотека, которую мы создали с помощью Windriver. В нашем приложении (встроенная система с одним процессом) на самом деле это не проблема, но сложнее создать утилиты отладки / разработки, которые работают на оборудовании позади основного процесса. Мы использовали этот подход для тестирования / отладки на других платформах, но здесь это немного сложнее.

Подводя итог, я думаю, что мы сделали правильный выбор, и я рад, что у нас есть возможность перенести наш "драйвер" на рабочий стол Windows с (надеюсь) очень небольшими усилиями, когда нам это нужно.

1 голос
/ 13 октября 2012

Используя Windriver для разработки драйверов для Windows / Linux, я хочу ответить на этот вопрос.

Я предпочитаю Windriver, если приложение, которое использует драйвер, также будет написано вами. Поскольку вы упоминаете, что разрабатываете собственный драйвер, я предполагаю, что вы собираетесь написать приложение также самостоятельно. В этом случае приложение не должно сильно меняться между окнами и Windows CE, так как большинство функций драйвера будут сгенерированы самим Windriver. Это похоже на вызов стандартных библиотечных функций, в отличие от использования IOCTL и т. Д.

В прошлом я использовал windriver для генерации базового кода интерфейса драйвера и разрабатывал приложения (в основном диагностические), в которых используется код, сгенерированный windriver. С небольшими изменениями мы смогли использовать драйвер и приложение между окнами и Linux. Я не сторонник использования Jungo, но его было легко использовать.

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

...