Я заинтересован в компиляции нового ядра под Ubuntu 12.04 x86 64 bit.
Я нашел эту вики-страницу , которая в основном является зеркалом для этого блога , и есть много шагов ( git и т.д.), которые кажутся бесполезными для меня.
В более ранних выпусках / дистрибутивах я использовал для создания файла .config
и изменения Makefile
, если мне нужно, затем просто запустите make
, и все готово.
Есть ли простой способ сделать это под Ubuntu?
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.
.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 и т.д.
Краткие инструкции по сборке ядра 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
Вот шаги. Эта процедура основана на nixCraft Как: Скомпилировать ядро Linux 2.6 , но значительно модернизировано.
Вы можете получить исходный код ядра на kernel.org . Здесь будет использоваться версия 3.16.1 (последнее стабильное ядро на момент написания этой статьи). Поэтому вам может потребоваться изменить эти команды, если вы используете другую версию.
Исходный код ядра в настоящее время предоставлен в архивах. tar . xz , поэтому щелкните "tar .xz "любой версией, которую вы хотите:
После cd
перехода в каталог, в который вы загрузили архив, вы можете извлечь его с помощью 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
target xconfig
и menuconfig
. ] xconfig запускает графическую утилиту конфигурации, а menuconfig
является текстовым (т.е. его интерфейс полностью отображается в вашем терминале). Для каждого требуется дополнительное программное обеспечение , но не , предоставляемое build-essential .
Для графической настройки установите libqt4-dev и 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?
Репозиторий ядра 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.