Подтвердить что ты не робот

Драйвер PCIe для Windows CE и Windows Desktop

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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