Разработка драйверов без информации
Вопрос
Как сообщество открытого/свободного программного обеспечения разрабатывать драйверы для продуктов, не имеющих документации?
Решение
Как вы что-то реконструируете?
- Вы наблюдаете за вводом и выводом и разрабатываете набор правил или моделей, описывающих работу объекта.
Пример:
Допустим, вы хотите разработать драйвер USB-камеры.«Черный ящик» — это программный драйвер.
- Разработайте привязки к ОС и/или драйверу, чтобы вы могли видеть входные и выходные данные драйвера.
- Сгенерируйте типичные входные данные и запишите выходные данные.
- Проанализируйте выходные данные и синтезируйте модель, описывающую взаимосвязь между входными и выходными данными.
- Протестируйте модель — поставьте ее вместо драйвера черного ящика и запустите тесты.
- Если он делает все, что вам нужно, все готово, если нет, промойте и повторите.
Обратите внимание, что это всего лишь обычный научный процесс/решение проблем.Например, синоптики делают то же самое — они наблюдают за погодой, сравнивают текущие условия с моделью, которая предсказывает, что произойдет в ближайшие несколько дней, а затем сравнивают результаты модели с реальностью.Если оно не совпадает, они возвращаются и корректируют модель.
Этот метод немного безопаснее (юридически), чем реверс-инжиниринг в «чистой комнате», когда кто-то фактически декомпилирует код или дизассемблирует продукт, тщательно его анализирует и создает модель на основе увиденного.Тогда модель (И НИЧЕГО БОЛЬШЕ) передается разработчикам, тиражирующим функциональность продукта.Однако инженер, который разобрал оригинал, не может участвовать, поскольку он может принести части кода/проекта, защищенные авторским правом, и случайно поместить их в новый код.
Однако, если вы никогда не дизассемблируете и не декомпилируете продукт, вы должны оказаться в юридически безопасной зоне — единственной оставшейся проблемой являются патенты.
-Адам
Другие советы
Обычно путем обратного проектирования кода.Однако в некоторых странах могут возникнуть юридические проблемы.
Это довольно расплывчатый вопрос, но я бы сказал обратный инжиниринг.То, как они это сделают, зависит от того, что это за устройство и что для него доступно.Во многих случаях устройство может иметь набор микросхем, аналогичный другому устройству, который можно модифицировать для работы.