Если вы совершенно не знакомы с разработкой ядра, я бы предложил не начинать с разработки аппаратного обеспечения, а перейти к некоторым «программным» модулям ядра, таким как proc file/sysfs, или для более сложных примеров создания файловой системы/сети, uml/vmware/virtualbox/... машина, так что сбой вашей машины не повредит так много :) Для встроенной разработки вы можете использовать небольшой набор инструментов ARM Development Kit или небольшую машину Via C3/C4 или любой старый компьютер, который вы можете сжигать с вашим доморощенным USB/PCI/любым устройством.
Хорошим местом для начала является, вероятно, Kernelnewbies.org - у которого есть много ссылок и полезной информации для разработчиков ядра, а также список легко реализуемых задач для новичков.
Некоторые книги для чтения:
Understanding the Linux Kernel - очень хорошая ссылка с подробным описанием конструкции из ядра подсистемы
Linux Device Drivers - написано больше похож на учебник с большим количеством примеров кода, сосредоточившись на том, чтобы вы собираетесь и объяснение ключевых аспектов ядра Linux. Он представляет процесс сборки и основы модулей ядра.
Linux Kernel Module Programming Guide - Некоторые более вводный материал
Как предполагалось ранее, глядя на код Linux всегда хорошая идея, особенно в Linux Kernel API, как правило, меняются довольно часто ... LXR помогает много с очень хорошим просматривающий интерфейс - lxr.linux.no
Чтобы понять процесс сборки ядра, эта ссылка может оказаться полезной:
Linux Kernel Makefiles (kbuild)
Последних но не в последнюю очередь, просмотрите каталог документации для дистрибутива ядра.
Вот некоторые интересные упражнения дерзко похищенные из класса разработки ядра:
- Написать модуль ядра, который создает файл/Proc/тиков отчетности текущее время в тиках на каждый доступ для чтения.
- Напишите модуль ядра, обеспечивающий файл proc/proc/sleep. Когда приложение записывает несколько секунд в виде текста ASCII в этот файл («echo 3>/proc/sleep»), он должен блокироваться в течение указанного количества секунд. Записи на запись не должны иметь побочного эффекта на содержимое файла, т. Е., при чтении доступа файл должен быть пустым (см. LDD3, глава 6/7).
- Напишите файл proc, в котором вы можете временно сохранить некоторый текст (используя эхо «blah»>/proc/pipe) и вытащите его снова (cat/proc/pipe), очистив файл. Следите за проблемами синхронизации.
- Измените примерный пример канала для регистрации в качестве символьного устройства/dev/pipe, добавьте распределение динамической памяти для запросов на запись.
- Напишите простую файловую систему.
Все упоминают только Linux: рассмотрим возможность просмотра FreeBSD или другого варианта BSD. Поскольку они были основаны на кодексе, разработанном в университете, и участвующие в нем люди обучали курсам на основе этого кода. Можно утверждать, что это может быть лучший опыт обучения. Также есть http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0201702452 для получения хорошего обзора – 2011-02-04 10:10:18