Serg iakovlev

Як зібрати ядро ​​в SUSE

Кожен дистрибутив має набір специфічних засобів для збирання ядра з початкових кодів. У цій статті піде мова про збірку ядра в SuSE. Будуть використані вихідні з www.kernel.org (vanilla kernel). Буде показано, як патчить вихідні ядра.

Все це було протестовано на 10.1.

Це не єдиний спосіб досягнення даного завдання. Я нічого не можу гарантувати щодо того, що це буде працювати у вас

Мета статті - зібрати kernel rpm package. який може бути інстальований на вашу систему, а потім на інші SUSE-системи.

Необхідний мінімум для збірки ядра

Потрібно проинсталлировать пакет ncurses-devel. який знадобиться для команди make menuconfig:

yast -i ncurses-devel

Далі треба буде модифікувати кілька засобів. Якщо ми це не зробимо то отримаємо попередження під час складання ядра:

/usr/lib/rpm/find-requires.ksyms: line 12: / usr / bin / nm: Argument list too long

і ми не зможемо інсталювати наш kernel rpm package.

Для початку, давайте подстрахуем:

cp /usr/lib/rpm/find-provides.ksyms /usr/lib/rpm/find-provides.ksyms_orig
cp /usr/lib/rpm/find-requires.ksyms /usr/lib/rpm/find-requires.ksyms_orig
cp /usr/lib/rpm/find-supplements.ksyms /usr/lib/rpm/find-supplements.ksyms_orig

Далі ми відкриваємо кожен з 3-х вищеназваних скриптів і замінюємо рядок kernel- *) is_kernel_package = 1 ;;
на рядок
kernel *) is_kernel_package = 1 ;; :

Розпаковуємо і створюємо symlink linux:

tar xjf linux-2.6.18.2.tar.bz2
ln -s linux-2.6.18.2 linux
cd / usr / src / linux

Патчі (Optional)

Вам можуть знадобитися драйвера, яких немає в ядрі, або вам потрібна підтримка віртуалізації, або якась інша технологія, якої ще немає в ядрі. У всіх цих випадках вам потрібен патч.

Тепер уявімо, що ви завантажили потрібний вам патч (я обізву його умовно patch.bz2). Робиться це в такий спосіб. (Ви як і раніше перебуваєте в / usr / src / linux):

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1

Перша команда-просто тест, який нічого не робить. Якщо в ньому не буде помилок, тільки тоді ви можете запускати другу команду.

Якщо патч має розширення (.gz) замість bzip2 (.bz2), ядро ​​патч так:

gunzip -c /usr/src/patch.gz | patch -p1 --dry-run
gunzip -c /usr/src/patch.gz | patch -p1

Препатч - це фактично альфа-реліз. Він живе в тестовому каталозі архіву.

Як накласти патч 2.6.19-rc6 patch для 2.6.18:

конфігурація ядра

Ми будемо ітспользовать конфігурацію поточного ядра як основу для нового ядра. Скопіюємо існуючий конфиг в / usr / src / linux:

make mrproper
cp / boot / config-`uname -r` ./.config

З'являється конфігураційне меню. Вибираємо Load an Alternate Configuration File

Serg iakovlev

Serg iakovlev

Далі вибираємо General Setup --->
(-default) Local version
-default
Наш kernel rpm package буде названий як kernel-2.6.18.2default-1.i386.rpm. Можна вибрати -custom за смаком.

Я вибрав -default.

Якщо ви проінсталліруете kernel-2.6.18.2default-1.i386.rpm і потім надумаєте зібрати нове ядро ​​версії 2.6.18.2, потрібно використовувати іншу version string, тобто -default1. -default2. і т.д. а інакше ви не зможете його проинсталлировать, тому що kernel-2.6.18.2default-1.i386.rpm вже є!

Serg iakovlev

Serg iakovlev

Serg iakovlev

В кінці. коли натиснете Exit. На наступне питання (Do you wish to save your new kernel configuration?) Потрібно відповісти Yes.

Serg iakovlev

збірка ядра

Для складання наберіть команду:

І віддаємося на волю часу.

Інсталяція нового ядра

Після успішної компіляції будуть створені 2 пакети src.rpm і rpm. src.rpm лежить в / usr / src / packages / SRPMS / каталозі. Виконаємо:

ls -l / usr / src / packages / SRPMS /

У мене він був названий kernel-2.6.18.2default-1.src.rpm.

rpm package лежить в / usr / src / packages / RPMS / i386 /. / Usr / src / packages / RPMS / i586 /. / Usr / src / packages / RPMS / i686 /. / Usr / src / packages / RPMS / x86_64 /. і т.д. в залежності від вашої архітектури. У мене він в / usr / src / packages / RPMS / i386 /. набираємо

ls -l / usr / src / packages / RPMS / i386 /

Він названий як kernel-2.6.18.2default-1.i386.rpm.

Тепер ми можемо проинсталлировать наш kernel rpm package.

cd / usr / src / packages / RPMS / i386 /
rpm -ivh kernel-2.6.18.2default-1.i386.rpm

Тепер ви можете провести інсталяцію на будь-який SUSE машині.

Створимо ramdisk для ядра, інакше система не завантажиться з нього:

(Фактично ця команда сода ramdisks для всіх наявних ядер)

конфігурація GRUB

Потрібно настроїти GRUB. Замість зміни /boot/grub/menu.lst запустимо

Йдемо в System -> Boot Loader.

Serg iakovlev

На наступному екрані ви побачите вміст конфіга GRUB. Вибираємо Add для додавання:

Serg iakovlev

Вибираємо Clone Selected Section для копіювання існуючого запису GRUB:

Serg iakovlev

Набираємо ім'я для ядра. наприклад SUSE Linux 10.1 - 2.6.18.2. вибираємо Kernel -> Browse.

Serg iakovlev

Ви побачите вміст каталогу / boot де лежить ваше нове ядро. Виберіть файл, який зазвичай починається з vmlinuz (типу vmlinuz-2.6.18.2-default):

Serg iakovlev

Вибираємо Initial RAM Disk -> Browse.

Serg iakovlev

Ви побачите вміст каталогу / boot. Потрібно вибрати відповідний ramdisk. який зазвичай починається з initrd (типу initrd-2.6.18.2-default):

Serg iakovlev

Serg iakovlev

Ви побачите новий запис GRUB. Відзначаємо її і тиснемо на Up.

Serg iakovlev

Потім тиснемо на Set as Default.

Serg iakovlev

Serg iakovlev

Serg iakovlev

Тепер можна перевірити /boot/grub/menu.lst