Системное программирование в Ubuntu

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

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

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

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

Спасибо.

5
задан 27 January 2012 в 18:14

1 ответ

  1. Ну, как инженер ядра, я обнаружил, что в целом лучшие уроки, которые я выучил, были тяжелыми. Там, где мне было нужно копать глубоко и находить новые и творческие способы отладки проблемы или решения конкретной проблемы. Мотивация придерживаться этого действительно исходила из моего интереса к определенной подсистеме. Если вы не намерены смотреть сквозь пальцы, просто остановитесь сейчас, это все сложно, интенсивность военных историй меняется:).

  2. Вы можете лучше всего помочь в области, в которой вы заинтересованы, чтобы поддержать усилия. Спросите себя, как близко вы хотите добраться до HW и продолжить оттуда. Например, в разработке общих драйверов устройств гораздо меньше прикладных концепций ОС по сравнению с более серьезными проблемами управления ресурсами, такими как управление памятью, обратная запись ввода-вывода, планирование процессов. В конце концов, драйверы устройств предназначены для того, чтобы получить прошивку, чтобы получить то, что вы хотите, и затем придерживаться интерфейса для этой подсистемы. Существует так много сравнимых работ, которые позволяют относительно легко начать там. Недостатком является то, что вы работаете с HW, что всегда мешает разработке.

  3. Это книга для пользователей, она вам больше не понадобится :-p. Ядро - это сервисно-ориентированная среда, для начала понимание всего интерфейса пользователь / ядро ​​не будет очень полезным, если вы, например, погрузитесь прямо в разработку драйвера, так как будете совершенно изолированы от пространства пользователя. Третье издание драйверов устройств Linux свободно доступно и является отличным справочным материалом.

  4. См. Ссылку ниже. Хотя самое главное, просто начать где-нибудь и держаться. Это должно быть трудно, проверить свое терпение и приверженность. Поскольку вы на самом деле не знаете, что вас интересует, именно уроки, извлеченные из этих стычек, будут определять ваши будущие обязательства. Если вы даже не можете этого сделать, то взлом ядра не для вас.

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

Я также предлагаю вам ознакомиться с такими основами трассировки ядра, как ftrace, perf и systemtap.

Удачи!

0
ответ дан 27 January 2012 в 18:14

Другие вопросы по тегам:

Похожие вопросы: