Какой простой способ перекомпилировать ядро?

41

Я заинтересован в компиляции нового ядра под Ubuntu 12.04 x86 64 bit.

Я нашел эту вики-страницу, которая в основном является зеркалом для этого блога, и есть много шагов ( мерзавец и т. Д.), Которые кажутся мне бесполезными.

В более ранних выпусках / дистрибутивах я использовал для создания .configфайла и изменения, Makefileесли нужно, затем просто запускаю makeи все готово.

Есть ли простой способ сделать это под Ubuntu?

user827992
источник
1
Стоит проверить: wiki.ubuntu.com/Kernel/BuildYourOwnKernel
Колин Ян Кинг,

Ответы:

39

1. Используйте apt-get sourceдля загрузки версии ядра Ubuntu

apt-get source linux-image-$(uname -r)

дает папку, которая содержит, например:

linux-3.2.0 linux_3.2.0-26.41.dsc
 linux_3.2.0-26.41.diff.gz   linux_3.2.0.orig.tar.gz

Дифференциал с жирным шрифтом включает в себя все настройки Ubuntu / Debian.

2. Чтобы собрать собственное ядро .config, используйте «старомодный» make-kpkgметод Debian

Это альтернативный старомодный способ, описанный в вики:

sudo apt-get install kernel-package

Если вы собираете ядро ​​впервые:

sudo apt-get build-dep linux-image-$(uname -r)

Затем cdв исходный каталог (здесь, linux-3.2.0) и либо запустите, make oldconfigчтобы создать .configфайл с конфигурацией вашего работающего ядра, либо скопируйте третью часть.config в этот каталог.

В зависимости от того, хотите ли вы текстовую или графическую конфигурацию, установите:

(Текст)

sudo apt-get install libncurses5 libncurses5-dev

(Графический)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

А затем запустите:

(Текст)

make menuconfig

(Графический)

make xconfig

Когда закончите, просто запустите:

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

где Nсколько параллельных заданий (обычно это количество процессоров у вас есть), иmy-very-own-kernel также пользовательская строка для идентификации этой сборки.

Когда все будет готово, образ ядра и файлы заголовков будут готовы в качестве debs в родительском каталоге; вы можете установить их с помощью sudo dpkg -i, что также позаботится о добавлении записей GRUB и т. д.

иш
источник
почему они ничего не говорят об этом diff, для меня diff это просто diff, он может содержать все.
user827992
Я не знаю, вы должны спросить их (Google для Canonical Kernel Team). Я только что сказал вам , как построить его;)
иш
1
Хорошо, последний вопрос, как применить этот сжатый diff? : D мне нужно зайти в linux-3.2.0каталог и запустить patch -p1 <../patch.diff?
user827992
1
Нет необходимости применять diff; apt-get source ...сделал это для вас уже!
Иш
2
-1 Вы называете это «старомодным», я называю это устаревшим. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryЯвляется правильным, без проблем способа.
Александр Дубинский
19

Вот шаги. Эта процедура основана на nixCraft «S Как: Compile Linux ядра 2.6 --but значительно модернизирован.

Скачайте и распакуйте исходный код ядра, которое вы хотите собрать.

Вы можете получить на входе ядра исходный код на kernel.org . Версия 3.16.1 (последнее стабильное ядро ​​на момент написания статьи) будет использоваться здесь. Поэтому вам может потребоваться изменить эти команды, если вы используете другую версию.

Исходный код ядра в настоящее время предоставляется в. деготь . архивы xz , поэтому нажмите ссылку «tar.xz» для любой версии:

снимок экрана с сайта kernel.org, показывающий доступные для скачивания исходные архивы ядра

После того, как cdING в каталог , куда вы скачали архив, вы можете извлечь его tar:

tar xf linux-3.16.1.tar.xz

Установите необходимые инструменты сборки и выполните настройку ядра.

Для того, чтобы получить в Ubuntu набор инструментов ( gcc, makeи так далее) установить встраиваемый существенноУстановите build-essential метапакет:

sudo apt-get update
sudo apt-get install build-essential

Два разумных и удобных способа настройки того, что входит в ваше ядро, обеспечиваются makeцелевыми объектами xconfigи menuconfig.

xconfigзапускает утилиту графической конфигурации, в то время как menuconfigработает на основе текста (т. е. ее интерфейс полностью отображается в вашем терминале) Каждому требуется дополнительное программное обеспечение, не предоставляемое build-essentialУстановите build-essential .

Для графической настройки установите libqt4-devУстановите libqt4-dev и pkg-configУстановите pkg-config и выполнитеmake xconfig:

sudo apt-get install libqt4-dev pkg-config
make xconfig

Для настройки в терминале установитеlibncurses5-dev(спасибо Hannu за эту информацию) и запуститеmake menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Соберите настроенное ядро.

Сначала запустите это, чтобы скомпилировать ядро ​​и создать vmlinuz:

make

vmlinuzэто «ядро». В частности, это образ ядра, который будет распакован и загружен в память GRUB или любым другим используемым вами загрузчиком .

Затем создайте загружаемые модули ядра :

make modules

Установите ваше новое ядро.

Предполагая, что эти makeкоманды выполнены успешно, пришло время установить новое ядро. Сначала установите модули:

sudo make modules_install

Затем установите само ядро :

sudo make install

Это помещает vmlinuz-3.16.1(копию vmlinuz), config-3.16.1(текстовый файл, хранящий параметры конфигурации ядра) и System.map-3.16.1( таблицу поиска символов ядра ) в /boot. Для получения более подробной информации см. Этот пост comp.os.linux.misc от Hadron иman installkernel .

Окончательная настройка, чтобы ядро ​​можно было запустить и загрузить систему:

Этот раздел частично основан на информации в Kernel / Compile .

Теперь, когда ядро ​​находится там, где оно должно быть, оно должно:

Создайте ваши initramfs сmkinitramfs:

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

Когда вы обновляете конфигурацию загрузчика GRUB2, который был установлен по умолчанию в Ubuntu с 9.10, он должен автоматически обнаружить новое ядро и добавить опцию загрузки с него.

sudo update-grub

Попробуйте свое ядро.

Теперь вы можете перезагрузиться, чтобы протестировать ваше новое ядро. Возможно, вам придется удерживать Shiftили нажатьEsc во время загрузки, чтобы увидеть меню загрузки GRUB, где вы можете выбирать между различными установленными ядрами.

Чтобы сделать ядро ​​(или другое) по умолчанию, см. Раздел Как изменить порядок загрузки GRUB?

послушник
источник
Шаг 3, make menuconfigтребуетсяapt get install libncurses5-dev
Hannu
@ Ханну, спасибо, я просто забыла об этом упомянуть. Пользователям 64-битных систем может потребоваться «ia32-libs» также для поддержки 32-битных программ.
Новичок
Может быть лучше найти независимый от версии пакет ... Я не уверен, что есть какой-либо.
Ханну
@EliahKagan Спасибо. Теперь все в порядке или я должен удалить его полностью? У меня нет проблем в этом.
Новичок
1
-1 Это не производит ядро Ubuntu . Он даже не производит файлы .deb. Это рецепт проблем.
Александр Дубинский
3

Краткие инструкции по сборке ядра Ubuntu (в отличие от vanilla) можно найти здесь: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel .

Я не буду копировать всю вики, но я перечислю минимальные шаги для компиляции версии ядра Ubuntu, которое вы в настоящее время установили. (Чтобы получить самую последнюю версию, клонируйте репозиторий git для ядра в следующем выпуске Ubuntu.) Протестировано в Ubuntu 16.04.

# Get source code
apt-get source linux-image-$(uname -r)

# Install dependencies
sudo apt-get build-dep linux-image-$(uname -r)

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb
Александр Дубинский
источник