2013-11-18 2 views
1

Программирование драйверов - одна из тех вещей, о которых я хотел хотя бы немного задуматься, но всякий раз, когда у меня хватило времени на то, чтобы сэкономить на руках и устроиться на исследования, я почти полностью нашел очень специальные вопросы по этому вопросу или очень широкие интродукции.
Теперь я понимаю, что это не тривиальная тема, но я лично лучше всего сижу и сажусь и делаю вещи. Поэтому я надеюсь, что вы можете дать мне несколько указаний, с чего начать. Итак, ради практического подхода, рассмотрим следующий сценарий: у меня есть малина Pi у меня в руках и вы хотите использовать контакты GPIO в качестве последовательного порта. (Мне бы хотелось услышать другие предложения, если вы считаете, что это сложно для проекта стартера. Это действительно больше для этого, результат является вторичным). Таким образом, Pi запускает Debian wheezy, и с этого я и начинаю.
Учитывая это, что мне нужно (с программным обеспечением), чтобы начать? В частности, я прошу о следующем:Введение в программирование драйверов

  • Какой компилятор я использую?
  • Помимо компилятора и текстового редактора, нужны ли мне дополнительные инструменты?
  • Есть ли какая-то схема, которую я мог бы скопировать, чтобы начать?
  • Возможно, вы знаете о большом введении, которое мне просто не удавалось найти? Я обнаружил, что записанные лекции могут быть чрезвычайно полезными, и я был бы абсолютно готов пройти полный курс, если это начнется.
  • Знаете ли вы, что проект достаточно прост, чтобы начинающий учился у него, читая источники напр. GitHub?

И, наконец, я полностью ошибаюсь? Я вполне мог бы быть; Я программировал довольно долгое время, но обычно на высоких уровнях абстракции, которые предоставляют языки с временем автономной работы. У меня есть некоторый опыт программирования на C++, и указатели для меня не черная магия, но я не очень хорошо знаком здесь.
Кроме того, если вопиющее отсутствие понимания драйверов говорит из этого сообщения, пожалуйста, укажите его мне.

+0

Похоже, вы спрашиваете о написании драйвера физического устройства, а не о логическом (обычно это то, о чем я думаю, когда думаю «драйвер»). Вы пробовали использовать ардуино? http://arduino.cc/en/Tutorial/HomePage – Benubird

ответ

1

Вы находитесь в Linux, поэтому то, что вы уже установили (или доступно для установки), должно быть достаточным для создания с помощью - современного компилятора C и создания системы вместе с достойным редактором. Вы даже получаете отладчик, способный отлаживать код пользователя и код ядра - gdb & kgdb. В зависимости от того, с каким оборудованием вы работаете, вам может понадобиться что-то, чтобы посмотреть, что он делает.

Что касается ознакомления с драйверами, здесь вы можете задать два аспекта. 1) Модели драйверов O/S для Linux - начните здесь: Linux Device Drivers, и если это вам неинтересно, вы знаете, что вам нужно вернуться на шаг и получить еще несколько основ! 2) Общие аспекты h/w и терминологии. Я не уверен в хорошем общем ресурсе здесь.

Одна из последних вещей, C++ - это не C, которая также не является ассемблером, который также не является машинным кодом. На уровне сражения с оборудованием в жизнь вы начинаете знать о грязных секретах ниже абстракций, которые вы обычно используете. Там много информации о подобных вещах, но это своего рода проблема: есть LOT, чтобы знать. Вы можете попробовать статью Ульриха Дрепперса о памяти, What Every Programmer Should Know About Memory, или вы могли бы изучить, что происходит с упреждением и многозадачностью. Или вы можете посмотреть на datasheets для оборудования, которое вы хотите контролировать. Там много.

Вы задали вопрос невероятно общий вопрос, я удивлен, что он не был закрыт, однако вернитесь сюда, когда у вас есть вещи, и у вас есть некоторые конкретные вопросы, чтобы спросить!

2

Я никогда не писал полноценного драйвера для конкретного оборудования, но я проработал некоторые основы программирования драйверов.

Если вы работаете в Linux, перед тем как попасть в программирование драйверов, вам нужно знать, что такое драйверы.? типы драйверов ..? как драйверы вставляются как модули в ядро ​​..? Here - ссылка. Существует базовая аннотация, как вставить драйвер или как удалить драйвер из ядра и многое другое.

Есть video учебники на youtube.

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

Вот еще .. водитель персонажа example.

Вы также можете узнать о kernel compilation, который является интересной и важной темой перед запуском программирования драйверов, понимания статических и динамических (загружаемых) драйверов.

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