Як зібрати ядро в 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
Далі вибираємо 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 вже є!
В кінці. коли натиснете Exit. На наступне питання (Do you wish to save your new kernel configuration?) Потрібно відповісти Yes.
збірка ядра
Для складання наберіть команду:
І віддаємося на волю часу.
Інсталяція нового ядра
Після успішної компіляції будуть створені 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.
На наступному екрані ви побачите вміст конфіга GRUB. Вибираємо Add для додавання:
Вибираємо Clone Selected Section для копіювання існуючого запису GRUB:
Набираємо ім'я для ядра. наприклад SUSE Linux 10.1 - 2.6.18.2. вибираємо Kernel -> Browse.
Ви побачите вміст каталогу / boot де лежить ваше нове ядро. Виберіть файл, який зазвичай починається з vmlinuz (типу vmlinuz-2.6.18.2-default):
Вибираємо Initial RAM Disk -> Browse.
Ви побачите вміст каталогу / boot. Потрібно вибрати відповідний ramdisk. який зазвичай починається з initrd (типу initrd-2.6.18.2-default):
Ви побачите новий запис GRUB. Відзначаємо її і тиснемо на Up.
Потім тиснемо на Set as Default.
Тепер можна перевірити /boot/grub/menu.lst