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


8

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

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


4
Начнем с того, что это пишется ядро ​​с e.
Калеб

Я заметил, что когда я надевал метки, лол.

4
В следующий раз найдите время, чтобы исправить это. Это хороший способ уважать сообщество, которое находит время, чтобы помочь вам. Также, если вы хотите написать код для ядра, вам нужно быть строгим в таких деталях!
Калеб

@ Калеб, сделаю!

Спасибо, что задали этот вопрос, я всегда задавался вопросом
Майк Пеннингтон

Ответы:


11

Во-первых:

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

«Linux Device Drivers» - отличная книга, которую стоит начать с: http://lwn.net/Kernel/LDD3/

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

Во-вторых:

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

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

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


4
Хороший ответ для Linux, отсутствует только один ресурс: LXR для просмотра исходного кода ядра.
Жиль "ТАК - перестань быть злым"

8

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

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

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

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

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


6

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

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

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


1

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.