2010-04-21 3 views
21

Недавно я начал разработку драйвера встроенного устройства, работающего под управлением Linux.Новое для Linux Kernel/Разработка драйверов

До сих пор у меня есть только о внутреннем интерфейсе linux.
Не имея предыдущего опыта в разработке драйверов, я нахожу, что мне трудно сделать первый шаг.

  • Я загрузил исходный код ядра (v2.6.32).
  • Я прочитал (skimped) Драйверы устройств Linux (3e)
  • Я прочитал несколько связанных должностей здесь, в StackOverflow.
  • Я понимаю, что linux имеет «монолитный» подход.
  • Я построил ядро ​​(включая существующий драйвер в менюconfig и т. Д.)
  • Я знаю основы файлов kconfig и makefile, поэтому это не должно быть проблемой.

Может кто-то описать структуру (то есть интер-ссылка)
различных каталогов в ядрах исходного кода.

Другими словами, учитывая исходный код файла,
, какие другие файлы будут ссылаться на него для соответствующего кода

(В «#include» -s обеспечивают частичную идею)

Не мог бы кто-нибудь помочь мне в получении лучшей идеи?
Любая помощь будет принята с благодарностью

Thank you.

+0

Это должно очистить его. http://www.youtube.com/watch?v=ENNKtfR2PYc –

+0

Напишите простой модуль Hello World для ядра. Затем, как только вы поймете модуль Hello World Kernel Module , напишите об этом http://www.freesoftwaremagazine.com/articles/drivers_linux и протестируйте его. Заполните вышеуказанную ссылку, пока не поймете. , а также читать два моих сообщения здесь http://mail.nl.linux.org/kernelnewbies/2010-09/ Я буквально сражался на форуме, чтобы понять, как это работает. Итак, вы должны сделать то же самое. Независимо от того, что кто-то говорит, сражайтесь, пока вы не поймете. Лучший способ узнать - подобрать проект и начать работать в конце, вы получите много. Например, решите исправить –

+0

ошибка для беспроводного драйвера в ядре. Я знаю, что на этом этапе это звучит, но нужно преследовать его, пока не сделаете это. В конце вы сможете это сделать. –

ответ

18

Учитывая файл C, вы должны посмотреть на функции, которые он вызывает, и структуры данных, которые он использует, а не беспокоиться о конкретных файлах.

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

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

Файлы, составляющие ваш драйвер, будут иметь больше смысла при завершении этого процесса. Подумайте, что принадлежит каждому файлу, но в какой-то степени деление драйвера среди файлов - это больше искусство, чем наука. Меньшие драйверы часто вписываются в один или два файла.

Немного конструкции также могут быть хорошими. Подумайте, что вы делаете, и что ваш драйвер должен будет сделать. Исходя из этого, вы должны иметь возможность отображать, какие функции должен иметь драйвер устройства.

Я также считаю, что Linux Device Drivers, Third Edition может помочь вам перейти к разработке драйверов.

Файлы Linux сами включают файлы, основанные на том, что они делают, на каком уровне они находятся и на каком уровне они имеют доступ к стеку вызовов. The Big Picture действительно сообщает, как каждый файл связан со следующим.

+0

+1 в руководстве по драйверам устройства для Linux – ctuffli

+0

Благодарим за рекомендацию. сегодня вечером будет проходить через книгу. Что еще?? Практическое прохождение любого ... – TheCodeArtist

+1

Для того, чтобы пройти через ядро, нужен настоящий эксперт более чем на нескольких страницах ... кроме того, многие части ядра меняются быстро, поэтому он не может быть записан после того, как он написан , Лучше всего читать и понимать подсистемы, которые вас интересуют. – WhirlWind

7

Я должен был исправить драйвер ядра один раз. Мой самый большой совет (если вы используете vim) - настроить его с помощью ctags, чтобы вы могли прыгать через источник ядра с помощью ctrl-] каждый раз, когда вы видите функцию, которую вы не понимаете.

+2

... делал это какое-то время! И его ДЕЙСТВИТЕЛЬНО полезно! – TheCodeArtist

+0

@frankster - отличный совет спасибо – artm

 Смежные вопросы

  • Нет связанных вопросов^_^