Я хотел бы написать драйвер устройства Linux для какого-то реального аппаратного устройства. Какие периферийные устройства Raspberry Pi хорошо подходят? В основном мне нужно следующее:
Он должен быть достаточно маленьким для начинающего (максимум несколько месяцев, лучше несколько недель).
Лист данных должен быть доступен. Сначала я думал об адаптере USB-Ethernet, но похоже, что он имеет очень ограниченную таблицу данных.
Есть идеи? Может быть что-то вроде того, чтобы заставить последовательную консоль работать над GPIO?
Ответы:
Может быть трудно научиться писать драйверы при взаимодействии со сложными устройствами и / или сложными автобусами. По этой причине я бы рекомендовал использовать несколько простых и хорошо известных устройств (игнорируя существующую реализацию их драйверов в ядре), таких как устройства I²C / SPI, которые обычно используются с микроконтроллерами. Например, вы можете найти любое устройство, которое «поддерживается» сообществом Arduino (имеется в виду библиотека / документация для него) и попробовать использовать его с RaspberryPi.
Если этого недостаточно или вы не хотите покупать слишком много оборудования, вы можете создать его самостоятельно. Просто возьмите какой-нибудь микроконтроллер (например, atmega или что-то в этом роде), создайте программу, чтобы он стал каким-то устройством, а затем попробуйте подключиться к нему с помощью драйверов Linux. Таким образом, вы можете легко создавать программы, которые будут эмулировать устройства разных классов. А поскольку вы сами напишите свою «прошивку», это поможет вам решить проблемы.
Для этого вам понадобятся навыки программирования на микроконтроллере, но освоить программирование с помощью Arduino несложно, и я считаю, что это все равно полезно для программиста-водителя.
источник
BCM2835 ARM Peripherals
документе. Но помните, что для того, чтобы использовать его, сначала нужно отключить существующий драйвер в ядре.Лично я бы начал с очень простого устройства, такого как один или несколько светодиодов, подключенных непосредственно к выводам GPIO.
Вы можете купить устройство, готовое к подключению, или подключить собственное.
Причина, по которой я бы предложил, заключается в том, что отладка драйверов обычно намного сложнее, чем в обычной программе, поэтому простая задача для начала полезна, также вы можете использовать этот код в качестве метода отладки для более сложных устройств (от состояния до контакт GPIO для подключения к осциллографу), где важно время.
Если интерес есть драйвер ядра для LedBorg доступны здесь , источник должен быть достаточно простой пример для вождения GPIO булавки через регулярные промежутки времени.
источник
Простейшее «устройство», для которого вы можете написать аппаратный драйвер (если разработка аппаратного драйвера - ваша вещь) также может быть простым, как светодиод (я добавил кавычки, потому что технически светодиод не является устройством, но он все еще является частью оборудование), как предложил @PiBorg.
Другими вариантами выбора могут быть некоторые простые в интерфейсе устройства / компоненты, такие как фоторезисторы, пассивные инфракрасные датчики (сокращенно: PIR), датчики температуры, вентиляторы ПК (предпочтительно 4-проводный вентилятор, который позволяет не только контролировать, но и контролировать Об / мин), светодиодные точечные матрицы и тд. По сути, такие простые устройства позволят вам иметь минимум оборудования (чтобы вы могли увидеть и потрогать то, что вы на самом деле достигли), и в то же время вы можете узнать о многих темах, которые используются для гораздо более сложных устройств, где сложность проистекает главным образом из протокола, который они используют.
Помните также, что вам не нужно делать лишнюю милю, копаясь в модулях ядра. Конечно, если ты хочешь это сделать, тебя никто не остановит. :)
Вот пример сопряжения с пассивным инфракрасным датчиком (я собираюсь проверить его вскоре после того, как мой PIR будет доставлен: 3). Вы можете взять это и начать углубляться в мир ядра Linux, чтобы увидеть, как, например, вы можете создать драйвер ядра, который работает с PIR.
источник