Во-первых:
На начальных этапах лучше всего начать писать различные варианты модулей «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. Это список задач, которые должен решать новичок.