Пересборка ядра.

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

Аватара пользователя
Archangel
Сообщения: 431
ОС: Slackware64-14.1

Пересборка ядра.

Сообщение Archangel »

Сколько раз пытался перемобрать ядро, почему-то всегда получал неработоспособное(хотя под АРМы вроде вполне получается),
Делаю все по инструкции инструкция для Slackware 14, только с учетом что у меня 64-битная система.
Стянул исходники с kernel.org, тогда еще последняя версия была 3.10.9. взял как советуют конфиг от того что в системе было, это 3.2.45. Положил по адресу /usr/src/linux-3.10.9, сделал:

Код: Выделить всё

make menuconfig

сохранил конфиг и дальше по туториалу:

Код: Выделить всё

make bzImage modules modules_install
cp arch/x86_64/boot/bzImage /boot/bzImage-3.10.9
cp System_map /boot/System.map-3.10.9
ln -s /boot/System.map-3.6.6 /boot/System.map
ln -s /boot/bzImage-3.10.9 /boot/vmlinuz

В этом туториале сделал пару изменений, как мне кажется верных. 1-е компилил для 64-х битной системы, поэтому bzImage скопировал не из "arch/x86/boot/bzImage", а "arch/x86_64/boot/bzImage". 2-е, автор туториала сначала копирует ядро:

Код: Выделить всё

cp arch/x86/boot/bzImage /boot/image-3.6.6

а ссылку делает:

Код: Выделить всё

ln -s /boot/bzImage-3.6.6 /boot/vmlinuz

Я так понимаю опечатка в именах image-3.6.6 и bzImage-3.6.6 - должны быть одинаковы.
сделал в lilo.conf секцию для старого ядра, на случай если не заведется, и правильно сделал потому как - не заводиться. Я конечно понимаю, что можно взять пакеты из current, но хочется понять что я делаю не так и все таки научиться делать как надо.
Лог ошибки где ядро не заводиться попробую выложить позже, делал манипуляции удаленно и сейчас вижу просто, что машина не стартанула.
Проделал то же самое, при этом взяв конфиг из пакета исходников ядра для current, ядро 3.10.9 и система опять же не стартанула.
Спасибо сказали:

Аватара пользователя
fines
Сообщения: 359
ОС: Slackware-current

Re: Пересборка ядра.

Сообщение fines »

Собирал по другой статье от "Alien", все получилось как надо, без проблем.
Спасибо сказали:

BratSinot
Сообщения: 812
ОС: Slackware64

Re: Пересборка ядра.

Сообщение BratSinot »

Archangel писал(а):
04.09.2013 19:33
В этом туториале сделал пару изменений, как мне кажется верных. 1-е компилил для 64-х битной системы, поэтому bzImage скопировал не из "arch/x86/boot/bzImage", а "arch/x86_64/boot/bzImage". 2-е, автор туториала сначала копирует ядро:

Код: Выделить всё

cp arch/x86/boot/bzImage /boot/image-3.6.6

а ссылку делает:

Код: Выделить всё

ln -s /boot/bzImage-3.6.6 /boot/vmlinuz

Я так понимаю опечатка в именах image-3.6.6 и bzImage-3.6.6 - должны быть одинаковы.
сделал в lilo.conf секцию для старого ядра, на случай если не заведется, и правильно сделал потому как - не заводиться. Я конечно понимаю, что можно взять пакеты из current, но хочется понять что я делаю не так и все таки научиться делать как надо.

Вы батенька поменьше думайте, а побольше пробуйте и шарьтесь по папкам. Начнем с того, что то что вы скопировали, это совершенно не то. Для x86 и amd64 систем ядро лежит в одном месте и называется одинакового "arch/x86/boot/bzImage".

А вообще, коли вы используете Slackware, возьмите SlackBuild'ы (т.к. у вас более новое ядро, то используйте новые конфиги). Когда соберете "make bzImage modules modules_install", измените версию в kernel-generic.SlackBuild и kernel-modules.SlackBuild соответственно (можете еще название пакета и bzImage изменить, если у вас несколько ядер).
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Пересборка ядра.

Сообщение drBatty »

Archangel вы меня простите, но что значит"не стартанула" подкрепляйте хоть фотками
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Пересборка ядра.

Сообщение bormant »

Тот же самый перевод статьи от Alien Bob-а на сайте Slackware Documentation Progect: http://docs.slackware.com/ru:howtos:slackw...:kernelbuilding
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Пересборка ядра.

Сообщение bormant »

Archangel писал(а):
04.09.2013 19:33
тогда еще последняя версия была 3.10.9. взял как советуют конфиг от того что в системе было, это 3.2.45.

Лучше что-то поближе, например, http://slackware.osuosl.org/slackware-current/source/k/, а затем
# make oldconfig
чтобы задать только новые параметры, или даже
# make silentoldconfig
Спасибо сказали:

Аватара пользователя
Archangel
Сообщения: 431
ОС: Slackware64-14.1

Re: Пересборка ядра.

Сообщение Archangel »

Брал конфиг от 3.10.9 из пакета current kernel-source-3.10.9-noarch-1.txz - результат тот же. Результат приложил в файле.
BratSinot, спасибо за советы. Я обязательно возьму слакбилды, как только добьюсь того чего хочу руками, в противном случае я нифига не пойму как они работают. У меня на данный момент цель не просто сделать, а разобраться как его делать правильно, потом уже можно автоматизировать. А по папкам обязательно пошарюсь, но все равно не понятно что тогда такое находиться в папке х86_64.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Пересборка ядра.

Сообщение drBatty »

Archangel писал(а):
04.09.2013 19:33
Я конечно понимаю, что можно взять пакеты из current, но хочется понять что я делаю не так и все таки научиться делать как надо.

дык в Slackbuild'е расписаны обычные bash-команды. Какая из них вам непонятна?

Hint: не обязательно выполнять Slackbuild, можно ручками выполнить те же самые команды, одновременно с этим читая man pages и другую документацию, если смысл ЭТОЙ команды вам непонятен.

Archangel писал(а):
05.09.2013 20:42
Эскизы прикрепленных изображений

самой ошибки уже не видно. Вангую, что не получилось смонтировать rootfs. Как вы её монтируете? Initrd собрали? Или так, напрямую?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

BratSinot
Сообщения: 812
ОС: Slackware64

Re: Пересборка ядра.

Сообщение BratSinot »

Archangel писал(а):
05.09.2013 20:42
Брал конфиг от 3.10.9 из пакета current kernel-source-3.10.9-noarch-1.txz - результат тот же. Результат приложил в файле.
BratSinot, спасибо за советы. Я обязательно возьму слакбилды, как только добьюсь того чего хочу руками, в противном случае я нифига не пойму как они работают. У меня на данный момент цель не просто сделать, а разобраться как его делать правильно, потом уже можно автоматизировать. А по папкам обязательно пошарюсь, но все равно не понятно что тогда такое находиться в папке х86_64.

Я дополню то что вам сказал человек выше. Вам нужен либо initrd с модулем файловой системы, либо файловая система вкомпиленная в ядро. Про initrd здесь: http://mirrors.slackware.com/slackware/sla...0/README.initrd

Код: Выделить всё

mkinitrd -c -k <номер ядра> -m <модуль fs> -f <fs initrd> -r <root>

<номер ядра> -- вписывает номер ядра (в вашем случае 3.10.9)
<модуль fs> -- пишете FS которая у вас на корне
<fs initrd> -- лучше напишите тоже что и выше
<root> -- укажите корневой раздел, к примеру /dev/sdb3

Затем в /etc/lilo.conf пишете нечто подобное:

Код: Выделить всё

# Linux bootable partition config begins
image = /boot/vmlinuz-generic-3.10.9
  initrd = /boot/initrd.gz
  root = /dev/sdb3
  label = Slackware
  read-only
# Linux bootable partition config ends

И соотвественно запускаете lilo.
Спасибо сказали:

Аватара пользователя
Archangel
Сообщения: 431
ОС: Slackware64-14.1

Re: Пересборка ядра.

Сообщение Archangel »

Сделал initrd, как Вы написали в предыдущем посте ситуация - не изменилась. rootfs - на ext4, он вроде как вкомпилен в ядро и должен подхватываться без каких-то телодвижений.
PS в /usr/src/linux-3.10-9/arch/x86_64/boot/ - лежит ссылка на ../../x86/boot/bzImage. Так что получается я копировал то же самое, в этот раз скопировал напрямую из каталога x86.
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Пересборка ядра.

Сообщение bormant »

Ядерные слакбилды Slackware саму компиляцию ядра не делают, только собирают пакеты из собранного ядра и установленных драйверов.
В первом приближении процесс мог бы быть таким (от root-а):

Код: Выделить всё

mkdir ~/bld; cd ~/bld
wget -r -nH --cut-dirs=4 -R.tar.xz,.tar.sign ftp://ftp.osuosl.org/pub/slackware/slackware-current/source/k
cd /tmp; wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.10.tar.xz
cd /usr/src/; tar xf /tmp/linux-3.10.10.tar.xz
cd linux-3.10.10
cat ~/bld/k/config-x86_64/config-generic-* > .config
make silentoldconfig   # или любой другой вариант настройки ядра
time make bzImage modules modules_install 2>&1 | tee /tmp/build.log
cd ~/bld/k/packaging-x86_64/kernel-generic/
VERSION=3.10.10 bash *Build
cd ~/bld/k/packaging-x86_64/kernel-modules
VERSION=3.10.10 bash *Build

Результат доступен по ссылке: http://ifolder.ru/37926311 в виде тарбола, содержащего пакеты kernel-generic и kernel-modules.

Ставим опакеченное:

Код: Выделить всё

installpkg /tmp/kernel-generic-3.10.10-*t?z /tmp/kernel-modules-3.10.10-*t?z
/usr/share/mkinitrd/mkinitrd_command_generator.sh -r -k 3.10.10 | bash

в /etc/lilo.conf

Код: Выделить всё

image = /boot/vmlinuz        # свежепоставленный пакет с ядром установит эту ссылку на своё ядро
  initrd = /boot/initrd.gz   # был создан выше
  root = /dev/sda2           # сверьтесь с /etc/fstab
  label = Slackware
  read-only
# постелим соломку -- дистрибутивное ремонтное ядро:
image = /boot/vmlinuz-huge-3.2.45
  root = /dev/sda2           # сверьтесь с /etc/fstab
  label = Recovery
  read-only

Обновляем загрузчик, перегружаемся, если все нормально:

Код: Выделить всё

# lilo
# reboot
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Пересборка ядра.

Сообщение drBatty »

Archangel писал(а):
06.09.2013 18:14
Сделал initrd, как Вы написали в предыдущем посте ситуация - не изменилась. rootfs - на ext4, он вроде как вкомпилен в ядро и должен подхватываться без каких-то телодвижений.

надо учесть, что если вы используете initrd, то rootfs монтируется дважды:
1. сначала монтируется дерево в ramfs (в память). Дерево надо подготовить дополнительно. У меня вот так:

# ll /boot/initrd-tree/

итого 34K drwxr-xr-x 2 root root 6,0K ноя 26 2008 bin/ drwxr-xr-x 2 root root 1,0K авг 26 00:55 dev/ drwxr-xr-x 3 root root 1,0K апр 2 2010 etc/ -rwxr-xr-x 1 root root 12K июн 22 09:27 init* -rw-r--r-- 1 root root 16 авг 26 00:55 initrd-name -rw-r--r-- 1 root root 0 апр 4 2008 keymap drwxr-xr-x 4 root root 1,0K авг 26 00:55 lib/ -rwxr-xr-x 1 root root 335 авг 26 00:55 load_kernel_modules* -rw-r--r-- 1 root root 0 июн 28 2007 luksdev -rw-r--r-- 1 root root 0 дек 19 2009 lukskey drwxr-xr-x 2 root root 1,0K мар 1 2004 mnt/ drwxr-xr-x 2 root root 1,0K мар 1 2004 proc/ -rw-r--r-- 1 root root 0 фев 21 2008 resumedev drwxr-xr-x 2 root root 1,0K ноя 26 2008 root/ -rw-r--r-- 1 root root 10 авг 26 00:55 rootdev -rw-r--r-- 1 root root 5 авг 26 00:55 rootfs drwxr-xr-x 2 root root 1,0K авг 21 2011 run/ drwxr-xr-x 2 root root 2,0K авг 26 00:55 sbin/ drwxr-xr-x 2 root root 1,0K июн 3 2007 sys/ drwxr-xr-x 3 root root 1,0K авг 26 00:55 usr/ -rw-r--r-- 1 root root 2 авг 26 00:55 wait-for-root


далее нужно собрать этот initrd. Это такой маленький Linux.
2. после того, как initrd загрузится, он монтирует настоящую rootfs. И совсем не обязательно, что-бы ext4 была вкомпиллена в ядро, initrd как раз и нужен для того, что-бы например как я здесь монтировать какие-то другие FS(у меня например тут f2fs).
Archangel писал(а):
06.09.2013 18:14
PS в /usr/src/linux-3.10-9/arch/x86_64/boot/ - лежит ссылка на ../../x86/boot/bzImage. Так что получается я копировал то же самое, в этот раз скопировал напрямую из каталога x86.

это образ ядра. Я не знаю какого именно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Archangel
Сообщения: 431
ОС: Slackware64-14.1

Re: Пересборка ядра.

Сообщение Archangel »

И так, сделал как написал уважаемый bormant (только для ядра 3.10.9), теперь новое ядро загружается. И как теперь разобраться почему оно не работает если я делаю не через сборку пакета?
Спасибо сказали:

Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: Пересборка ядра.

Сообщение yars »

Полагаю, проблема в initrd, вы либо не генерируете его, либо не кладете туда модул(ь,и) ядра, отвечающи(й,е) за файловую систему, использующуюся у вас как корневая. К этим модулям относятся драйверы файловой системы и контроллера жесткого диска как минимум. Неплохо бы еще увидеть фото экрана с сообщением об ошибке.
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:

Аватара пользователя
Archangel
Сообщения: 431
ОС: Slackware64-14.1

Re: Пересборка ядра.

Сообщение Archangel »

Я правильно понимаю, что все модули подгружаемые initrd перечислены в /boot/initrd-tree/load_kernel_modules ?
Когда ядро запускается содержимое load_kernel_modules - следующее:

Код: Выделить всё

modprobe -v hid
modprobe -v usbhid
modprobe -v ehci-hcd
modprobe -v uhci-hcd
modprobe -v mbcache
modprobe -v jbd2
modprobe -v ext4

Тогда дальше можно пробовать сделать руками(без пакетов) и сравнить эти файлы.
Экран с ошибкой - это как я понимаю нужно ловить с фотоаппаратом, потому как лог должен быть в /var/log/dmesg, но если система не запустилась, то она не успевает туда ничего записать.
Спасибо сказали:

Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: Пересборка ядра.

Сообщение yars »

Она не просто не успевает туда что-то записать, а не может этого сделать, потому что если корень не смонтирован - куда писать? Выходов остается только два - или на экран, или в COM-порт, через который посредством нуль-модемного кабеля подключена другая машина с работающим отладчиком.
Что касается load-kernel-modules - да, это он отвечает за загрузку модулей. Но они еще должны быть доступны, то есть должны лежать в одном из подкаталогов initrd-tree/lib/modules/`uname -r`.
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1337

Re: Пересборка ядра.

Сообщение bormant »

как теперь разобраться почему оно не работает если я делаю не через сборку пакета?
Сборка пакета не при чем.
Если собирали -generic- ядро и не задали специально сборку "в ядро" (y) драйвера для корневой файловой системы, то без успешного "make modules modules_install" все дальнейшие попытки обречены на провал -- модули для корневой ФС не собраны и не установлены, собирать initrd просто не из чего.

Для успешной загрузки с новым самосборным generic ядром достаточно правильных настроек и успешных
make bzImage modules modules_install
копирования arch/x86/boot/bzImage в /boot
создания initrd именно для новой версии ядра (mkinitrd или mkinitrd_commang_generator.sh нужно явно указать новую версию ядра ключом -k, иначе он по умолчанию возьмет текущую)
создания записи загрузчика для нового ядра и initrd (в случае LILO -- правки /etc/lilo.conf и вызова lilo)

ps. Модули для ядра версии, например, 3.10.9 с localversion smp будут ставиться в/загружаться из /lib/modules/3.10.9-smp и ниоткуда больше.

Проверяйте, что именно не доделали в прошлый раз...
Спасибо сказали: