Как пересобрать ядро Linux?

Автор shiko, 09 Октября 2008, 14:10

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

resurtm

[quote name=\'dalvis\' post=\'3982\' date=\'17.3.2009, 11:38\']Здравствуйте! Подскажите кто знает! Вопрос в следующем, необходимо задействовать несколько пунктов в конфигурации ядра OS Linux Mandriva, на уже  установленной и работающей машине. Версия ядра 2.6.22.9 . Из собранной информации понял что можно это сделать через конфигурационный файл ядра, когда стал разбираться дальше возник спорный вопрос "какой конфиг править?", дело в том что конфигов два, один лежит в директории: /usr/src/linux-2.6.22.9-desktop-1mdv/.conf , а другой в : /proc/config.gz.  Вопрос, какой файл править т.е с каким мне работать и что это за файл  config.gz, он по содержанию один в один как .conf ???[/quote]

1) /proc/config.gz -- это сжатый конфиг. Распаковать можно при помощи gunzip (man gunzip или тут).

2) /usr/src/linux-2.6.22.9-desktop-1mdv/.conf и /proc/config.gz лучше сравнить diff'ом (man diff или тут).

3) Если различаются, то взять лучше /proc/config.gz и его изменять под свои нужды. Т.к. это и есть конфиг ядра, которое работает в данный момент.

dr Motor

обычно что config.gz, что .conf в каталоге сырцов одно и то же, разве нет?
 еще бывает что в /boot тот же конфиг валяется зачастую.  имхо, лучше покурить хорошенько хелпы к опциям ядра, изучить свое железо и пробежаться полностью по всему конфигу, какой бы он ни был. тогда точно будет щастье http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />



resurtm

[quote name=\'dr Motor\' post=\'3994\' date=\'17.3.2009, 21:29\']обычно что config.gz, что .conf в каталоге сырцов одно и то же, разве нет?[/quote]

Неизвестно, что могли напихать мэйнтейнеры его дистрибутива в пакет исходников ядра и в пакет образа ядра. Это в Gentoo они совпадают, т.к. собираешь и тут-же ставишь образ ядра.

dalvis

Цитировать1) /proc/config.gz -- это сжатый конфиг. Распаковать можно при помощи gunzip
Скажите а тогда что получается мне что его перед тем как править нужно я так понимаю распаковать, а потом что запаковать т.е вернуть в исходное положение? Так что ли? Или можно оставить как есть?
  И еще такой вопрос после внесения изменений в файл config.gz мне его надо просто сохранить или дать еще команду типа ($ make all) для пере компиляции ядра, подскажите что мне делать в моем случаи после внесения изменений в конфигурационный файл ядра.

dr Motor

[quote name=\'dalvis\' post=\'4001\' date=\'18.3.2009, 14:14\']
Цитировать1) /proc/config.gz -- это сжатый конфиг. Распаковать можно при помощи gunzip
Скажите а тогда что получается мне что его перед тем как править нужно я так понимаю распаковать, а потом что запаковать т.е вернуть в исходное положение? Так что ли? Или можно оставить как есть?
  И еще такой вопрос после внесения изменений в файл config.gz мне его надо просто сохранить или дать еще команду типа ($ make all) для пере компиляции ядра, подскажите что мне делать в моем случаи после внесения изменений в конфигурационный файл ядра.
[/quote]
слово "распаковать" здесь как то не очень применимо.  достаточно дать команду zcat  /proc/config.gz > /папка_с_исходниками_ядра/.config.  только предварительно убрав куда нить файл конфиг который уже лежит в папке с исходниками, а потом сравнть их.  чтобы сконфигурировать ядро есть несколько способов  -
простейший - открыть этот файл в редакторе и ручками подправить то что нужно.  можно запустить режим опроса - последовательно отвечем на более 3000 вопросов http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' /> - не лучший вариант.

самый приемлемый для вас будет пожалуй  зайти в папку с исходниками и конфигурить с помощью меню  -  make menuconfig- конфигурим, сохраняем. потом компилим.
есть и полностью иксовые варианты конфигурационного меню - gconfig или kconfig - но лучше все таки использовать menuconfig, имхо.



dalvis

19 Марта 2009, 01:05 #25 Последнее редактирование: 19 Марта 2009, 01:07 от dalvis
Спасибо за подробное разъяснения! У меня еще вопрос после компиляции ядра необходимо внести изменения в загрузчик lilo а именно отредактировать файл /etc/lilo.conf честно говоря я у себя этот файл найти не смог, а так же конфигов других загрузчиков так же нет:  /etc/aspldr.conf и /boot/grub/grub.conf хотя у последнего директория /boot/grub есть, а конфига в ней нет. Как мне все таки вычислить какой используется у меня загрузчик и где его конфиг может быть, работаю на Linux Mandriva 2008.1???

dr Motor

19 Марта 2009, 03:11 #26 Последнее редактирование: 19 Марта 2009, 03:16 от dr Motor
[quote name=\'dalvis\' post=\'4020\' date=\'19.3.2009, 1:05\']Спасибо за подробное разъяснения! У меня еще вопрос после компиляции ядра необходимо внести изменения в загрузчик lilo а именно отредактировать файл /etc/lilo.conf честно говоря я у себя этот файл найти не смог, а так же конфигов других загрузчиков так же нет:  /etc/aspldr.conf и /boot/grub/grub.conf хотя у последнего директория /boot/grub есть, а конфига в ней нет. Как мне все таки вычислить какой используется у меня загрузчик и где его конфиг может быть, работаю на Linux Mandriva 2008.1???[/quote]

)) lilo.conf и не найдешь - по дефолту майнтейнеры этот загрузчик сейчас уже не ставят на свои дистры.  тем более что нашлась  таки /boot/grub  - вот это то и есть то что нужно - згрузчик grub.   файл grub.conf  в нем есть опять же не всегда, но зато обязательно есть файл menu.lst  - вот он тоже подойдет.   после сборки ядра это самое свежесобранное ядро нужно будет скопировать в boot поименовав его как будет удобно (главное чтобы название НЕ совпадало со старым ядром ))   и затем дописать в файле /boot/grub/menu.lst  строки для возможности загрузки нового ядра.  если все будет сделано верно, при перезагрузке машины получаете в обычном   загрузочном меню еще один пункт - новое ядро - выбираете его и загружаетесь. если же загрузка будет неудачной, можно всегда ребутнуть машину и загрузиться со старым ядром - и спокойно искать причину неработоспособности нового - система будет работать как раньше. кстати, при самосборном ядре становится не нужен initrd, так что его в опции загрузки нового ядра можно не включать.

p.s.  вообще то все это уже сто раз описано, и дабы исключить в дальнейшем такие простые вопросы приведу несколько полезных для вас ссылок, если вы еще не ознакомились с этими материалами, конечно.
в первую очередь для вас будут обязательны к прочтению  статьи  "ядерная физика для домохозяйки" и   "ядерный распад или термоядерный синтез".  
также рекомендуются  раскуриванию еще немножко http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' /> материалов  тут и тут (там уж выбирайте сами что именно вас больше интересует).   также будет полезен к ознакомлению  этот замечательный ресурс, где хотя бы частично  описаны хелпы к параметрам ядра на русском.  
после ознакомления с этими материалами думаю пересборка ядра не составит трудаhttp://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/wink.gif\' class=\'bbc_emoticon\' alt=\';)\' />

p.p.s   дорогу осилит идущий...     © хз_кто-не_помню



dalvis

20 Марта 2009, 22:55 #27 Последнее редактирование: 20 Марта 2009, 22:56 от dalvis
Огромное мерси, за помощь !!! Предложенный вами материал для изучения я в основном прочитал, но как правила вопросы возникают как раз тогда, когда начитаешь ковыряться практически, то не так, это не там находится, вот так вот! Еще раз спасибо!!! http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' />

norman

Здравствуйте! Тоже столкнулся с проблемой компиляции ядра и ситуация даже  чем то похожа. Мне необходимо сделать шлюз из линукс машины, а для этого необходимо настроить iptables, что собственно и привело меня к вопросу компиляции ядра. Так вот если ближе к телу. То у меня возник следующий вопрос по поводу файла menu.lst у меня он выглядит так:
timeout 10
color black/cyan yellow/cyan
gfxmenu (hd0,0)/boot/gfxmenu
default 0

title linux
kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda1  resume=/dev/sda5 splash=silent vga=788
initrd (hd0,0)/boot/initrd.img

title linux-nonfb
kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux-nonfb root=/dev/sda1  resume=/dev/sda5
initrd (hd0,0)/boot/initrd.img

title failsafe
kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=failsafe root=/dev/sda1  failsafe
initrd (hd0,0)/boot/initrd.img
какую запись
 и куда сделать в данном файле, что бы система загрузилась с нужного мне ядра т.к во всех примерах описывается работа и примеры к файлу lilo.conf а про menu.lst можно было бы конечно и поэкспериментировать но не тот случай не хочется рисковать, подскажите как решить этот вопрос???

Drone

27 Марта 2009, 19:41 #29 Последнее редактирование: 27 Марта 2009, 19:53 от Drone
Вообще-то у меня при компиляции ядра Grub сам апдейтит menu.lst
Чтобы грузиться с ядра которое ты собрал у себя на машине нужно:
напиши выше [color=\"#FF0000\"]title linux[/color] запись (дабы в случае чего можно было загрузиться со старого ядра (здесь - linux)):
[color=\"#8B0000\"]Примечание[/color]: Вместо newkernel ты должен указать скомпилированое ядро (смотрим здесь его: [color=\"#FF0000\"]/boot[/color]) например [color=\"#FF0000\"]2.6.27-14-generic[/color]
title linux-newkernel
kernel /boot/vmlinuz-newkernel root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd /boot/initrd.img-newkernel

"Живой" пример:
title linux-2.6.27-14-generic
kernel /boot/vmlinuz-2.6.27-14-generic root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd /boot/initrd.img-2.6.27-14-generic

Перезагрузись и попробуй загрузиться с linux-newkernel, отпишись потом как прошло. Кстати у тебя дистр Mandriva стоит?

dr Motor

2 Drone:  а зачем initrd ?  если ядро собирается вручную то инитрд не нужен ведь.



Drone

Разве? Вродь когда ядро инсталлируется оно же создает initrd.img, который необходимые модули ядра содержит. Разве нет?..

dr Motor

[quote name=\'Drone\' post=\'4156\' date=\'27.3.2009, 22:25\']Разве? Вродь когда ядро инсталлируется оно же создает initrd.img, который необходимые модули ядра содержит. Разве нет?..[/quote]

тут еще смотря как собирается ядро. если генкернелом, то да - так и есть.  если же ядро собрано полностью вручную и потом командой make && make modules_install, и затем скопировано в /boot/, то initrd не нужен. вообще, всех тонкостей уже не припомню, но я пересобираю ядро именно так. полностью с нуля ядро собирал только дважды - один раз для десктопа, и один раз для ноута. все остальные пересборки (а они были раз двадцать http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' />) - добавление убирание чего-либо происходят очень быстро и просто.  и никогда не юзал инитрд.



Drone

[quote name=\'dr Motor\' post=\'4158\' date=\'27.3.2009, 22:35\'][quote name=\'Drone\' post=\'4156\' date=\'27.3.2009, 22:25\']Разве? Вродь когда ядро инсталлируется оно же создает initrd.img, который необходимые модули ядра содержит. Разве нет?..[/quote]

тут еще смотря как собирается ядро. если генкернелом, то да - так и есть.  если же ядро собрано полностью вручную и потом командой make && make modules_install, и затем скопировано в /boot/, то initrd не нужен. вообще, всех тонкостей уже не припомню, но я пересобираю ядро именно так. полностью с нуля ядро собирал только дважды - один раз для десктопа, и один раз для ноута. все остальные пересборки (а они были раз двадцать http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' />) - добавление убирание чего-либо происходят очень быстро и просто.  и никогда не юзал инитрд.
[/quote]
Дело конечно занятное http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />
Надо будет как-нить время найти тоже пересобрать с нуля полностью - так сказать набраться опыта)

norman

27 Марта 2009, 23:44 #34 Последнее редактирование: 27 Марта 2009, 23:45 от norman
Да у меня Linux Mandriva 2008.1
Цитироватьkernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda1  resume=/dev/sda5 splash=silent vga=788
initrd (hd0,0)/boot/initrd.img
Вопрос чисто для перестраховки  http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/rolleyes.gif\' class=\'bbc_emoticon\' alt=\':rolleyes:\' />
скажите а вот у вас в примере нет вот этих параметров в начале строки (hd0,0) это критично или нет по моему они обозначают диск на котором стоит ось. Так мне указывать их или нет???

Drone

28 Марта 2009, 09:48 #35 Последнее редактирование: 28 Марта 2009, 09:50 от Drone
[quote name=\'norman\' post=\'4163\' date=\'27.3.2009, 23:44\']Да у меня Linux Mandriva 2008.1
Цитироватьkernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda1  resume=/dev/sda5 splash=silent vga=788
initrd (hd0,0)/boot/initrd.img
Вопрос чисто для перестраховки  http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/rolleyes.gif\' class=\'bbc_emoticon\' alt=\':rolleyes:\' />
скажите а вот у вас в примере нет вот этих параметров в начале строки (hd0,0) это критично или нет по моему они обозначают диск на котором стоит ось. Так мне указывать их или нет???
[/quote]
Я так и подумал что Мандрива - оформление menu.lst характерно для Мандривы http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/smile.gif\' class=\'bbc_emoticon\' alt=\':)\' />
Если у вас ядро находиться на другом разделе, отличающемся от раздела содержащего корневую файловую систему, то тогда вам нужно указать (hd0,0) (в вашем случае).

dr Motor

[quote name=\'norman\' post=\'4163\' date=\'27.3.2009, 23:44\']вопрос чисто для перестраховки  http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/rolleyes.gif\' class=\'bbc_emoticon\' alt=\':rolleyes:\' />
скажите а вот у вас в примере нет вот этих параметров в начале строки (hd0,0) это критично или нет по моему они обозначают диск на котором стоит ось. Так мне указывать их или нет???[/quote]

hd(0,0) - это параметр груба. дело в том, что  в грубе физические диски и разделы на них  обозначаются немного иначе чем в системе.
в данном случае первая цифра обозначает первый физический диск, а вторая логический раздел на этом диске. получается нумерация в грубе происходит с нуля.  то есть если бы ядро находилось на 3 м разделе второго физического диска - параметр был бы  hd(1,2).

но в вашем случае изменять их не нужно, ибо свежесобранное ядро положите рядом со старым, то есть на тот же физический диск и логический раздел.  параметры нужно тупо скопипастить - в том же файле menu.lst  сделав еще одну запись.
title newkernel
kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=/dev/sda1 resume=/dev/sda5 splash=silent vga=788
initrd (hd0,0)/boot/initrd.img
только лишь изменив название ядра.  

p.s. а вообще man grub в таких случаях обязателен к раскуривванию http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/wink.gif\' class=\'bbc_emoticon\' alt=\';)\' /> ну и гуголь в помощь - пока вы это не осознаете мало что будет получаться ). да и метод научного тыка тоже очень просветляющая штука http://linuxforum.kz/public/style_emoticons/<#EMO_DIR#>/biggrin.gif\' class=\'bbc_emoticon\' alt=\':D\' />