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

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

Мне больше всего интересна часть драйверов устройств, но я хочу узнать, как настроено ядро ​​(модули и т. Д.). У меня около 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.

  • Экономия времени при компиляции ядра
  • Wheezy: как на самом деле черный список ehci_hcd?
  • 200+ экземпляров для fglrx?
  • Программное изменение частоты процессора
  • bdl_pos_adj: установить временную схему IRQ для hda-intel
  • Какой модуль в ядре информирует клиента DHCP о начале переговоров по DHCP?
  • Не удалось получить доступ к linux / skbuff.h
  • Конфигурация ядра для материнской платы ASUS P8Z77-V
  • Как узнать, когда я могу реактивировать HWP (Hardware PStates)
  • Использование нескольких уровней модулей ядра для сопряжения аппаратного устройства?
  • Slackware не позвонит мне
  • Interesting Posts

    Есть ли разница в использовании ресурсов / потребностях между версиями Ubuntu и Debian Linux Mint (под тем же DE)?

    Раскрасить имена файлов на основе состояния для git diff -name-status

    Как запустить скрипт на удаленной машине с помощью команды экрана и ssh?

    Кросс-компиляция для ARM без установки чего-либо

    Возможно ли множественное шифрование eryptfs?

    Как отменить и вернуть случайный `7z e`

    Невозможно добавить пользователей, используя useradd

    Ошибка сегментации с диалоговым окном

    bash_profile останавливается после вызова файла

    сопоставить первый столбец файла a с параграфами файла b

    Ошибки при вызове веб-службы с использованием команды «Curl» с терминала Unix

    Почему я должен перезапускать сетевую систему каждый раз, когда я включаю CentOS?

    Проверка разрешений на файлы

    Как настроить число столбцов на оправданном абзаце в нано

    Доступ к справочной странице ImageMagick

    Linux и Unix - лучшая ОС в мире.