Навчання розробці драйверів Linux за допомогою Raspberry Pi


13

Я хотів би написати драйвер пристрою Linux для реального апаратного пристрою. Які периферійні пристрої Raspberry Pi добре підходять? В основному мені потрібно наступне:

  1. Він повинен бути досить маленьким для початківця (максимум кілька місяців, краще кілька тижнів).

  2. Таблиця даних повинна бути доступною. Спочатку я думав про USB-Ethernet-адаптер, але схоже, що у нього дуже обмежена таблиця даних.

Будь-які ідеї? Може бути щось на кшталт того, щоб змусити серійну консоль працювати над GPIO?


2
Драйвери Linux - це модулі ядра, а технічно вони взагалі не мають нічого спільного з обладнанням, тому перше, що ви хочете спробувати, - це, мабуть, інтерфейс пристрою char, тобто щось, що забезпечує файл пристрою char, який може читати з та / або писати в (так само, як і матеріали в прок) для якоїсь тривіальної мети.
goldilocks

Я все це робив, завершував підручники і писав модулі ядра для псевдо-пристроїв, а також читав книги з розробки ядра / драйвера. Це все добре, але тепер я хочу працювати з реальним обладнанням ..
ivan

Грег КХ написав це ще раз (можливо, дещо застаріло в деяких відношеннях): linuxjournal.com/article/7353 Отож, є USB-пристрої з загальнодоступними таблицями даних. У нього є кілька зворотних технічних порад (я не хотів би робити це з чим-небудь занадто складним Тхо). Що стосується штифтів GPIO, я б здогадувався, як правило, працюють з існуючими драйверами I2C тощо, але ви можете просто проігнорувати це і зробити щось самостійно.
goldilocks

Відповіді:


4

Дізнатися, як писати драйвери, може бути важко при взаємодії зі складними пристроями та / або складними шинами. Через це я б рекомендував або використовувати деякі прості і добре відомі пристрої (ігноруючи існуючу реалізацію їх драйверів у ядрі), наприклад пристрої I²C / SPI, які зазвичай використовуються з мікроконтролерами. Наприклад, ви можете знайти будь-який пристрій, який "підтримується" спільнотою Arduino (мається на увазі, що на нього є бібліотека / документація) і спробувати використовувати його з RaspberryPi.

Якщо цього недостатньо або ви не хочете купувати занадто багато обладнання, можете створити його самостійно. Просто знайдіть якийсь мікроконтролер (наприклад, атмега чи щось подібне), створіть програму, щоб він став деяким пристроєм, а потім спробуйте взаємодіяти з ним за допомогою драйверів Linux. Таким чином ви можете легко створювати програми, які будуть імітувати різні класи пристроїв. А оскільки ви самі будете писати свою «прошивку», це допоможе вам налагодити проблеми.

Для цього вам потрібні деякі навички програмування мікроконтролерів, але навчитися програмуванню з Arduino важко, і я вважаю, що це корисні знання для програміста-драйвера.


Як щодо впровадження послідовного зв’язку в програмне забезпечення через штифти GPIO? Наприклад, підключіть серійний ПК до ПК і спробуйте принаймні вивести щось на консоль. Це життєздатно?
ivan

@ivan: Я не впевнений, чи зрозумів це правильно. Якщо під серійним способом ви маєте на увазі UART / rs232, а під програмним забезпеченням - ви маєте на увазі бітбанг, це неможливо через обмеження часу. Якщо, з іншого боку, ви маєте на увазі (повторно) впровадження послідовного пристрою Linux за допомогою апаратного забезпечення RaspberryPi UART, то, звичайно, це можливо. Я вірю, що всю інформацію, необхідну щодо цього обладнання, можна знайти в BCM2835 ARM Peripheralsдокументі. Але пам’ятайте, що для того, щоб ним скористатися, спочатку потрібно відключити наявний драйвер у ядрі.
Кшиштоф Адамський

Дякую, але ви впевнені в неможливості розбиття бітів UART? Я знайшов це посилання: ganssle.com/articles/auart.htm, тому це виглядає потенційно придатним для низької швидкості передачі даних і принаймні лише для реалізації частини відправки (що простіше).
ivan

@ivan: Ця стаття, здається, не стосується систем із операційними системами загального призначення, такими як Linux. У UART у вас є реальні суворі обмеження в часі, які дуже важко виконати без операційної системи в режимі реального часу. При цьому, можливо, це можна зробити при низькій боудраті, але це може бути не дуже надійно.
Кшиштоф Адамський

Схоже, ви маєте рацію: raspberrypi.stackexchange.com/questions/1987/… (проте там є цікаве рішення). Ще раз дякую за вашу допомогу.
Іван

3

Особисто я почав би з дуже простого пристрою, наприклад, одного або декількох світлодіодів, підключених безпосередньо до шпильок GPIO.

Ви можете або придбати пристрій, готовий до підключення, або підключити власний.

Причиною цього я вважаю, що налагодження драйверів, як правило, набагато складніше, ніж звичайна програма, тому корисна проста проблема для початку, також ви можете використовувати цей код як метод налагодження для більш складних пристроїв (статус вимкнено штифт GPIO для приєднання до осцилографа), де важливі терміни.

Якщо інтерес є драйвер ядра для LedBorg доступні тут , джерело повинен бути досить простий приклад для водіння GPIO шпильки через регулярні проміжки часу.


Привіт @PiBorg. ви можете сказати деякі ресурси, які допомагають мені навчитися кодувати простий драйвер для пристрою, такого як один або кілька світлодіодів, підключених безпосередньо до штифтів GPIO?
Сагар

0

Найпростіший "пристрій", на який можна написати драйвер апаратного забезпечення (якщо розробка драйверів апаратних засобів - це ваша річ), може бути таким же простим, як світлодіод (я додав лапки, оскільки технічно світлодіод - це не пристрій, але він все ще є частиною апаратне забезпечення), як запропонував @PiBorg.

Іншим вибором можуть бути такі прості в інтерфейсі пристрої / компоненти, як фоторезистори, пасивні інфрачервоні датчики (короткі: PIR), температурні датчики, вентилятори ПК (бажано, 4-провідний вентилятор, який дозволяє не тільки контролювати, але і керувати RPM), світлодіодні крапкові матриці тощо. В основному такі прості пристрої дозволять вам мати мінімум на апаратному забезпеченні (щоб ви могли бачити і торкатися того, що ви насправді досягли), і в той же час ви можете дізнатися про безліч тем, які використовуються для набагато складніших пристроїв, де складність здебільшого пов'язана з протоколом, який вони використовують.

Зверніть увагу і на те, що не потрібно зайву милю, копаючи модулі ядра. Звичайно, якщо ти хочеш це зробити, ніхто тебе не зупиняє. :)

Ось приклад взаємодії пасивного інфрачервоного датчика (я збираюся перевірити його незабаром, коли мій PIR буде доставлений: 3). Ви можете взяти це і почати копати глибше у світ ядра Linux, щоб побачити, як можна, наприклад, створити драйвер ядра, який працює з PIR.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.