2012-01-27 5 views
2

[Question переехал из askubuntu.com]Системное программирование в Ubuntu

Я хотел бы получить в программировании Ubuntu систем; быть конкретным - разработка и отладка драйверов устройств. Тем не менее, я не уверен, как начать, даже несмотря на то, что у меня есть опыт в других проектах с открытым исходным кодом.

У меня есть значительное умение/опыт программирования на Python (но это будет бесполезно здесь, я думаю), умеренные навыки программирования на C, хорошие навыки отладки (только программы с пользовательским режимом), приличные статические навыки реверсирования (больше хобби) и прошли короткий (но действительно приятный) учебник по программированию модуля ядра here.

Есть несколько вопросов, которые я хотел бы задать.

  1. Любой конкретный совет, который вы хотели бы мне дать (что-то вам нужно было усвоить). Абстрактный вопрос, да.
  2. Я был пользователем Ubuntu в течение длительного времени, но я не уверен, где я могу начать помогать. Учитывая мои конкретные интересы в драйверах устройств, какие-либо предложения? Рекомендуемый материал для чтения? В настоящее время я читаю «Linux System programming - разговариваю с ядром и библиотекой C».
  3. Предлагаемый материал для чтения, связанный с отладкой драйвера устройства?

Спасибо.

ответ

4

Несколько советов:

  • C является основой для разработки ядра Linux. Другие вещи могут помочь вам автоматизировать или протестировать, но вы будете делать C.
  • Любая ОС Linux отлично подходит для разработки ядра. Некоторые из них могут упростить создание и развертывание ваших ядер, из памяти Ubuntu использует инфраструктуру упаковки ядра Debian, которая позволяет легко добавлять собственные модули и автоматически создавать их для новых версий ядра.
  • Начать писать простые модули.
  • Начните с игры с процессом сборки ядра и создайте конфиг и друзей. Перезагрузите и запустите ядра, которые вы собрали сами, это даст вам уверенность. Попробуйте подстроить дерьмо из ядра, это очень весело, и вы узнаете обо всех подсистемах.
  • Я прочитал эту книгу несколько лет назад: http://www.amazon.com/Linux-Kernel-Primer-Top-Down-Architectures/dp/0131181637, все было хорошо, но я тоже не был хорош в C.
  • Ссылка на учебник в вашем вопросе сломана.
+0

спасибо! также, исправил ссылку. –

+1

Кроме того, книга [Linux Device Drivers] (http://lwn.net/Kernel/LDD3/) немного устарела, но стоит взглянуть на нее. Обратите внимание, что некоторые примеры из этой книги необходимо пересмотреть, чтобы сделать их правильными для новых ядер. Вы можете многому научиться, когда делаете это, что всегда полезно. Я бы рекомендовал прочитать, по крайней мере, главы 1-8. Это облегчит вам работу. – Eugene

+1

Одна из очевидных вещей, с которыми мы с коллегами учились, - это то, что ядро ​​Linux постоянно меняется.И если кто-то издает пример того, как делать какие-то полезные вещи, вы всегда должны проверить, все ли это применимо. В отличие от ядра MS Windows, ядро ​​Linux не поддерживает стабильные API и ABI. Тем не менее, это управляемо. Я также предлагаю использовать несколько разных дистрибутивов (и ядер с различными конфигурациями), чтобы проверить модули ядра, которые вы будете разрабатывать. Это помогло мне найти довольно неприятные ошибки в моем коде несколько раз. – Eugene

2

Вы должны действительно пойти в http://kernelnewbies.org/. Это хорошее начальное место для взлома ядра, например, для написания драйверов устройств. На kernelnewbies.org есть много ресурсов. Я знаю, что есть хотя бы одна бесплатная электронная книга о программировании драйвера устройства.