2013-03-05 4 views
2

У меня есть основные понять следующее:Понимание драйверов устройств код с управлением commmentary

  • Как читать аппаратные устройства Паспорта
  • Как аппаратные устройства работают в теории
  • Что драйвер устройства делать
  • Общие понятия программирования C
  • Linux OS

Я всегда считал, что, если я могу понять весь код данного драйвера устройства и в конечном итоге написать тот же код с нуля, просто с помощью вышеизложенного (не глядя на исходный код), я смогу получить очень хорошо понимают язык C и как работают драйверы устройств и взаимодействуют с ОС. Для меня это было бы важной вехой в моей карьере.

Итак, за последние несколько лет я всегда думал научиться писать драйверы устройств (в основном для ОС Linux). Я всегда начинаю (это произошло не менее 6-7 раз) с большим энтузиазмом и выбираю несколько хороших онлайн-ресурсов и читаю их. Затем я беру существующий код драйвера из ядра Linux (скажем, код драйвера Ethernet), получаю таблицу данных и начинаю читать код драйвера, но после прочтения нескольких строк я немного запутался, а затем в конечном итоге сдался, потому что я не мог следовать остаток кода.

Вопрос: Я знаю, что такой учебник слишком хорош, чтобы быть правдой, но я все еще хочу спросить - знает ли кто-нибудь хороший ресурс, который объясняет, как был написан драйвер устройства Linux, начиная с подробных ссылок на лист данных и существующая строка кода, связанная с ней, а затем объясняя каждую функцию/блок кода, почему он существует и что он делает точно.

ответ

0

У меня такой же опыт, как и раньше, хотя я не могу сказать, что теперь я эксперт по ядерному оружию. Но я могу поделиться чем-то с тобой.

(1) Прежде чем приступить к изучению/разработке одного драйвера устройства Linux, нужно знать общие API-интерфейсы в ядре linux, связанные с конкретным драйвером устройства Linux. Как известно, разные драйверы устройств имеют совершенно другую реализацию и используют разные API.

(2) Есть хорошие книги для ознакомления с реализацией ядра и разработкой драйверов устройств; таких как: Understanding.the.Linux.Kernel.3rd.Edition; Linux.Kernel.Development.3rd.Edition; Linux.Device.Driver.Development.3rd.Edition;

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

2

Есть по крайней мере две хорошие книги по Linux Разработка драйверов устройств:

Я лично прочитал LDD3 и использовать его в качестве ссылки, но второй один тоже очень хорошо в соответствии с другими разработчиками коллег.

Когда (и если) вы читаете LDD3, он описывает все в хороших деталях и содержит фрагменты кода, следующие за процессом разработки, начиная с шага 1 и до конца. Однако книга не имеет полного кода (что, как хорошо, иначе оно раздувается), но я рекомендую вам скачать и посмотреть примеры.

Это, безусловно, не только поможет вам начать работу, вы сможете написать любое устройство. Будь то сетевой драйвер Ethernet, фантастическое расширение ядра для вашего специализированного пользовательского приложения или полностью развернутая стратегия обхода ядра с буферами DMA, отображаемыми в пользовательском пространстве.

Тем не менее, вы, вероятно, не сможете пошаговую историю о любом драйвере устройства реального мира. Это из-за нескольких вещей - намного сложнее написать такую ​​книгу, сложнее, чем написать сам драйвер. Скорее всего, он не будет хорошо продаваться из-за чрезвычайно специфичного устройства. Поэтому, когда речь идет о деталях, таких как работа с устройством DMA на каком-либо устройстве или Ethernet LSO, у вас будет либо опыт в этом, узнать какое-то существующее устройство и его драйвер, либо, по крайней мере, задать конкретные вопросы (здесь или где-то еще) ,

Я бы сказал, что самый прямой путь для вас, когда вы приходите к этому моменту, - это присоединиться к команде, которая делает именно это, работать в тесном контакте с людьми, постоянно получать больше опыта. До того дня, когда вы сможете сесть, вытащите свой сетевой адаптер 10G с полки, сядьте и напишите драйвер промышленного класса (ну или пока ваши интересы не изменятся).

Вы также можете попробовать некоторые проекты с открытым исходным кодом. Например, взгляните на PF_RING DNA или аналогичные проекты. Это очень интересно, потому что вы можете взять существующие драйверы и внести некоторые корректировки, чтобы он работал с инфраструктурой PF_RING. В моем личном мнении, хотя проекты с открытым исходным кодом, как правило, немного менее эффективны в обучении и помогают вам получить реальный опыт, полезный, потому что там люди не сидят рядом с вами и т. Д.

Итак ... просто сделай это!