Як розпочати писати драйвери пристроїв? [зачинено]


75

Я хотів би навчитися писати драйвери пристроїв, бо, думаю, це було б цікаво. Я використовую Mac OS X Macbook, але у мене також є машина Ubuntu (працює на Mac Min). Я досить добре знайомий з C і зараз читаю цю книгу . Я знайшов кілька посилань в Інтернеті, таких як Mac Dev Center . Я роблю це, тому що це було б весело. Я думаю, було б справжнє задоволення бачити, як апаратне забезпечення працює через програмне забезпечення, яке я написав.

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


1
Оскільки ви згадали як OS X, так і Linux , для якої ОС будуть призначені ці драйвери пристроїв?
jschmier

Будь-який, думаю, я віддав би перевагу OS X, оскільки саме цим ноутбуком я користуюся.
Бьорн,

2
"пристрої, які не мають драйверів ..." Будь-який такий пристрій не можна використовувати! Виробник пристрою має створити драйвер, або ж вони не можуть продавати свою продукцію. Сказавши це, є кілька дуже і дуже простих пристроїв.
jpaugh

eudyptula-challenge.org та github.com/agelastic/eudyptula (readme має завдання, не дивіться негайно на рішення;))
sjas

1
@jpaugh "У багатьох випадках пристрій розроблено відповідно до опублікованого апаратного стандарту. Це означає, що драйвер може писати Microsoft, а конструктор пристрою не повинен надавати драйвер". з docs.miscrosoft.com
Елісей Хабінський

Відповіді:


38

Для Linux ви можете взяти книгу O'Reilly Linux Drivers Device або прочитати PDF-файли Інтернеті. На мою думку, це один із кращих текстів на цю тему.

Посібник із програмування модуля ядра Linux - ще один хороший ресурс.

Можливо, ви також захочете взяти книгу спеціально про ядро ​​Linux. Для цього я взяв копію Розробки ядра Linux Роберта Лава (2-е видання) ( 3-е видання в дорозі).


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

1
Складність та обсяг роботи залежать від складності пристрою. Термінал Драйвер пристрою може бути значно легшим , ніж USB або PCI драйвера пристрою.
jschmier

5
Для початку напишіть спочатку модуль ядра як драйвер. Основна програма привіт світу. та вставляючи у ваш Ubuntu / mac. Перегляньте журнали ядра та зрозумійте, що відбувається. Потім спробуйте зареєструвати фіктивний драйвер на такій шині, як (PCI або USB), а потім перейдіть до додавання інших функцій, таких як читання, запис та виклики IOCTL. Нарешті можна перейти до реалізації більш складних викликів гачків управління живленням, сну, вимкнення. Крім того, якщо ви працюєте над вбудованими драйверами платформ та DMA, це також цікаве читання.
Аніруд,

33

Написання драйвера пристрою може бути досить простим або майже довільно складним. Наприклад, я брав участь у проекті, де шість з нас зайняли майже три роки, щоб вирішити ОДНУ помилку у драйвері пристрою. Звичайно, ми усунули десятки інших помилок під час його пошуку ... код надзвичайно покращився. Виправлення виявилось вісьморядковим патчем, який, консервативно, коштував близько мільйона доларів.

Але, як допоміжний проект до цього, я написав драйвер Ethernet з технічного опису мікросхеми за тиждень, і знадобився ще тиждень, щоб налагодити його. Відтоді не потрібно його чіпати.

Неможливо сказати загалом, скільки роботи буде у водія; драйвер графічного процесора може коштувати сотні мільйонів, драйвер для одного світлодіода коштує максимум пару годин роботи.


12
Чи можете ви поділитися деякими деталями. Хотілося б зрозуміти патч і чому його було так важко налагоджувати. Якого класу пристроїв був драйвер?
Аніруд,

6

Якщо ви хочете піти на розробку драйверів пристроїв для Linux, вільно доступна книга O'Reilly Book Drivers для пристроїв Linux, третє видання обов’язково прочитайте .

Щоб знайти непідтримувані частини апаратного забезпечення, для яких ви можете написати драйвер, запитайте у списках розсилки Linux . Можливо, якийсь пристрій USB 3.0? ;)


Дякую! Скільки роботи над написанням драйвера пристрою? Це більш-менш робота, ніж написання великої складної програми?
Бьорн,

2

Для Mac ви можете поглянути на книгу Mac OS X Internals . Це думає і важко, але цікаво читати. В основному мова йде про Mac на базі PowerPC, але є додаток про Mac на базі Intel. Для Linux подивіться на Драйвери пристроїв Linux, 3-е видання - він легший (безкоштовні PDF-файли в Інтернеті :) і насправді орієнтований на драйвери пристроїв, може бути кращим початком.


Дякую! Скільки роботи над написанням драйвера пристрою? Це більш-менш робота, ніж написання великої складної програми?
Бьорн,

2
Хм, в обох випадках вам потрібно знати, що ви робите, тому ви повинні розуміти навколишнє середовище, і це випливає з досвіду, якого ви не отримуєте, поки не спробуєте :) Попрацюйте кілька прикладів з LDDv3, вихідного коду в Інтернеті, але трохи застарілий для поточних ядер, ви отримаєте відчуття того, про що йдеться, і про що ви хочете дізнатися далі.
Микола Фетисов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.