Online video hd

Смотреть красотки видео

Официальный сайт ejnews 24/7/365

Смотреть видео бесплатно

CaveRat 29.11.2010 03:03

How-to`sКак пересобирают ядро

Думаю, манов и хавтушек по поводу пересборки ядра уже достаточно много, но тем не менее, опишу как этот процесс происходил в моем случае. Скажу сразу - я не linux-гуру, да и доступа к хавтушкам у меня на момент пересборки не было по причине отсутствия интернета.


Первым делом (если нового ядра у нас нет), копируем его в /usr/src/linux:

sudo mkdir /usr/src/linux #на случай, если папки нет
sudo cp /media/XA_1210_DVD/files/soft/Unix/System/"Linux Kernel 2.6.36"/linux-2.6.36.tar.bz2 /usr/src/linux/kernel-2.6.36.tar.bz2 #да, я читаю Ксакепа =)

Испоьзовать sudo нужно потому что папка /usr/src принадлежит пользователю root. Можно, конечно, использовать su (или зайти под рутом ради такого дела).
Дальше можно или перейти в папку /usr/src/linux (что бы не мучить sudo и меньше писать), или делать все как раньше. Я решил переползти, ибо ленив. Поскольку все дальнейшие операции проихводятся из /usr/src/linux, то придется сделать su

su #повышаем привелегии до root
cd /usr/src/linux #переход
tar -xf kernel-2.6.36.tar.bz2 #распаковываем ядро. можно былот добавить флаг -v, но тогда вывод будет ОЧЕНЬ большим

Теперь в папке /usr/src/linux есть архив и папка с исходниками ядра. Архив нам больше не нужен, и мы его удаляем:

rm kernel-2.6.36

Исходники у меня только от одной версии, поэтому я перетащил их в /usr/src/linux, а пустую папку linux-2.6.36 удалил:

mv linux-2.6.36/* /usr/src/linux/
rm -rf linux-2.6.36

Что мы имеем? В папке /usr/src/linux лежат исходники ядра, которое мы хотим скомпилировать (возможно, с какими-то своими опциями), и использовать. Так что теперь перейдем непосредственно к этому.
!дальше я следую указаниям Slackbook 2.0
Первым делом приводим ядро к базовому состоянию:

make mrproper

Что конкретно делает эта команда - пока не особо себе представляю(но обязательно разберусь и расскажу). Но от рекомендаций отступать не будем.
Дальще у нас есть 3 вариант. Можно воспользоваться традиционной текстовой системой. Будет задано много вопросов, на основании ответов будет создан config-файл. Но если ошибетесь - придется начинать заново. Еще есть вариант, основаный на меню, или графическая X-based утилита. Вариант запуска такие:

make config #text Q&A;
make menuconfig #menu-based
make xconfig #x-based

Если хотите использовать третий вариант, то сперва убедитесь, что Xorg запущен. Я воспользовался вторым вариантом - менюшным.

make menuconfig

Интерфейс примерно такой же, как и у установщика Slackware.
Кстати, маленький момент - имеет смысл (если вы новичек) все-равно работать в Xorg-е. Это упростит процесс, так как всегда можно посмотреть нужную информацию, если вы не уверены в ответе.

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

Теперь, конгда конфигурирование нового ядра закончилось, приступим непосредственно к компиляции. Согласно того же Slackbook, необходимо подготовить дерево исходников:

make dep #ввод этой команды не обязателен
make clean

Теперь скомпилируем само ядро:

make bzImage
make modules

Процесс занимает некоторое время (причем может занять немало), особенно создание образа ядра. Модули компилируются несколько быстрее.

Теперь необходимо установить ядро. Оригинальное (нынешнее) лежит в /boot и называется vmlinuz. Поскольку в случае ошибки в конигурации ядра система откажется загружаться, то лучше сделать возможной загрузку как с нового, так и со старого ядра:

mv /boot/vmlinuz /boot/vmlinuz.old #rename old kernel
cat /arch/i386/boot/bzImage > /boot/vmlinuz #copying new kernel to /boot
mv /boot/System.map /boot/System.map.old #rename old System.map
cp System.map /boot/System.map
make modules_install

Все! Новое ядро готово, и установлено. Но пока не будем перегружаться, а залезем в /etc/lilo.conf, что бы сделать возможной загрузку старого ядра, на случай неполадок в работе нового. Надо просто добавить в lilo.conf следующие строки, в ту часть, где описываются варианты загрузки:
image = /boot/vmlinuz.old
root = /dev/sda2 # у меня корневой раздел на sda2, у вас он может быть другой. Посмотрите в той части, которая описывает загрузку vmlinuz
label = LinuxDef
read-only

Потом бодро пишем

sudo /sbin/lilo

и перезагружаемся!

Скажу сразу - с первой попытки рабочее ядро я не собрал =) Но цель данного топика несколько иная. Я просто хотел поделиться с новичками в мире Linux знаниями о том, как это делать в принципе. А в принципе это не сложно. Надеюсь, что я смог разбудить у людей любопытство, жажду потыкать по всяким кнопочкам и поиграться с разными опциями - три вещи, ведущие нас на пути познания.

* Является кросс-постом с моим ЖЖ Gramnik


Тэги: инструкция пере собрать ядро ядро
+ 12 -
Похожие Поделиться

dementiy 29.11.2010 04:00 #
+ 6 -
Поставил Вам плюс, но... есть лишняя конкретика, например тот же путь, зачем писать "/media/XA_1210_DVD...", он такой только у Вас, можно просто написать "/путь_к_архиву". Далее конфигурирование, можно было бы сказать о том, какие библиотеки нужны, например для menuconfig нужны библиотеки ncurses. При конфигугрировании, чтобы не думать о процессоре и прочих деталях можно применить старый конфиг. А что на счет патчей, которые предоставляет дистрибутив? Надо было вопрос чуточку более основательно изучить.
CaveRat 29.11.2010 04:06 #
+ 0 -
thx за критику, в следующий раз буду ее учитывать =)
по поводу более детального изучения процесса - эту статью я рассматривал скорее как вводный курс на тему "А с какого конца вообще браться?". Хотя, скорее всего вы правы и я малость поторопился
Anrock 29.11.2010 04:33 #
+ 3 -
Кстати, маленький момент - имеет смысл (если вы новичек) все-равно работать в Xorg-е. Это упростит процесс, так как всегда можно посмотреть нужную информацию, если вы не уверены в ответе.

В menuconfig тоже есть справка по пунктам. Make clean вроде можно не делать, если раньше еще не компилил ядро, хотя компилил и без выполнения make clean и все работало, хотя меня и убеждали что случится что-то плохое.
cat /arch/i386/boot/bzImage > /boot/vmlinuz #copying new kernel to /boot

Странное какое-то копирование. cp, нэ?
CaveRat 29.11.2010 09:08 #
+ -1 -


cat /arch/i386/boot/bzImage > /boot/vmlinuz #copying new kernel to /boot

Странное какое-то копирование. cp, нэ?


Ну, просто перенаправил вывод файла в другой файл. Итог-то один, нэ? cp тоже да, но я, как нуб, решил не отходить от буквы мана (тот самый Slackbook 2.0)
jh 29.11.2010 04:55 #
+ 1 -
make mrproper

команда очищает следы компиляции.
Shtsh 29.11.2010 15:10 #
+ 1 -
На самом деле, не только. Например, она удаляет все файлы с настройками, сделанными при конфигурации.
lwilis 29.11.2010 06:04 #
+ 3 -
mv linux-2.6.36/* /usr/src/linux/
rm -rf linux-2.6.36
Это нормально, но мне все-таки удобнее сделать /usr/src/linux симлинком, который указывает на конкретное ядро /usr/src/linux-2.6.xx, — меньше путаницы, больше свободы и меньше телодвижений:
ln -s $PWD/{linux-2.6.36,linux}

А вообще, молодец.
ЗЫ и да, еще вот это:mv linux-2.6.36/* /usr/src/linux/удобнее заменить на mv linux-2.6.36 linux, тогда и rm -rf linux-2.6.36 не потребуется, хотя и в этом случае было бы достаточно rmdir linux-2.6.36. Но это все занудство и вообще.
И все-таки больше внимания мелочам, а то иногда много времени за зря теряешь.
f_evgeny 29.11.2010 10:05 #
+ 1 -
> Поскольку конфигурирует ядро каждый по-своему, и рассказывать конкретику несколько не > уместно, дам пару общих советов, от нуба - нубам, так сказать.
> 1) Проверяйте тип процессора и поддержку вашей файловой системы (особенно последнее)
> 2) не знаете, что это - не выключайте. А то потом система не включится

Как я понял, ядро собирается без initrd? Тогда поддержка файловой системы, с которой грузится система должна обязательно быть вкомпилирована в ядро (не модулем). Иначе ядро не сможет загрузится.
Anrock 29.11.2010 12:49 #
+ 0 -
Что такое initrd и зачем оно, раз можно без него?
lwilis 29.11.2010 13:01 #
+ 1 -
Есть пост на эту тему.
Если вкратце, то это некий бинарник, из которого подгружается поддержка наиболее важных модулей для продолжения загрузки системы.
f_evgeny 29.11.2010 14:01 #
+ 1 -
Это такой способ загрузки.Сначала грузится минимальный kernel Linux, потом создается RAMFS, там лежат модули, которые подгружаются когда нужно. Позволяет с минимальным кернелем иметь много вариантов загрузки.
Пример - можно драйвера всех файловых систем скомпилировать как модули и загружать только необходимые модули. Например у Вас используется ext2 - грузится этот модуль, а все остальные модули файловых систем не грузятся.
Это используется в дистрибутивах, там нужна максимальная поддержка железа при установке.
Если компилите свое ядро, то можете не компилить лишнее. Initrd тоже не нужен. А нужно только свое железо. Но одно но, драйвер файловой системы с которой Вы грузитесь должен быть вкомпилирован в ядро не модулем, иначе ядро не сможет после загрузки подключится к файловой системе и загрузить модули.
Примерно так.
f_evgeny 29.11.2010 16:55 #
+ 0 -
> Сначала грузится минимальный kernel Linux,
> потом создается RAMFS, там лежат модули, которые подгружаются когда нужно.
Думаю нужно добавить, что после создания RAMFS, в эту RAMFS загружается содержимое файла initrd, в котором, собственно и хранятся модули ядра.
exelens 29.11.2010 11:09 #
+ 2 -
sudo /sbin/lilo

Почему не груб?
delorfin 29.11.2010 11:57 #
+ -1 -
Писалось на основе Slackbook'а, а в слаке LiLo.
exelens 29.11.2010 12:00 #
+ 3 -
Желательно было бы про те самые исходные данный пояснить в посте.
delorfin 29.11.2010 12:06 #
+ 1 -
Несколько раз упоминается в посте и затем в комментариях. Ну и автор не я, а CaveRat.
ZogG 29.11.2010 14:28 #
+ 3 -
у меня все проще:
eselect kernel set #ядро на выбор (в генту это делает симлинк ядра на то которое хотите собрать)
cp /usr/src/linux-старое ядро/.config /usr/src/linux/
cd /usr/src/linux/
make oldconfig (чтоб конфиг старого использовался, на новые фичи спросит вас собирать их или нет)
make menuconfig (если надо что-то еще изменить)
make && make modules_install && make install (ставит автоматом в граб или лило)
потом еще в генту по крайней мере есть такая фича:
module-rebuild для пересборки драйверов и модулей из вне ядра (нвидиа, или если алса отдельно стоит и т.п.)
хочу заметить если нету ее, важно пересобрать эти модули под новое ядро.
вуаля.
severny 29.11.2010 18:17 #
+ 0 -
Господа, большая просьба, просветите по поводу применения патчей.
Есть проблема, описана здесь
Как применить патч в таком виде нигде не нашёл.
f_evgeny 29.11.2010 18:36 #
+ 0 -
По моему, должно сработать как обычно. Там сначала и в конце вывод лога, а между ними текст патча. Там где строки начинаются на +++ и --- или = или - , или сишные комментарии. Сохраняете эти строки в файл, и накладываете как обычно.
Ну или руками, там формат интуитивно понятен, имя файла есть, строки с - - убрать, с + вставить.
f_evgeny 29.11.2010 18:37 #
+ 0 -
вместо '=' читать '+'
kstep 30.11.2010 01:17 #
+ 0 -
Это патч с git-ового коммита. Просто клад?шь его в файл и применяешь с помощью patch-а. Если ядро клонировали с гита, то git apply имя-файла.
severny 01.12.2010 09:31 #
+ 1 -
После длительных медитаций над ответами рискну показаться недалёким)
Какую часть патча сохранять в соответствующий файл, какую в patch, какой именно командой применить, обязательно ли соответствие версии ядра.
Популярнее пожалуйста.
f_evgeny 01.12.2010 11:43 #
+ 0 -
Вот это тело патча:
--- drivers/usb/storage/unusual_devs.h.old 2009-09-26 01:58:45.000000000 +0400
+++ drivers/usb/storage/unusual_devs.h 2009-11-12 02:01:20.000000000 +0300
@@ -495,6 +495,13 @@
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_MAX_SECTORS_64),

+/* Reported by Vitaly Kuznetsov */
+UNUSUAL_DEV( 0x04e8, 0x5122, 0x0000, 0x9999,
+ "Samsung",
+ "YP-CP3",
+ US_SC_DEVICE, US_PR_DEVICE, NULL,
+ US_FL_MAX_SECTORS_64 | US_FL_FIX_INQUIRY | US_FL_FIX_CAPACITY | US_FL_BULK_IGNORE_TAG),
+
/* Entry and supporting patch by Theodore Kilgore .
* Device uses standards-violating 32-byte Bulk Command Block Wrappers and
* reports itself as "Proprietary SCSI Bulk." Cf. device entry 0x084d:0x0011.
f_evgeny 01.12.2010 11:52 #
+ 1 -
Рано нажал на кнопочку отправить. Пардон, Продолжаю:

Сохраняете эти строки в файл, например в /usr/src/mypatch
Дальше пробуете команду холостой пробы:
cd /usr/src/
patch -pl --dry-run < mypatch

Если все ОК, команда patch не ругается, делаете накладывание патча:
patch -p1 < mypatch

Параметр -p1 что-то типа сколько уровней директориев откидывать из указанных в патче, если правильно помню, иногда нужно поиграться, например попробовать -p0. Но в общем я точно уже не помню, но идея такая.
Если нет команды patch, ее нужно установить.

А вообще, есть две парных команды diff и patch, diff выдает разницу между двумя версиями исходников, исходной и измененной, в файл (жаргонное название файла - патч), patch используя выходной файл программы diff делает из старой версии исходников новую (накладывает патч).
severny 03.12.2010 07:52 #
+ 0 -
Спасибо, вопрос решён :)
В источнике автором был приложен патч (эх, моя невнимательность).
Именно он подошёл.
Скопировал в директорию с исходниками ядра и применил командой
patch -p1 < mypatch
SergMarkov 30.11.2010 01:02 #
+ 0 -
"Не включится" относится только к поддержке винтов в ядре, тогда система просто не загрузится, все остальное - видео, звук, usb вторично, и даже если будет ошибка то система прекрасно загрузится
А патчи от коливаса где?:-) Но кой хрен собирать ядро по умолчанию, если оно и так уже идет в дистрах, за исключением разве что проца.
Кстати, пересборка glibc, ядра с патчами, glib и gtk у меня повысило скорость интерфейса на 25 %, по совершенно объективному тесту - gtkpref, скорость паковки -распаковки где то процентов на 30.
Anrock 30.11.2010 09:18 #
+ 0 -
Написал бы кто расширенную статейку на эту тему, только с упором на всякие хитрые патчи, настройки и прочие шаманства с ядром, которые повышают производительность и дают всякие другие плюхи.

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн