В последнее время я сам немного разбираюсь в этом вопросе.
Я не знаю, насколько связан этот ответ, поскольку похоже, что вы заинтересованы только в понимании упаковки исходного кода ядра, имеющегося у вас под рукой.Этот ответ, вероятно, относится только к вашему второму вопросу.Тем не менее, вот что я нашел в заголовках ядра.
Из того, что я обнаружил, есть два потенциальных местоположения, которые в конечном итоге называют "заголовками ядра".
Первая папка находится в / usr / src / linux-headers-`version '(по крайней мере, на моей машине с Ubuntu).Это где ваше ядро (источник?) Установлено, а также сопровождающие заголовки.Если вы хотите собирать модули ядра, вам нужно будет собрать их с помощью заголовков, найденных здесь.
С другой стороны, / usr / include / {linux, asm} также содержат «заголовки ядра».Вы можете думать об этих заголовочных файлах как о пользовательском интерфейсе вашего ядра.Это API, экспортируемый ядром, поэтому пользовательские программы могут выполнять системные вызовы.Ваш libc воспользуется этим API, чтобы он мог создавать функции (в / usr / include) на основе доступных системных вызовов.
Вот пара документов, подтверждающих то, что я только что сказал, и поясняющих кое-что:
Вот ссылка на разницу между / usr / src / linux-headers-`version 'и / usr / include для RHEL4.
http://www.linuxquestions.org/questions/red-hat-31/rhel4-kernel-devel-headers-packages-missing-directories-697552/
Вот ссылка об «экспорте» заголовков ядра: http://www.kernel.org/doc/Documentation/make/headers_install.txt
Наконец, здесьЭто еще одно объяснение того, для чего нужны заголовки ядра: http://www.overclockers.com/forums/showthread.php?t=647638
Так что, возможно, вы уже знали об этом и просто хотели узнать, как создать драйвер, используя исходные коды в вашем пакете ядра, но, по крайней мере, с этим ответомВы знаете, что это определенно место для начала.