Який простий спосіб перекомпілювати ядро?


41

Мені цікаво скласти нове ядро ​​під 64-бітною версією Ubuntu 12.04 x86.

Я знайшов цю сторінку вікі, яка в основному є дзеркалом для цього блогу, і є багато кроків ( git тощо), які здаються мені марними.

З попередніми випусками / дистрибутивами я використовував, щоб створити .configфайл і змінити, Makefileякщо мені потрібно, а потім просто запустити makeі все зроблено.

Чи є простий спосіб зробити це в Ubuntu?


Відповіді:


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є власна рядок для ідентифікації цієї збірки.

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


чому вони нічого не говорять вам про цю різницю, я вважаю, що це диференція - це просто дифф, вона може містити все.
user827992

Я не знаю, вам доведеться запитати їх (google для Canonical Kernel Team). Я щойно розповів вам, як його побудувати;)
останній

1
ОК, останнє питання, як застосувати цей стислий розріз? : DI треба зайти в linux-3.2.0каталог і запустити patch -p1 <../patch.diff?
user827992

1
Не потрібно застосовувати різницю; 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, показуючи архіви джерела ядра, доступні для завантаження

Після cdпереходу до каталогу, куди ви завантажили архів, ви можете витягнути його за допомогою tar:

tar xf linux-3.16.1.tar.xz

Встановіть необхідні інструменти збирання та виконайте конфігурацію ядра.

Щоб отримати ланцюжок інструментів Ubuntu ( gcc, makeі так далі), встановіть основнийВстановіть істотну збірку метапакет:

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

makeЦілі xconfigта menuconfig. Надають два досить зручні для користувача способи налаштування того, що входить у ваше ядро .

xconfigзапускає утиліту графічної конфігурації, а menuconfigна основі тексту (тобто її інтерфейс повністю відображається у вашому терміналі). Для кожного потрібне додаткове програмне забезпечення, яке не надається істотним складаннямВстановіть істотну збірку .

Щоб графічно налаштувати , встановіть libqt4-devВстановити libqt4-dev та pkg-configВстановіть pkg-config та запустітьmake xconfig:

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

Для налаштування в терміналі встановітьlibncurses5-dev(спасибі Хану за цю інформацію) та запустіть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 від Адрон та man installkernel.

Остаточна настройка, тому ядро ​​можна запустити і завантажувати систему:

Частково цей розділ базується на інформації в ядрі / компіляції .

З ядром тепер, де воно має бути, йому потрібно:

Створіть свої 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-бітних програм.
Новичок

Можливо, краще знайти пакет, незалежний від версії ... Я не впевнений, що існує.
Hannu

@EliahKagan Дякую Чи це нормально зараз, або я повинен його повністю видалити? Я не маю жодних проблем у цьому.
Новичок

1
-1 Це не створює ядро Ubuntu . Він навіть не створює .deb файлів. Це рецепт проблем.
Олександр Дубінський

3

Швидкі інструкції зі створення ядра 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.