Вопрос: Построение нового ядра ванили - некоторая путаница с произведенными дебами


Поэтому я хотел попытаться построить 2.6.39-4. Я следовал процедуре на ubuntu wiki "GitKernelBuild" страница,

Короче говоря, загрузите tar.bz2, извлеките, скопируйте мою старую конфигурацию, сделайте oldconfig, а затем

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Все прошло отлично, я использую это ядро ​​прямо сейчас, кроме одной мелочи: я не могу строить другие модули, строить dkms и т. Д. Дальнейшая информация:

Созданные файлы deb - два:

linux-image-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb
linux-headers-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb

Я немного смущен этим.

В нормальных ядрах ubuntu, даже в mainline-ppa, установлены три файла deb. Например, для того же ядра из mainline ppa существуют такие пакеты:

linux-image-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904_2.6.39-02063904.201108040905_all.deb

Как вы можете видеть, есть два разных пакета заголовков. Действительно, после их установки пакеты mainline ppa создают каталог в / lib / modules:

/lib/modules/2.6.39-02063904-generic

В этом каталоге существует символическая ссылка, которая указывает на -generic заголовки в / usr / src

/lib/modules/2.6.39-02063904-generic/build -> /usr/src/linux-headers-2.6.39-02063904-generic

В разделе / ​​usr / src для этого ядра существуют два разных каталога

/usr/src/linux-headers-2.6.39-02063904-generic
/usr/src/linux-headers-2.6.39-02063904

Теперь вот проблема с моими собственными двумя пакетами:

В / usr / src есть только одна папка,

/usr/src/linux-headers-2.6.39.4-custom

И под / lib / modules есть папка

/lib/modules/linux-headers-2.6.39.4-custom

Настоящая проблема и причина, по которой я пишу этот пост, - это символическая ссылка, которая создается в указанном выше каталоге:

/lib/modules/linux-headers-2.6.39.4-custom/build -> /home/nickped/projects/kernel/linux-2.6.39.4

Как вы можете видеть, он ссылается на каталог, в котором я построил ядро, что, конечно, может и не существовать впоследствии. Это приводит к тому, что другие модули (например, vmware, virtualbox и т. Д.) Не могут быть созданы, поскольку не могут найти важные вещи.

Почему это происходит? Как это можно исправить? Почему есть два, а не три файла deb? Какова цель этих трех разных файлов deb, которые имеются в официальных релизах, и как они могут быть созданы другими?


2
2017-08-14 23:58


Источник




Ответы:


Чтобы ответить на первый вопрос Почему существуют только два пакета? или Почему нет двух файлов заголовков? - когда они перекрестно скомпилированы, они упакованы для обработки каждого варианта использования. Разделение заголовков на большее все пакет и меньший архитектурный вариант, вы сохраняете пропускную способность, выталкивая их пользователям. Когда вы делаете это самостоятельно, вам нужно только его для одной арки, чтобы сделать один файл заголовков.

Что касается символической ссылки в исходное местоположение, у меня была такая же проблема. Я не нашел хорошего решения, кроме как создать linux_source пакет (просто добавьте, что после kernel_image kernel_headers), а затем исправить символическую ссылку вручную.

На самом деле вопрос все об этой стороне вещей уже, Долгосрочное решение, похоже, взломается в скрипте, который запускается после каждой установки ядра, которая только фиксирует symink.


1
2017-08-15 01:16



Большое спасибо Оли, это отличный ответ :-) - nickped
@ Оли, пожалуйста, объясните или дайте мне несколько советов о том, как исправить или устранить проблему с символикой? Я пытаюсь создать некоторые пользовательские ядра для друга, у которых есть одно и то же оборудование, но когда они устанавливают мои пакеты, у них есть проблема с символикой - Salih Emin
@SalihEmin Ты просто придерживаешься linux_source в конце make-kpkg чтобы вы получили что-то вроде: fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers linux_source и он будет генерировать дополнительный пакет, который предоставляет источник. Это не идеально, но он, безусловно, работал для меня (я не создал ядро ​​в то время). - Oli♦