Если вы столкнулись с необходимостью собрать ядро Linux, наложить патч для ядра Линукс или просто вы уже забыли, как это делается - здесь приводятся рекомендации и ссылки для "быстрого старта".
Зачем собирать ядро Linux?
Если всё работает, цветёт и пахнет - не трогайте ничего! Есть старая поговорка "не сломалось - не чини!", в ней мудрость многих поколений пользователей UNIX, бессонные ночи и море слёз. Ну так зачем же это надо?
Как говорят классики, полезно пересобрать ядро в следующих случаях:
Зачем собирать ядро Linux?
Если всё работает, цветёт и пахнет - не трогайте ничего! Есть старая поговорка "не сломалось - не чини!", в ней мудрость многих поколений пользователей UNIX, бессонные ночи и море слёз. Ну так зачем же это надо?
Как говорят классики, полезно пересобрать ядро в следующих случаях:
- чтобы задействовать свойства, которых нет в поставляемых сборках ядра (например, поддержка памяти больше 1Гб, сжатыхфайловых систем или других интересных возможностей);
- создания монолитного ядра, без модулей (бывает необходимо при создании специфичных систем, например LiveCD);
- для установки обновлённого ядра, в котором есть необходимые свойства или поддержка вашего оборудования;
- чтобы больше узнать о ядрах Linux.
Как собрать или пересобрать ядро Линукс?
Вы хорошо подумали, взвесили все "за" и "против" и решились-таки на этот шаг. Это не так сложно, как может показаться, процесс автоматизирован и упрощён до известных пределов. Я поделюсь некоторыми очевидными (для тех, кто уже наступал на грабли) или не очень (кто их удачно обошёл) подводными камнями, подстерегающими вас на этом пути.
Прежде всего, заполучите статью "Ставим ядро 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
- a - это основной номер версии. Меняется он раз в несколько лет, как правило, когда нестабильная серия с очень существенными изменениями становится стабильной.
- b - это patchlevel. Именно он определяет, является ли данное ядро стабильным или нет. Если он четный - ядро стабильное, если нечетный - нестабильное. Числа a и b в виде a.b называется серией ядер.
- с - это sublevel. Он определяет номер ядра в серии, отличия не радикальные, но существенные: появились новые драйвера, устранены ошибки, добавлены новые возможности.
- d - это extraversion устраняются мелкие баги.
- берём то, которое посвежее: и оборудования побольше поддерживается, и старых глюков меньше;
- лучше всего брать ядро с последним номером в серии, то есть ядро с максимальным номером d: например, 2.6.15.7 (а дальше идут уже 2.6.16);
- погуглить на тему проблем в ядре a.b.c.d которое вы выбрали - вдруг там что-то нужное вам временно поломали.
Какие могут быть проблемы при сборке ядра?
Проблем при сборке обычно не бывает, только если вы не намудрили с компилятором или недоустановили его. В процессе сборки проблем не так много, они обычно возникают после сборки ядра по следующим причинам:
- вы не включили в ядро то, что очень нужно, и теперь
- система не загружается;
- пропала возможность работы с некоторым оборудованием;
- вы включили в ядро то, что не надо (особенно с надписью EXPERIMENTAL) и теперь
- система работает нестабильно или очень медленно;
- ядро вываливается в kernel panic;
- вы взяли нестабильное ядро и/или компилятор в бета-версии/выставили дикие флаги оптимизации
- вас предупреждали
С чего начать?
С того, что к сборке ядра нужно подготовиться: это займёт много времени, особенно если вы это делаете в первый раз. У меня пересборка первого ядра заняла 4 часа - вдумчивое чтение статьи, поиск параметра, включение или выключение и так далее. У вас это может занять времени меньше - затем я это и пишу.
Хорошо бы взять конфиг из вашего дистрибутива - дистростроители в сборке ядер понимают, как правило, больше вас, так что не стесняйтесь. Копируем в каталог с ядром и пишем
make oldconfigФлажки параметров ядра должны расставиться соответствующем конфигу образом, если только в вашем дистрибутиве не принято накладывать на ядро 33 заплатки. Конфиг так же можно попросить у ближайшего линуксоида - будет кого пинать и доставать своими вопросами. Если охота проявить творчество, можно попросить создать конфиг с умолчальными настройками:
make defaultconfigНе увлекайтесь заплатками, особенно поначалу. Каждая из них добавляет возможности в ядро, но может привести к дестабилизации системы и крайне неприятным последствиям. Обзор различных интересных патчей и веток ядер Линукс дан в этой прекрасной статье.
Где лежат большие грабли
Как и всё остальное в Линукс, тексты ядра прокомментированы и можно в процессе сборки попросить помощи. В menuconfig это крайняя правая кнопка HELP. Комментарии есть практически к каждой опции, более или менее внятные, и их стоит почитать, если из статьи не ясно, что это такое.
Перво-наперво, не включайте в ядро и не делайте модулем никаких функций, рядом с которыми написано слово EXPERIMENTAL или DEPRECATED! Это может вывести систему из стабильного состояния и добавить вам совершенно ненужных проблем - включайте только в том случае, если это очень необходимо и вы знаете, что делаете.
Чтобы система после перезагрузке загрузилась с новым ядром, обязательно включите поддержку следующих опциймонолитно:
- файловой системы, которую вы используете на системном диске;
- файловых систем initramfs и cramfs в меню Device drivers --- Block devices, иначе система не сможет считать стартовый образ ядра;
- поддержку вашего дискового контроллера в Device drivers ---ATA/ATAPI/MFM/RLL support
Чтобы не ломать голову и не думать, почему не работает что-то, имейте в виду:
- То, что может быть будет подключаться к системе, полезно сделать модулем, то, чем будете пользоваться постоянно - лучше монолитно (об исключениях - ниже).
- Драйвера для звуковых карт включаются модульно в меню Device drivers --- Sound --- Advanced Linux Sound Architecture --- чтобы потом их проще было конфигурировать (если для этого нет крайней необходимости, не пользуйтесь OSS).
- Если в системе есть SATA-диски, планируется подключать флешки и писать CD или DVD-диски - не выключайте поддержку SCSI в меню Device drivers --- SCSI device support, так как очень многое в Линукс работает "как протокол поверх SCSI".
- Если вы планируете пользоваться кардридером, обязательновключите опцию Device drivers --- SCSI device support --- Probe all LUNs on each SCSI device, иначе будете видеть только первый слот.
- Файловые системы, которые планируется использовать редко, сделайте модулем. Обязательно включите поддержку петлевого устройства в Device drivers --- Block devices ---
Loopback device support , иначе не сможете монтировать образы дисков. - Корневую файловую систему включайте монолитно в ядро - иначе система не сможет загрузиться.
- Будьте внимательны, если используете ReiserFS и не включайте все флажки под ним подряд (лучше вообще никаких не ключайте): один из них (указанный здесь пустым) File systems --- Reiserfs support [ ] Enable reiserfs debug mode приводит к замедлениюфайловой системы и в логах постоянно будет появляться "WARNING! Using reiserfs in slow mode for debugging" или что-то в этом духе. Не включайте этот флажок!
- В меню Block layer --- IO Schedulers отмечайте ДА на все планировщики ввода-вывода, потом можно будет на лету их менять (по ситуации).
- Для ноутбуков я бы советовал включать шину ISA в меню Bus options, так как некоторые встроенные устройства прикрепляются именно к ней.
- Включите поддержку вашей сетевой карты модулем в меню Device drivers --- Network device support --- Device drivers --- Ethernet (10 or 100Mbit) ---
- Если хочется мониторинг железа, включаем всё модулями в Device drivers --- Hardware Monitoring support --- и сверяемся ещё раз спостом.
- Не забываем включить поддержку USB и поддержку нужных флешек в Device drivers --- USB support --- USB Mass Storage support
- Так же стоит сразу включить поддержку оперативной памяти более 1Гб отметив Processor type and features --- High Memory Support (off) --- 4Gb
от простого пользователя:
make bzImage
(собрать ядро)
make modules
(собрать модули
от пользователя root: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 тут (а тут её обновление). Замечательный обзор того, какие ядра Линукс, кроме канонической ветки Линуса Торвальдса, есть здесь. Тут можно посмотреть ещё некоторые полезные замечания по сборке ядра.
Уважаемые комментаторы накопали ещё несколько очень полезных ссылок. Вот здесь говорится о сборке ядра для Убунты, а тут - для Дебиана на английском. Может, кому поможет.
0 коммент.:
Отправить комментарий