Дистрибутивные kernel-header
пакеты содержат, как следует из их названия, только заголовочные файлы ядра (плюс необходимые данные), которые необходимы для сборки программного обеспечения, такого как модули ядра.
Вы не должны ожидать, что вообще найдете бинарные файлы в исходном каталоге ядра , за исключением вывода сборки. (Если вы конфигурируете и собираете ядро самостоятельно, исходный каталог ядра также будет содержать скомпилированные объекты, модули, само собранное ядро и несколько других двоичных фрагментов, которые заставляют его работать.)
KConfig
Файлы представляют собой описание параметров конфигурации ядра. (и их зависимости), которые доступны для данного каталога / модуля.
Кроме того, это все (в основном) исходный код на C, заголовочные файлы и Makefile
s. Здесь и там есть несколько вспомогательных скриптов, а также источник ассемблера.
Пакеты заголовков (которые вы установили) содержат только часть заголовка из вышеперечисленного (и не все из этого - только «экспортированные» заголовки) и часть инфраструктуры сборки. Так что то, что вы видите, ожидается. Пакеты заголовков не содержат исходный код на языке C (за исключением некоторых заглушек и кода инфраструктуры сборки). Весь смысл наличия такого типа пакетов заключается в экономии места (и пропускной способности) - все дерево исходных текстов ядра Linux довольно большое и совершенно не нужно, если вы не собираетесь собирать ядро самостоятельно. Пакеты заголовков создаются и поставляются дистрибутивами, чтобы обеспечить только нужные вещи, необходимые для сборки модулей, но не более того. (Они, конечно, не содержат скомпилированное ядро.)
Обращаясь к вашему комментарию: пакеты заголовков никуда не перемещаются. Они построены для конкретных версий ядра, упакованы в определенную директорию, и все. Это просто набор файлов. (Обратите внимание, что пакеты заголовков не обязательно имеют ту же версию, что и текущие стабильные двоичные пакеты ядра - пакеты заголовков являются общими и могут отставать от действующего ядра, которое вы используете. Однако они не должны быть из ядра версия, более поздняя, чем текущее установленное (или целевое) ядро.)
Установленные двоичные файлы ядра обычно устанавливаются в /boot
каталоге вместе с двоичными файлами загрузчика и файлами конфигурации. (Это иногда независимая файловая система, по умолчанию не смонтированная.) Точное имя файлов зависит от ядра и дистрибутива. (Так же как и загрузчик.)
Установленные модули ядра находятся в подкаталогах:
/lib/modules/`uname -r`/
Так, например, в моей системе, они в настоящее время находятся в
/lib/modules/3.1.4-gentoo/
Полный исходный код ядра : в Ubuntu, если вы хотите, чтобы полные исходники ядра собирали ядро самостоятельно, вам следует установить его, следуя приведенным здесь инструкциям .
Вы также можете скачать архив с исходным кодом kernel.org
и распаковать его куда-нибудь ( не перезаписывайте файлы, установленные в Ubuntu, если вы используете этот архив, сохраняйте свои личные данные и материалы, управляемые RPM отдельно).
/usr/src/linux
это традиционное место для размещения исходных кодов ядра, но ничто не мешает вам размещать исходные коды ядра в другом месте. Этот путь также часто является просто символической ссылкой на каталог. например, у меня есть это на моей машине:
$ ls -l /usr/src/linux
lrwxrwxrwx 1 root root 18 Dec 7 17:03 /usr/src/linux -> linux-3.1.4-gentoo
Символическая ссылка предназначена для упрощения создания приложений, которые зависят от источника ядра. Вы связываете этот путь с вашим работающим (или целевым) ядром, чтобы вам не приходилось указывать точную информацию о версии или пути при сборке модуля вне дерева. Помогает куче для исходных дистрибутивов по крайней мере.
linux-source
содержит исходный код,apt-get source linux-image-$(uname -r)
получает исходный код ядра с патчами Ubuntu.