Лучший способ попасть в программирование ядра?

Не столько спрашивать, какие книги (хотя, если вы знаете какие-либо руководства / учебные пособия, которые были бы полезны), но каков наилучший способ начать программирование ядра и есть ли конкретный дистрибутив, который лучше всего изучить?

Мне больше всего интересна часть драйверов устройств, но я хочу узнать, как настроено ядро ​​(модули и т. Д.). У меня около 4-5 лет. Опыт работы с C / C ++, но в основном это знания из колледжа (так это не как 4-5 лет опыта работы, если вы знаете, что я имею в виду)

4 Solutions collect form web for “Лучший способ попасть в программирование ядра?”

В первую очередь:

Для детских этапов лучший способ начать писать различные варианты модулей «hello world» и виртуальных аппаратных средств – это реальное оборудование, которое лучше всего подходит для решения реальных проблем, когда у вас больше идеи о том, что вы делаете.

«Драйверы устройств Linux» – отличная книга, и стоит начать с: http://lwn.net/Kernel/LDD3/

LDD (используется, по крайней мере) имеет упражнения, где вы пишете виртуальные драйверы, например RAM-диски и виртуальные сетевые устройства.

Во-вторых:

подпишитесь на https://lkml.org/ или в список рассылки подсистемы, в которую вы будете взламываться. Немного перескакивайте, просматривайте потоки, просматривайте обзор кода (ответы на патчи), чтобы увидеть, что люди споткнуться или подобрать.

Посмотрите, можете ли вы получить (дешевое) оборудование для устройства, которое еще не поддерживается или еще не поддерживается. Хорошими кандидатами являются недорогие USB-адаптеры USB или аналогичные недорогие периферийные устройства USB. Что-то с устаревшим или внедорожным драйвером, возможно, написанным продавцом, возможно, для 2.4.x, идеально, поскольку вы можете начать с чего-то, что работает (сортировать), и постепенно адаптировать его / переписать это, тестирование, как вы идете. Моя первая попытка драйвера была для USB-адаптера Davicom DM9601. Был драйвер драйверов с драйверами 2,4-й серии, который я медленно адаптировал к 2.6. (Примечание: драйвер в магистрали не мой драйвер, в конце концов кто-то написал его с нуля).

Еще один хороший способ – взглянуть на сайт Kernel Newbies, в частности «ядро-janitors» todo: http://kernelnewbies.org/KernelJanitors/Todo. Это список задач, которые новичок должен уметь решать.

Существует много ядер.

Linux – не единственная игра, но она наиболее широко используется. Некоторые люди рекомендуют ядро minix понимать концепции операционной системы. Я бы пошел с Linux 2.6.x, так как это самый распространенный, и он не будет потрачен впустую на что-то (почти), которое никто не использует. Известны Solaris, XNU (Mac), FreeBSD и Dragonfly. 1

Найдите что-то супер простое (последовательный порт, usb и т. Д.) И сделайте что-нибудь еще. Для дополнительной задачи попробуйте написать модуль ядра для того, что еще не имеет его. (Будьте уверены, что Google подозревается по pci sudo lspci -nn и / или usb id sudo lsusb .)

Обновление: не делайте этого непосредственно в своей основной системе, как упоминалось выше, используйте виртуальные машины (VM) (компьютер в компьютере). VirtualBox может предоставить это, и это бесплатно. Кроме того, я не хочу, чтобы он казался подавляющим, но попробуйте моментальные снимки VM, чтобы вы могли вернуться в случае, если что-то сломает сама VM.

Обновление 2 : Замечание о Git (DVCSes inc. Mercurial, fossil, bazaar, darcs) – хорошая идея, в основном для кода и небольших важных файлов. Старайтесь не использовать Git для резервного копирования музыки, видео и т. Д., Если вы не знаете о последствиях. 😉

Найдите модуль или драйвер, который вы хотите изменить или начать с модуля типа null / hello world, и создайте оттуда. Специально работайте с модулем, потому что он позволит вам загружать, выгружать, перекомпилировать и перезагружать код в запущенное ядро. Позже вы можете попасть в основные биты, но в основном модули имеют все виды, и вы можете делать практически все, что захотите.

Во-вторых, используйте виртуальную машину. Настройте гостевую машину в VirtualBox или некоторых виртуальных машинах и проверите там свое тестирование ядра. Таким образом, вы не будете убивать свою основную систему, когда вы что-то сломаете, а перезапуск, возврат к рабочему снимку и т. Д. Очень просто.

В-третьих, изучите git .

Кто-то уже упоминает книгу «Драйверы устройств Linux» – это отличный ресурс, и я очень рекомендую его.

Хотя в вопросе упоминается, что создатель не спрашивает конкретно о книгах, новейшая редакция книги «Понимание ядра Linux» ( http://oreilly.com/catalog/9780596005658/ ) бесценна в изучении ядра Linux в целом , а также содержит раздел о драйверах устройств Linux.

  • Выгода от модуля ядра, скомпилированного внутри ядра?
  • Нет скриптов сборки, доступных при компиляции модуля вне исходного дерева Linux
  • Что означает префикс __ перед передачей некоторого ядра api?
  • Как автоматически загружать новый VID и PID в модуль usb_serial
  • Исправить запущенный процесс из модуля ядра Linux
  • Как создать Module.symvers?
  • Удаление модуля из черного списка
  • Как узнать, когда я могу реактивировать HWP (Hardware PStates)
  • Xen Kernel - модуль SCSI_WAIT_SCAN
  • Сервер RNDIS для создания компьютера как периферийного
  • Настройка отдельного драйвера для автоматической компиляции с помощью DKMS из дерева ядра
  • Linux и Unix - лучшая ОС в мире.