[Question переехал из askubuntu.com]Системное программирование в Ubuntu
Я хотел бы получить в программировании Ubuntu систем; быть конкретным - разработка и отладка драйверов устройств. Тем не менее, я не уверен, как начать, даже несмотря на то, что у меня есть опыт в других проектах с открытым исходным кодом.
У меня есть значительное умение/опыт программирования на Python (но это будет бесполезно здесь, я думаю), умеренные навыки программирования на C, хорошие навыки отладки (только программы с пользовательским режимом), приличные статические навыки реверсирования (больше хобби) и прошли короткий (но действительно приятный) учебник по программированию модуля ядра here.
Есть несколько вопросов, которые я хотел бы задать.
- Любой конкретный совет, который вы хотели бы мне дать (что-то вам нужно было усвоить). Абстрактный вопрос, да.
- Я был пользователем Ubuntu в течение длительного времени, но я не уверен, где я могу начать помогать. Учитывая мои конкретные интересы в драйверах устройств, какие-либо предложения? Рекомендуемый материал для чтения? В настоящее время я читаю «Linux System programming - разговариваю с ядром и библиотекой C».
- Предлагаемый материал для чтения, связанный с отладкой драйвера устройства?
Спасибо.
спасибо! также, исправил ссылку. –
Кроме того, книга [Linux Device Drivers] (http://lwn.net/Kernel/LDD3/) немного устарела, но стоит взглянуть на нее. Обратите внимание, что некоторые примеры из этой книги необходимо пересмотреть, чтобы сделать их правильными для новых ядер. Вы можете многому научиться, когда делаете это, что всегда полезно. Я бы рекомендовал прочитать, по крайней мере, главы 1-8. Это облегчит вам работу. – Eugene
Одна из очевидных вещей, с которыми мы с коллегами учились, - это то, что ядро Linux постоянно меняется.И если кто-то издает пример того, как делать какие-то полезные вещи, вы всегда должны проверить, все ли это применимо. В отличие от ядра MS Windows, ядро Linux не поддерживает стабильные API и ABI. Тем не менее, это управляемо. Я также предлагаю использовать несколько разных дистрибутивов (и ядер с различными конфигурациями), чтобы проверить модули ядра, которые вы будете разрабатывать. Это помогло мне найти довольно неприятные ошибки в моем коде несколько раз. – Eugene