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

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

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

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

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

49
задан 10 August 2012 в 15:16

4 ответа

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

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

2. Для сборки ядра со своим собственным .config используйте "старомодный" метод Debian make-kpkg

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

sudo apt-get install kernel-package

Если вы компилируете ядро в первый раз:

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

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

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

(Text)

sudo apt-get install libncurses5 libncurses5-dev

(Graphical)

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

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

(Text)

make menuconfig

(Graphical)

make xconfig

После этого просто запустите:

(Text)

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 и т.д.

41
ответ дан 10 August 2012 в 15:16

Краткие инструкции по сборке ядра Ubuntu (в отличие от ванильного) можно найти здесь: 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
3
ответ дан 10 August 2012 в 15:16

Вот шаги. Эта процедура основана на nixCraft Как: Скомпилировать ядро ​​Linux 2.6 , но значительно модернизировано.

Загрузите и извлеките исходный код ядра, которое вы хотите

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

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

screenshot from kernel.org, showing kernel source archives available for download

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

tar xf linux-3.16.1.tar.xz

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

Чтобы получить набор инструментов Ubuntu ( gcc , make и т. д.), установите build-essential Install build-essential метапакет:

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

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

Для графической настройки установите libqt4-dev Install libqt4-dev и pkg-config Install 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 .

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

  • запись в загрузчике ], так что вы можете выбрать и загрузиться из нее.

  • начальная файловая система RAM , среда, из которой ядро ​​загружает драйверы и монтирует файловую систему / .

    (Если вы устанавливаете старое ядро ​​или настроили ядро ​​ для использования devfs вместо нового udev , вам может потребоваться или вы захотите установить начальный RAM-диск Если вы знаете, что вам это нужно, см. man initrd .)

Создайте свой 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?

20
ответ дан 10 August 2012 в 15:16

Репозиторий ядра Ubuntu git

Следуя идеям из https://help.ubuntu.com/community/Kernel/Compile и с большим разъяснением того, почему я думаю эта конфигурация выглядит правильно на Где я могу получить файл .config ядра 11.04? :

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git linux
cd linux
git checkout Ubuntu-4.15.0-36.39
fakeroot debian/rules clean
debian/rules updateconfigs
fakeroot debian/rules build-generic
cp debian/build/build-generic/.config .
make -j `nproc`

Протестировано в Ubuntu 18.04.

0
ответ дан 5 January 2021 в 23:38

Другие вопросы по тегам:

Похожие вопросы: