Если вы столкнулись с необходимостью собрать ядро Linux, наложить патч для ядра Линукс или просто вы уже забыли, как это делается - здесь приводятся рекомендации и ссылки для "быстрого старта".
Зачем собирать ядро Linux?
Если всё работает, цветёт и пахнет - не трогайте ничего! Есть старая поговорка "не сломалось - не чини!", в ней мудрость многих поколений пользователей UNIX, бессонные ночи и море слёз. Ну так зачем же это надо?
Как говорят классики, полезно пересобрать ядро в следующих случаях:
Не бойтесь пересобирать ядро Линукс. Это забавно и полезно. И никакой чёрной магии в этом нет.
Как собрать или пересобрать ядро Линукс?
Вы хорошо подумали, взвесили все "за" и "против" и решились-таки на этот шаг. Это не так сложно, как может показаться, процесс автоматизирован и упрощён до известных пределов. Я поделюсь некоторыми очевидными (для тех, кто уже наступал на грабли) или не очень (кто их удачно обошёл) подводными камнями, подстерегающими вас на этом пути.
Прежде всего, заполучите статью "Ставим ядро 2.6, или Ядерная физика для домохозяйки" (тут - новая версия этой статьи). Не надо оскорбляться таким названием - это исчерпывающая статья по сборке ядра, её автор, Михаил Зарипов, перевёл на русский почти все опции ядра!
Статья построена из расчёта, что человек использует make menuconfig и некоторых параметров вы в ней не найдёте, но основное в ней отражено. Качаем, читаем и следуем приведённым в ней рецептам - это 99% даст положительный результат.
Как узнать Linux версию ядрa?
Для этого в консоли от простого пользователя пишем:uname -a
в ответ получаем что-то вроде:Linux dot 2.6.33.1 #1 SMP PREEMPT Fri Mar 26 09:54:11 EST 2010 i686 GNU/Linux
Красным выделена версия ядра - 2.6.33.1 так что теперь можно ориентироваться в том, какая версия ядра на сайте kernel.org для вас более свежая.
Какие бывают ядра Линукс?
Вот здесь об этом здесь много и долго говорилось. Кратко: идём в архив официальной серии ядер, выпускаемых непосредственно Линусом Торвальдсом. Прежде всего, надо разобраться, что такое стабильные и нестабильные ядра (stable и development) и как они нумеруются. Пусть имеется ядро версии a.b.c.d
Официальные ядра в виде исходных текстов можно скачать с ftp://ftp.kernel.org. Идём туда и видим кучу ядер. Нам какое? Есть несколько соображений:
Какие могут быть проблемы при сборке ядра?
Проблем при сборке обычно не бывает, только если вы не намудрили с компилятором или недоустановили его. В процессе сборки проблем не так много, они обычно возникают после сборки ядра по следующим причинам:
На эти грабли можно и не наступать - есть несколько рекомендаций.
С чего начать?
С того, что к сборке ядра нужно подготовиться: это займёт много времени, особенно если вы это делаете в первый раз. У меня пересборка первого ядра заняла 4 часа - вдумчивое чтение статьи, поиск параметра, включение или выключение и так далее. У вас это может занять времени меньше - затем я это и пишу.
Хорошо бы взять конфиг из вашего дистрибутива - дистростроители в сборке ядер понимают, как правило, больше вас, так что не стесняйтесь. Копируем в каталог с ядром и пишемmake oldconfig
Флажки параметров ядра должны расставиться соответствующем конфигу образом, если только в вашем дистрибутиве не принято накладывать на ядро 33 заплатки. Конфиг так же можно попросить у ближайшего линуксоида - будет кого пинать и доставать своими вопросами. Если охота проявить творчество, можно попросить создать конфиг с умолчальными настройками:make defaultconfig
Не увлекайтесь заплатками, особенно поначалу. Каждая из них добавляет возможности в ядро, но может привести к дестабилизации системы и крайне неприятным последствиям. Обзор различных интересных патчей и веток ядер Линукс дан в этой прекрасной статье.
Где лежат большие грабли
Как и всё остальное в Линукс, тексты ядра прокомментированы и можно в процессе сборки попросить помощи. В menuconfig это крайняя правая кнопка HELP. Комментарии есть практически к каждой опции, более или менее внятные, и их стоит почитать, если из статьи не ясно, что это такое.
Перво-наперво, не включайте в ядро и не делайте модулем никаких функций, рядом с которыми написано слово EXPERIMENTAL или DEPRECATED! Это может вывести систему из стабильного состояния и добавить вам совершенно ненужных проблем - включайте только в том случае, если это очень необходимо и вы знаете, что делаете.
Чтобы система после перезагрузке загрузилась с новым ядром, обязательно включите поддержку следующих опций монолитно:
Чтобы не ломать голову и не думать, почему не работает что-то, имейте в виду:
Далее для сборки набираем:
от простого пользователя:
make bzImage
(собрать ядро)
make modules
(собрать модули
make modules_install
(установить модули)
make install
(установить ядро)
После того, как ядро собрано, следует создать загрузочный образ (в Дебиане это применяется). Для этого нужно выполнить либо
mkinitramfs -o /boot/initrd-вашаверсияядра вашаверсияядралибо (для старых или специфических дистрибутивов)
mkinitrd -o /boot/initrd-вашаверсияядра вашаверсияядраТо есть например:
mkinitramfs -o /boot/initrd-2.6.20 2.6.20После этого прописываем в загрузчике (скорее всего это будет GRUB):
title Debian Linux (2.6.20)
root (hd0,0)
kernel /vmlinuz-2.6.20 ro root=/dev/sda1
initrd /initrd-2.6.20.img
Номер системы, загружаемой по умолчанию, равен 0. Чтобы определить по умолчанию загрузку вашего нового ядра, либо поместите описывающий его раздел файла, в начало, либо измените номер системы по умолчанию на нужный вам (помните, что номера начинаются с 0) Если вы используете GRUB, после редактирования файла конфигурации вам не нужно выполнять какие-либо команды.
Вот все грабли, на которые я наступал и которые вспомнил. Уважаемые комментаторы приглашаются к конструктивной критике и дополнению вышеописанных подводных камней.Ссылки
Собственно, они в основном приведены в теле документа, но всё-таки. О сборке ядер "по технологии Дебиан" говорится здесь. Восхитительная статья по сборке ядер 2.6 тут (а тут её обновление). Замечательный обзор того, какие ядра Линукс, кроме канонической ветки Линуса Торвальдса, есть здесь. Тут можно посмотреть ещё некоторые полезные замечания по сборке ядра.
Уважаемые комментаторы накопали ещё несколько очень полезных ссылок. Вот здесь говорится о сборке ядра для Убунты, а тут - для Дебиана на английском. Может, кому поможет.
37 комментариев: |высказаться!| RSS-лента дискуссии.|
Hello from the USA!! :-)
В последнее время стало популярным ядро с suspend2. Много опций experimental очень полезны.. И для хорошей работы того самого suspend2 лучше включить модулем побольше. Кстати, при большом желании можно модулем включить и корень, и ещё много чего. Для этого надо использовать initrd. Мне, однако, это не нравится.
Если говорить о debian, то стоит упомянуть кошерный для этого дистрибутива метод (make-kpkg) - http://www.debian.org/doc/FAQ/ch-kernel.en.html
Извините, не обратил внимания на "Ссылки". но всё-же это записки дебианщика ;)/
Статья хорошая, спасибо.
Еще ссылка в тему http://www.howtoforge.com/kernel_compilation_ubuntu
Очень хорошо расписано для начинающих, особенно как просто пропатчить.
Огромнейшее спасибо за статью! Рано или поздно все равно придется этим заниматься. :)
Увидев по началу количество комментариев, испугался: ну, думаю, сейчас запинают :-)
2 Igor
В последнее время стало популярным ядро с suspend2.
Хм... ну не знаю, не знаю. Я предпочитаю не пользоваться такими вещами. Странно, но у меня и без того ноутбук долго работает в автономе (5-6 часов).
Много опций experimental очень полезны..
Не сомневаюсь: у самого включена поддержка ACPI специально для ноутов ASUS (experimental). И ничего, работает. Но в своё время врубил что-то экспериментальное ещё на Woody, в 2.4.18, и получил kernel panic при включении usbшной мыши :-)
2 fiend
Если говорить о debian, то стоит упомянуть кошерный для этого дистрибутива метод
Никогда им не пользовался, а так, по-старинке make menuconfig. Но замечание принял.
2
2 serhiy cherevko
Еще ссылка в тему
Да, пробегала мимо меня, но как-то не обратил на неё внимания. И, как выяснилось, напрасно. Спасибо за ссылку!
2 vonderer@darkstar
Огромнейшее спасибо за статью! Рано или поздно все равно придется этим заниматься.
Пожалуйста. Это все грабли, которые мне припомнились и по которым я пропрыгал в своё время :-) Надеюсь, поможет на них не наступить кому-то ещё.
Если я какие грабли при сборке ядра забыл или не знаю - не стесняйтесь написать в комментариях.
М-ммм. У меня два вопроса.
1. Разве в дефолтной дебиановской сборке не включено high mem, которое больше 1 гига? (Потому что было еще то, кторое больше 4 гиг.) Дело в том, что у меня 1.5 гигабайта памяти и стандартное ядро из sarge. Все top'ы показывают, что используются все полтора гига, см. http://paste.tyneo.net/y2q24r-125 , что я делаю не так?
2. А не могли бы Вы рассказать или ткнуть пальцем в толмуд, как кошерно ставить свое ядро в дебиане? Ну всякие там make-kpkg, заворачивание в *.deb, и иже с ним. Потому что ставить-то ядро по make install && make modules_install я еще в шлаквари ставил, а вот в дебиане и чтоб правильно -- не приходилось, всегда обходился тем, что ставилось по apt-get dist-upgrade из коробки.
А есть какая-нибудь разница: брать исходники ядра из репозитария или с kernel.org?
2 oal
1. Разве в дефолтной дебиановской сборке не включено high mem, которое больше 1 гига?
В Сарже, по-моему, нет, т.к. мне в своё время писали письмо с сервера, который на Сарже, с вопросом: как заставить видеть Сарж больше чем гиг.
Если собирать ядро руками, легко это упустить.
2. А не могли бы Вы рассказать или ткнуть пальцем в толмуд, как кошерно ставить свое ядро в дебиане?
Здесь не Слака, богов нет, так что как удобнее, так и ставьте. На debian.org в официальной доке намекают, что они не просто так ваяли пакет kpkg :-)
Я ставлю через make и не обламываюсь, т.к. религия позволяет :-)
2 Anonymous
А есть какая-нибудь разница: брать исходники ядра из репозитария или с kernel.org?
Есть: дебиановское ядро уже сконфигурировано и даже скомпилировано, а на kernel.org - сырцы. Зато там самый свежак :-)
Есть: дебиановское ядро уже сконфигурировано и даже скомпилировано, а на kernel.org - сырцы.
Нет-нет, мой вопрос был как раз о сырцах в репозитарии -- то есть о пакетах linux-source-*
Можно взять сырцы как с kernel.org, так и с репозитария. Но есть ли какое-нибудь преимущество сырцов из репозитария перед сырцами с kernel.org?
Но есть ли какое-нибудь преимущество сырцов из репозитария перед сырцами с kernel.org?
Сомневаюсь. Скорее всего, наложили какие-нибудь мелкие патчи. Я всегда беру каноническое ядро и патчу для получения squashFS.
Если в системе есть SATA-диски, планируется подключать флешки и писать CD или DVD-диски - не выключайте поддержку SCSI
диски уж несколько лет как пишутся нативно, а не через SCSI ;)
Virens, смотрю ты в своем блоге при упоминании про сборку ядра все пиаришь ссылку на linuxcenter. Однако там версия 1.1 статьи. Пошел на авторский сайт и нашел версию 2.0 статьи. Рекомендую: http://linux.alhimia.ru/pub/archive/doc/encyclopedia/0.2/online/4_Tuning/kernel/kernel-2.6-install/index.html
Более правильная ссылка такая:
http://linux.alhimia.ru/pub/archive/doc/kernel-2.6/2.0/kernel-2.6-install-2.0.html
2 Anonymous
Virens, смотрю ты в своем блоге при упоминании про сборку ядра все пиаришь ссылку на linuxcenter.
Дык пиарю то, что знаю :-) Большое спасибо, Анонимус, за ссылку - не занал. Статью поправлю.
Рекомендую
Мерси. Будет учтено при следующих правках блога.
ежели бояться опций с приставкой EXPERIMENTAL, то лучше сидеть под вендой
2 Anonymous
ежели бояться опций с приставкой EXPERIMENTAL, то лучше сидеть под вендой
Да вы, батенька, экстремал! :-) На самом деле, эти строчки были написаны для "очень начинающих" - включат какой-нибудь kexec или sysrq, а потом будут кричать на форумах...
У меня на ноуте многое в ядре скомпилировано из раздела ACPI с Experimental - и ничего, всё работает.
>В Сарже, по-моему, нет, т.к. мне в своё время писали письмо с сервера, который на Сарже, с вопросом: как заставить видеть Сарж больше чем гиг.
В smp sarge-ядре точно поддержка включена. На сервере вертится - там 1.5GiB RAM видны целиком.
Кстати флэшки тоже могут обойтись без SCSI есть в ядре 2.6 другой драйвер и видиться они будут не /dev/sd[a-..] a /dev/ud[a..]
что мне кажется более понятно, хотя там стоит заметка что он более медленный, но я не заметил ..
2 Anonymous
В smp sarge-ядре точно поддержка включена. На сервере вертится - там 1.5GiB RAM видны целиком.
Так по умолчанию ставится generic. Вот и вопросы ко мне были - чего он всю память не видит.
2 Anonymous said...
Кстати флэшки тоже могут обойтись без SCSI есть в ядре 2.6 другой драйвер и видиться они будут не /dev/sd[a-..] a /dev/ud[a..]
Ммм... интересно. Надо будет попробовать. Спасибо!
Хотя поддержку скази всё равно лучше не выкидывать - экономия не велика, а возможностей прибавляется много.
ошибка в нумерации версии ядра. начиная с 2.6 - это current и более не делится на чет/нечет
Спасибо за статью, очень пригодилась!
Только вот есть один вопрос, который меня мучает перед тем, как я решусь собрать ядро самостоятельно.
Если я поставлю свое ядро, то как быть с headers, которые нужны для установки многих драйверов, например видео-дров? Обычно просто скачиваешь из репозитория linux-headers нужный и все. А как быть тут? Какие заголовки использовать?
Почему-то нигде это не упоминается...
А как быть тут? Какие заголовки использовать?
Почему-то нигде это не упоминается...
Заголовки со своего ядра, конечно.
Не знаю как в Debian/Ubuntu, но в Mandriva уже несколько лет существует такая вещь, как DKMS (Dynamic Kernel Modules Support) - позволяет использовать модули от одного ядра в другом. Т.е. пересобрал ты ядро, оно теперь как бы другое. А DKMS позволяет подхватить, например, модули от драйверов NVIDIA.
статья конечно хорошая, но я столкнулся немного с другой проблемой. У меня есть дебиан, на виртуальной машине, нужно было под ним пересобрать ядро, что бы подключить сетевуху.Я бы мог примонтировать флешку с новым ядром и так собрать. Но я захотел взять ядро из дистрибутива, при установке ядро в каталог usr/src/linux... не копируется(сорцы), как мне выдрать это ядро из дистрибутива?
Спасибо за статью.
Ссылка на новую верси статьи для домохозяек не работает.
Вот нашел альтернативную: http://linux4u.jinr.ru/docs/add04/kernel-2.6-install-2.0.html
2 BaBL пишет...
ошибка в нумерации версии ядра. начиная с 2.6 - это current и более не делится на чет/нечет
Так как ядро 2.4 всё ещё продолжает развиваться, то не ошибка. Как Торвальдс в будущем решит - поправлю пост :-)
2 paveless пишет...
Спасибо за статью, очень пригодилась!
Пожалуйста. А уж мне она сколько раз пригодилась :-)))
Если я поставлю свое ядро, то как быть с headers, которые нужны для установки многих драйверов, например видео-дров? Обычно просто скачиваешь из репозитория
Легко и просто: не стирайте то, что останется после сборки в каталоге /usr/src - вот вам ваши headers. Драйвера ставятся так же, т.е. без проблем.
Почему-то нигде это не упоминается...
Ммм... в общем, до этого несложно догадаться. Но согласен - фичреквест. Поправлю при оказии.
2 Анонимный пишет...
Не знаю как в Debian/Ubuntu, но в Mandriva уже несколько лет существует такая вещь, как DKMS (Dynamic Kernel Modules Support) - позволяет использовать модули от одного ядра в другом.
Круто, я не знал. Погуглю - вещь в самом деле нужная. Спасибо!
2 Stomp пишет...
Но я захотел взять ядро из дистрибутива, при установке ядро в каталог usr/src/linux... не копируется(сорцы), как мне выдрать это ядро из дистрибутива?
То ли вечер уже, то ли я начал тормозить - не понял вопроса. Если ещё актуально, пишите в личку, ближе к концу сентября будет время -отвечу.
2 Анонимный пишет...
Ссылка на новую верси статьи для домохозяек не работает.
Вот нашел альтернативную:
О! Спасибо, добрый человек! Поправил ссылку, немного статью подрихтовал.
Я бы хотел нормальное ядро..
Какое ядро можно выбрать для амд-64? Из дистрибутивных? А то выбрал 2.6.22-3-амд64, и всё.
На 2.6.18-4-к7 у меня всё работало,а теперь как-то тормознее,и QEMU c kqemu не собирается,(компилятор шибко умный)А виртуалбокс ругается на конфигурацию при запуске,вмваре тоже не ставиться.
Большое спасибо! Я начинающий в мире линукс, установил Debian, но сетевая карта работала некорректно. Скачал драйвера, а они в исходниках :( Сидел в интернете полдня - нашел советы, что для нормальной работы надо пересобрать ядро с этими драйверами. Но только в вашей статье наткнулся на адрес ОТКУДА скачать(ftp.kernel.org). Остальные отделывались строчкой "... apt-get install kernel-source-2.6.x ...", на которую apt ругался и слал меня лесом. Еще раз огромное спасибо! (кстати, ставил дебиан я тоже по вашей статье :) )
2 Анонимный пишет...
Я бы хотел нормальное ядро..
Нормальное ядро - это как большая и чистая любовь. Все его хотят, и вещь-то вроде не мудрёная, а поди ж ты :-)
и QEMU c kqemu не собирается,(компилятор шибко умный)
QEMU собирается только с gcc-3.4
2 Анонимный пишет...
Но только в вашей статье наткнулся на адрес ОТКУДА скачать(ftp.kernel.org).
Это да, народ не любит писать о простых вещах.
Можно пересобрать дистрибутивное ядро, но оно уже с патчами и не факт, что ваши патчи наложатся правильно.
Еще раз огромное спасибо!
Пожалуйста. Статью писал по мотивам грабель, которые собирал собственной головой :-)
(кстати, ставил дебиан я тоже по вашей статье :) )
Стало быть, блог помог дважды. И это есть хорошо :-)
Спасибо. Полезная статья. У меня вопрос: После установки нового ядра иксы загрузятся нормально?
Видео у меня Нвидия, дистр- Убанту.
Спасибо
У меня такая тема. Старое ядро диски именует как sda sdb ... А новое hda hdb ... почему?
Вчера-сегодня конфигил-компилил.
А вот загрузиться не смог. Пришлось включить метод научного тыка. В Вашем примере:
mkinitramfs -o /boot/initrd-2.6.20 2.6.20
необходимо после initrd включить .img.
чтобы получилось initrd.img-2.6.20
Но и это не все.
Мне пришлось создать на полученный файл симлинк в корневой директории.
Только после этого ядро загрузилось.
Может, я в чем-то неправ, но изложил голые факты.
Как-то познакомился с Debian, отношения дошли до ядра, долго искал подход и вот что получилось:
# update-initramfs -c -k 2.6.бла.бла-полная-версия
# update-grub
Создаем initrd.img
Grub все сам должен найти
Перевод некоторых параметров ядра Linux 2.6: http://www.kryukov.biz/wiki/Параметры_ядра_Linux
Спасибо за статью!
А кто-нибудь ядро версии 3.1.4 пробовал собирать?
Отпишитесь в целом как?!
Есть ли смысл ставить качать новое ядро на старый писюк (K6-2 500, 386 MB GeForce2 Pro 32Mb)?
Отправить комментарий