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

Смотреть 365 видео

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

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

29.11.10 03:03 CaveRat

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



dementiy 29.11.10 04:00 # +6
Поставил Вам плюс, но... есть лишняя конкретика, например тот же путь, зачем писать "/media/XA_1210_DVD...", он такой только у Вас, можно просто написать "/путь_к_архиву". Далее конфигурирование, можно было бы сказать о том, какие библиотеки нужны, например для menuconfig нужны библиотеки ncurses. При конфигугрировании, чтобы не думать о процессоре и прочих деталях можно применить старый конфиг. А что на счет патчей, которые предоставляет дистрибутив? Надо было вопрос чуточку более основательно изучить.
CaveRat 29.11.10 04:06 # +0
thx за критику, в следующий раз буду ее учитывать =)
по поводу более детального изучения процесса - эту статью я рассматривал скорее как вводный курс на тему "А с какого конца вообще браться?". Хотя, скорее всего вы правы и я малость поторопился
Anrock 29.11.10 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.10 09:08 # +-1

1
2
3

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

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


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

команда очищает следы компиляции.
Shtsh 29.11.10 15:10 # +1
На самом деле, не только. Например, она удаляет все файлы с настройками, сделанными при конфигурации.
lwilis 29.11.10 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.10 10:05 # +1
> Поскольку конфигурирует ядро каждый по-своему, и рассказывать конкретику несколько не > уместно, дам пару общих советов, от нуба - нубам, так сказать.
> 1) Проверяйте тип процессора и поддержку вашей файловой системы (особенно последнее)
> 2) не знаете, что это - не выключайте. А то потом система не включится

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

Почему не груб?
delorfin 29.11.10 11:57 # +-1
Писалось на основе Slackbook'а, а в слаке LiLo.
exelens 29.11.10 12:00 # +3
Желательно было бы про те самые исходные данный пояснить в посте.
delorfin 29.11.10 12:06 # +1
Несколько раз упоминается в посте и затем в комментариях. Ну и автор не я, а CaveRat.
ZogG 29.11.10 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.10 18:17 # +0
Господа, большая просьба, просветите по поводу применения патчей.
Есть проблема, описана здесь
Как применить патч в таком виде нигде не нашёл.
f_evgeny 29.11.10 18:36 # +0
По моему, должно сработать как обычно. Там сначала и в конце вывод лога, а между ними текст патча. Там где строки начинаются на +++ и --- или = или - , или сишные комментарии. Сохраняете эти строки в файл, и накладываете как обычно.
Ну или руками, там формат интуитивно понятен, имя файла есть, строки с - - убрать, с + вставить.
f_evgeny 29.11.10 18:37 # +0
вместо '=' читать '+'
kstep 30.11.10 01:17 # +0
Это патч с git-ового коммита. Просто кладëшь его в файл и применяешь с помощью patch-а. Если ядро клонировали с гита, то git apply имя-файла.
severny 01.12.10 09:31 # +1
После длительных медитаций над ответами рискну показаться недалёким)
Какую часть патча сохранять в соответствующий файл, какую в patch, какой именно командой применить, обязательно ли соответствие версии ядра.
Популярнее пожалуйста.
f_evgeny 01.12.10 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.10 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.10 07:52 # +0
Спасибо, вопрос решён :)
В источнике автором был приложен патч (эх, моя невнимательность).
Именно он подошёл.
Скопировал в директорию с исходниками ядра и применил командой
patch -p1 < mypatch
SergMarkov 30.11.10 01:02 # +0
"Не включится" относится только к поддержке винтов в ядре, тогда система просто не загрузится, все остальное - видео, звук, usb вторично, и даже если будет ошибка то система прекрасно загрузится
А патчи от коливаса где?:-) Но кой хрен собирать ядро по умолчанию, если оно и так уже идет в дистрах, за исключением разве что проца.
Кстати, пересборка glibc, ядра с патчами, glib и gtk у меня повысило скорость интерфейса на 25 %, по совершенно объективному тесту - gtkpref, скорость паковки -распаковки где то процентов на 30.
Anrock 30.11.10 09:18 # +0
Написал бы кто расширенную статейку на эту тему, только с упором на всякие хитрые патчи, настройки и прочие шаманства с ядром, которые повышают производительность и дают всякие другие плюхи.

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 150)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 3008 из 224 городов)
            Топ пользователей Топ блогов

            Новенькие: lamazavr, illi, G12ES, Pif, dragonta
            welinux.ru

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

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


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

            Online video HD

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

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

            Full HD video online

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

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

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