Сборка ядра linux opensuse

Как собрать ядро в SUSE

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

Все это было протестировано на 10.1.

Это не единственный способ достижения данной задачи. Я ничего не могу гарантировать насчет того, что это будет работать у вас

Цель статьи — собрать kernel rpm package , который может быть инсталлирован на вашу систему, а затем на другие SUSE-системы.

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

Нужно проинсталлировать пакет ncurses-devel , который понадобится для команды make menuconfig :

Далее надо будет модифицировать несколько средств. Если мы это не сделаем то получим предупреждение во время сборки ядра:

/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 ;; :

[. ] #kernel-*) is_kernel_package=1 ;; kernel*) is_kernel_package=1 ;; [. ]
[. ] #kernel-*) is_kernel_package=1 ;; kernel*) is_kernel_package=1 ;; [. ]
[. ] #kernel-*) is_kernel_package=1 ;; kernel*) is_kernel_package=1 ;; [. ]

Загрузка исходников

Идем на www.kernel.org и выбираем там linux-2.6.18.2.tar.bz2 (здесь: http://www.kernel.org/pub/linux/kernel/v2.6/). Заходим в каталог /usr/src и качаем :

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2

Распаковываем и создаем 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

Можно также выполнить prepatches. Например,если вам нужна фича,которая доступна только в 2.6.19-rc6. Для этого доступен патч patch-2.6.19-rc6.bz2 . Его можно применить для ядра 2.6.18 kernel, но не для 2.6.18.1 или 2.6.18.2. Причину смотрите на http://kernel.org/patchtypes/pre.html:

Препатч — это фактически альфа-релиз. Он живет в тестовом каталоге архива.

Читайте также:  Linux convert pdf to libreoffice

Поэтому,если вы хотите собрать версию ядра 2.6.19-rc6 , нужно загрузить версию 2.6.18 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2) вместо 2.6.18.2!

Как наложить патч 2.6.19-rc6 patch для 2.6.18:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc6.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1 —dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1

Конфигурация ядра

Мы будем итспользовать конфигурацию текущего ядра как основу для нового ядра. Скопируем существующий конфиг в /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 по вкусу.

Если вы проинсталлируете 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/ каталоге. Выполним:

У меня он был назван 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

# Modified by YaST2. Last modification on Wed Nov 15 14:37:56 CET 2006 color white/blue black/light-gray default 0 timeout 8 title SUSE Linux 10.1 - 2.6.18.2 root (hd0,0) kernel /vmlinuz-2.6.18.2-default root=/dev/sda3 vga=0x314 resume=/dev/sda2 splash=silent showopts initrd /initrd-2.6.18.2-default ###Don't change this comment - YaST2 identifier: Original name: linux### title SUSE Linux 10.1 root (hd0,0) kernel /vmlinuz root=/dev/sda3 vga=0x314 resume=/dev/sda2 splash=silent showopts initrd /initrd ###Don't change this comment - YaST2 identifier: Original name: floppy### title Floppy chainloader (fd0)+1 ###Don't change this comment - YaST2 identifier: Original name: failsafe### title Failsafe -- SUSE Linux 10.1 root (hd0,0) kernel /vmlinuz root=/dev/sda3 vga=normal showopts ide=nodma apm=off acpi=off noresume nosmp noapic maxcpus=0 edd=off 3 initrd /initrd

(Можно было вместо яста просто ручками добавить

title SUSE Linux 10.1 - 2.6.18.2 root (hd0,0) kernel /vmlinuz-2.6.18.2-default root=/dev/sda3 vga=0x314 resume=/dev/sda2 splash=silent showopts initrd /initrd-2.6.18.2-default

в самом начале /boot/grub/menu.lst

Читайте также:  Файловый менеджер линукс терминал

Если все ОК,новое ядро загрузится. Вы можете проверить,действительно ли оно новое:

Если система НЕ грузится,перезагружаемся и выбираем старое ядро:

Попробуйте пересобрать все по новой.

Источник

Блог веселого программиста

Я надеюсь здесь собрать все, что мне кажется интересным. Возможно, это понравится и Вам.

Как собрать ядро для OpenSuSe 11

The Linux Kernel

Ядро, которое идет вместе с дистрибутивом OpenSuSe 11, достаточно компактное и неплохо напичкано всякими примочками. Но если есть желание выжать из своей системы максимум возможностей, без пересборки ядра не обойтись.

Для начала надо установить пакет kernel-source через Yast. Исходники ядра лягут в свои директории, и создастся симлинк на эти исходники – /usr/src/linux.

После этого выполняем следующие команды:

cd /usr/src/linux
make mrproper

make mrproper создает такую же конфигурацию для компиляции ядра, которая сейчас используется в системе. Это очень удобно, из нее всего лишь надо будет выкинуть лишее или добавить желаемое.

Это самый отвественный этап. Здесь выкидывается всякая ненужная хрень. Например, я собирал ядро для своего ноутбука. Там была масса всякой ненужной гадости, которая совершенно точно не пригодится на нем – поддержка RAID-массивов, виртуализация и многое другое. Если эти фичи поотключать, ядро становится меньше и соответственно, при использовании облегченного ядра остается больше ресурсов для других процессов. Здесь еще важно поменять название ядра. Если оно именовалось как default, то лучше его переименовать, например, в mykernel001. Потому что при выходе нового ядра kernel-default Yast просто-напросто перепишет облегченное ядро новой версией.

Ядро собирается очень долго, на моем старом ноутбуке процесс сборки занял около двух часов.
RPM пригодится, если у вас есть несколько ноутбуков одинаковых моделей. Для установки на другой ноутбук собранного ядра достаточно скопировать получившися rpm. Нет нужды повторно собирать ядро.
Получившееся ядро в виде rpm легко установить на любой из ноутбуков с помощью команд:

rpm -ivh kernel-2.6.25.160.1-2.i386.rpm
mkinitrd

После этого остается только поправить конфиг загрузчика (grub или lilo), чтобы была возможность выбрать версию ядра, с которой будет загружаться система. Сразу отказываться от старого проверенного ядра не стоит, вдруг при сборке ядра отключили что-то лишее и какое-нибудь устройство перестало работать. Поэтому не исключено, что ядро придется пересобирать несколько раз для того, чтобы достичь оптимальной производительности системы.

Как собрать ядро для OpenSuSe 11 : 4 комментария

Камрад, какой у тебя получается размер rpm после сборки ядра через make rpm?
У меня оно просто гигантское получается, хотя делаю на основе действующего конфига. rpm 215 метров.

По-разному получается. Если вклепать в ядро все загружаемые модули, ядро действительно получится гигантское, но это не наш путь.
Последнее ядро что я собрал занимало примерно 2,6 Мб. Но как правило, компактное ядро получается не сразу, периодически приходится пересобирать его по нескольку раз с различными опциями.

Читайте также:  Astra linux сервер безопасности

В том то и штука, что для пробы собрал готовое дефолтное ядро на основе конфига из /boot. 245 мегов как с куста вся rpm-ка. И само ядрышко 80 метров в /boot заняло.
Через make && make install получилось как положено, хотя конфиг не менял.

Странно. Сборку начинал с make mrproper? По идее ядро должно собраться с теми опциями, с какими и было собрано дефолтное ядро.

Источник

Сборка нового ядра для OpenSUSE?

Кто-нибудь на форуме собирал rpm пакеты kernel в opensuse из src.rpm? С успешным наложением своих патчей? Там очень страшное содержимое в src.rpm которое даже не понятно как редактировать.

5.15 пока что там нету, хотел опробовать новый ntfs, и заодно наложить патчи xanmod ядра. Там видимо лютый гемор с наложением своих патчей и их тучей скриптовой каши на которой нет никакой документации, поэтому автор xanmod не желает поддерживать opensuse, хотя, казалось бы, он мог собирать в их OBS, да и для дебианов убунт тоже.

bhfq ★★★★★ ( 02.11.21 11:23:21 MSK )
Последнее исправление: bhfq 02.11.21 11:24:16 MSK (всего исправлений: 2)

Там видимо лютый гемор с наложением своих патчей

Вот в Магейе ядра довольно просто пересобираются, можно легко добавить свои патчи.

Блин опять переустанавливать систему xd

Посмотрел что там с пересборкой ядра. Да, разработчики openSUSE нагородили огород.

В Магейе вообще всё в одном .src.rpm файле. Можно распаковать, подправить и пересобрать. В openSUSE так не получится.

Исходные пакеты разных видов ядер типа .nosrc.rpm. Внутри только .spec файлы. При этом, например, частично используются файлы из пакета kernel-source. Но этого мало.

По ходу, разработчики openSUSE просто добавляют нужные файлы руками и собирают пакеты. А где их брать теперь совершенно непонятно.

Кстати, теперь обновления ядра openSUSE Leap приходят в репозиторий sle-update.

А где их брать теперь совершенно непонятно.

А, стоп. Они обнаружились в kernel-source*.src.rpm.

  • Содержимое kernel-source*.src.rpm извлекаем в rpmbuild/SOURCES/
  • Содержимое какого-нибудь kernel-default*.nosrc.rpm извлекаем в rpmbuild/SPECS/

Всё. Можно накладывать свои патчи в rpmbuild/SOURCES/ и пересобирать.

saahriktu ★★★★★ ( 03.11.21 01:35:58 MSK )
Последнее исправление: saahriktu 03.11.21 01:36:19 MSK (всего исправлений: 1)

Похожие темы

  • Форум RPM пакет не ставится и не ругается. (2006)
  • Форум Rh 7.1 and kernel compiling (2001)
  • Форум сборка source rpm (2004)
  • Форум Обновление ядра openSUSE: вопросы, и поиск уже написанного руководства (2012)
  • Форум как заставить opensuse сохранять rpm (2007)
  • Форум kotd в opensuse (2008)
  • Форум Кастомная сборка GHC (2015)
  • Форум Установка нового ядра на Red Hat 6.2 (2001)
  • Форум Сборка ядра из исходников (2015)
  • Форум Screenleats в openSUSE 11.4 (2014)

Источник

Оцените статью
Adblock
detector