exelens 27.08.2009 11:31
На заказ — Советы по сборке Ядра
Хочется в этой теме собрать советы и рекомендации на темукак собрать ядерную бомбу в домашних условиях сборки ядра.
Поделитесь опытом.
На что обратить внимание?
Что Вы обычно включаете, отключаете и зачем?
Плиз перестаньте тыкать урлами. Я умею юзать гугль.
Затем я использую модули по минимуму, компилируя все в ядро.
хотелось бы услышать большая ли польза от этого. И чем лучше realtime ядро?
чем точнее ядро заточено под использование конкретного железа, тем быстрее оно загружается и тем меньше оно занимает памяти...
Реалтайм ядро более отзывчиво. И даже в случае с критическими операциями, при которых на обычном ядре остается только ждать завершения, на реалтайм ядре можно спокойно продолжать работу...
Реалтайм ядро более отзывчиво. И даже в случае с критическими операциями, при которых на обычном ядре остается только ждать завершения, на реалтайм ядре можно спокойно продолжать работу...
На данный момент ядро эмулирует таймер, для старых приложений или драйверов, текущий планировчик генерирует остановку тогда когда она необходима. Для этого на метери должен быть теймар высокого разрешения.
включите
Tickless System (Dynamic Ticks)
и
High Resolution Timer Support
Это как бы компромис потому что реалтайм ядро тратит много времени на частые переключения контекста задач. Тем самым снижая производительность ядра.
включите
Tickless System (Dynamic Ticks)
и
High Resolution Timer Support
Это как бы компромис потому что реалтайм ядро тратит много времени на частые переключения контекста задач. Тем самым снижая производительность ядра.
Естественно, что производительность ядра падает... Увы, всегда приходиться чем то жертвовать, в данном случае выбирая между производительностью и отзывчивостью...
Динамические тики я использую... =)
Динамические тики я использую... =)
Ну, оно и дистрибутивное занимает немножко памяти. Померьте, разница максимум в мегабайт.
$ dmesg | grep kernel
< 0.000000> kernel direct mapping tables up to 7fe6d000 @ 10000-14000
< 0.004000> Memory: 2023680k/2095540k available (4749k kernel code, 492k absent, 70732k reserved, 2523k data, 532k init)
$ dmesg | grep kernel
< 0.000000> kernel direct mapping tables up to 7fe6d000 @ 10000-14000
< 0.004000> Memory: 2023680k/2095540k available (4749k kernel code, 492k absent, 70732k reserved, 2523k data, 532k init)
Я обычно собираю сугубо индивидуальное ядро, которое оптимизировано под работу только на моей машине, и только на моем железе.
Вот это наиболее интересно
Интересует всё по этапам.
Качаем архив с ядром, а дальше?
Что ты делаешь дальше?
Качаем архив с ядром, а дальше?
Что ты делаешь дальше?
Лень нагуглить чтоли? Куча разжеванных материалов есть на эту тему. Их реально много.
http://ss.lg.ua/node/42
http://ss.lg.ua/node/42
Вариантов может быть довольно много... Можоно собрать ядро просто из исходников, а можно с созданием установочного пакета под конкретную систему. Таких инструкций можно написать множество. Только вот стоит ли? Если все уже описано?? ;)
Объясните мне, ламеру виндузятнику, что представляет под собой сборка ядра? Это ведь просто компиляция кода? Или нет? =)) Я по крайней мере так думаю..
Да, это обычная компиляция кода ядра. Только перед этим нужно выбрать какие функции в него включать и как включать(в ядро или как модуль который потом можно отключить/подключить)
Макс =) Если будет много полезных советов в этом топике я соберу 1 большой топик со всеми фишками.
Сама по себе сборка - да, компиляция. Важен этап configure, он и определяет, что в конечном итоге соберется)
Сборка это конфигурирование в первую очередь
ядро может быть монолитное или модульное
направленно на разные типы задач, базы данных например, веб сервер, супервизор для фермы виртуальных серверов, фаервол-маршрутизатор
восновном удаляются лишние функции которые занимают время и память ядра.
ядро может быть монолитное или модульное
направленно на разные типы задач, базы данных например, веб сервер, супервизор для фермы виртуальных серверов, фаервол-маршрутизатор
восновном удаляются лишние функции которые занимают время и память ядра.
Я когда первый раз в жизни попытался собрать ядро для моей машины в Gentoo, у меня ничего не запустилось. Я тогда собрал генкернел - и пошло.
Еще хотелось бы знать: действительно ли компилируются все модули независимо от того, что выбрано в конфиге?
Еще хотелось бы знать: действительно ли компилируются все модули независимо от того, что выбрано в конфиге?
действительно ли компилируются все модули независимо от того, что выбрано в конфиге?
Так не должно быть, а откуда Вы это взяли?
Во-первых, оно слишком долго компилировало (как мне кажется). Во-вторых, я пошарил по папкам в папке с исходниками и у каждого файла есть бинарник (вроде *.o, короче я не разбираюсь, но все файлы - по парам.).
Еще такое, что я не совсем уверен, что настройки сохранились как надо. Потому что после конфигурации я выходил - оно не спрашивало сохранить ли. Также пробовал сохранять в файл .config, и другие.
И у меня не получится поэксперементировать. Машина слабая. И я не знаю как почистить ЖД после emerge.
Еще такое, что я не совсем уверен, что настройки сохранились как надо. Потому что после конфигурации я выходил - оно не спрашивало сохранить ли. Также пробовал сохранять в файл .config, и другие.
И у меня не получится поэксперементировать. Машина слабая. И я не знаю как почистить ЖД после emerge.
В плане почистить? Тарболы хранятся в /usr/portage/distfiles, почистить /usr/src/linux можно
make clean
, освободится порядка 600-800 Мб.
действительно ли компилируются все модули независимо от того, что выбрано в конфиге?
Нет, это не так) Все, что отключено, не собирается. У меня вообще свое ядро собирается намного быстрее дефолтного, 2м20с без ccache :)
Я собрал более-менее хорошее ядро для своего компьютера раза с двадцатого.
А идеальное ядро собрал раз на пятидесятый. Зато сейчас для нового компьютера на идеальное ядро потратил всего полчасика.
А идеальное ядро собрал раз на пятидесятый. Зато сейчас для нового компьютера на идеальное ядро потратил всего полчасика.
http://dominet.lg.ua/linux/kernel/kernel-howto.html в зубы и вперёд
присборке ядра ...достаточно знать устройство компьютера + не много англ.яз + знать что у тебя за железо внутри коробки =) + не которые моменты в гугле =)
первый вопрос который я себе задал когда хотел собрать свое ядро: как мне узнать какое у меня железо.
спасибо за Hardinfo (прикольно), но не тру =\ - консольненького хочетсо =\
lspci, lsusb, dmesg, cat /proc/cpuinfo итд
а лучше глянуть в нутрь узнать модель мамки итд ,ну есть еще вариант посмотреть в гарантийке/чеке
а лучше глянуть в нутрь узнать модель мамки итд ,ну есть еще вариант посмотреть в гарантийке/чеке
На мой взгляд в современных десктопных дистрибутивах нет необходимой надобности пересобирать ядро. Апдейты приходят из репозитория. Поддержка железа? Так современные дистрибутивы имеют модульные ядра в которые включено все или почти все железо которое может поддерживать данное ядро. Если не работает, значит в ядре просто нет драйвера. Господа пользователи linux (не гентушники :) вспомните, как часто вы собираете ядро из исходников? Я собирал давно и только для общего развития. Вот это "общее развитие" действительно будет полезно.
Естественно, что каждый должен решить для себя сам, использовать ему ядро из репо, или собрать самому...
Собрав свое ядро, я скорректировал используемые кодировки при монтировании файловых систем, минимизировал время инициализации системы устройств и настроил ядро именно на тот уровень производительности/отзывчивости, что удовлетворяет меня.
Собрав свое ядро, я скорректировал используемые кодировки при монтировании файловых систем, минимизировал время инициализации системы устройств и настроил ядро именно на тот уровень производительности/отзывчивости, что удовлетворяет меня.
И самое главное, собирать на железных серверах ядро - надо, ибо те 1-2% производительности(а может и больше) что может дать - тоже дело :)
про сервера я речь не вел... и производительность меня мало волнует... а вот отзывчивость системы (рабочей станции) это уже совершенно другое дело... ;)
Здесь привели много доводов к тому, что нужно пробовать самому, и я с этим согласен. Но одна фишка мне спасла много времени.
При конфигурировании ядра иногда возникает такая ситуация, что вроде бы знаешь о поддержке своей железки, но не можешь найти опции для нее в конфигураторе. Или, скажем, опции есть, но не все. В общем это происходит из-за того, что некоторые опции зависят от других. А если другие не включены, то желаемые просто не отображаются. Причем у меня была ситуация, когда некоторые фичи ееешки появлялись только после включения каких-то фич для тошибы. Как я это выяснил? Грепал название железки (в разных вариантах) по файлам в каталоге с исходниками ядра, содержащим в имени подстроку Kconfig. Потом смотрел зависимости, ну и становилось ясно что еще нужно довключить.
При конфигурировании ядра иногда возникает такая ситуация, что вроде бы знаешь о поддержке своей железки, но не можешь найти опции для нее в конфигураторе. Или, скажем, опции есть, но не все. В общем это происходит из-за того, что некоторые опции зависят от других. А если другие не включены, то желаемые просто не отображаются. Причем у меня была ситуация, когда некоторые фичи ееешки появлялись только после включения каких-то фич для тошибы. Как я это выяснил? Грепал название железки (в разных вариантах) по файлам в каталоге с исходниками ядра, содержащим в имени подстроку Kconfig. Потом смотрел зависимости, ну и становилось ясно что еще нужно довключить.
Не могу сказать что вы выбрали оптимальный вариант поиска. Хотя он более "надежный".
Мой вариант при первой настройке был такой.
Сначала на родном многомодульном ядре арча я делал lsmod и смотрел какие модули загружены. Затем в 'make menuconfig' ядра я жал на '/' и появлялся куцый диалог поиска. В нем я вводил ключевые буквосочетания тех модулей, которые у меня загружены. Например, адаптер беспроводной сети Atheros на Eee PC 900 работает на драйвере ath5k. Я воодил ath или ath5k и жал ввод. В появившемся диалоге был список того, что удовлетворяет этим критериям поиска (при поиске ath вышел довольно большой список, в который вошли не только ath5k но и ath9k, что=то про math и еще несколько модулей со словом path в названии). Так вот, находим нужный нам модуль в списке и смотри что там про него написано:
Мой вариант при первой настройке был такой.
Сначала на родном многомодульном ядре арча я делал lsmod и смотрел какие модули загружены. Затем в 'make menuconfig' ядра я жал на '/' и появлялся куцый диалог поиска. В нем я вводил ключевые буквосочетания тех модулей, которые у меня загружены. Например, адаптер беспроводной сети Atheros на Eee PC 900 работает на драйвере ath5k. Я воодил ath или ath5k и жал ввод. В появившемся диалоге был список того, что удовлетворяет этим критериям поиска (при поиске ath вышел довольно большой список, в который вошли не только ath5k но и ath9k, что=то про math и еще несколько модулей со словом path в названии). Так вот, находим нужный нам модуль в списке и смотри что там про него написано:
SYMBOL: ATH5K <=y>
Prompt: Atheros 5xxx wireless cards support
Defined at drivers/net/wireless/ath5k/Kconfig:1
Depends on: NETDEVICES && !S390 && PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
Location:
-> Device drivers
-> Network device support (NETDEVICES <=y>)
-> Wireless LAN
-> Wireless LAN (IEEE 802.11) (WLAN_80211 <=y>)
Selects: MAC80211_LEDS && LEDS_CLASS && NEW_LEDS
Собственно, в первой строчке у нас название модуля ядра. Во второй - описание модуля на человекоудобном языке. Третья строка говорит где искать Kconfig. Четвертая - говорит о зависимостях (вам необходимо будет включить все указанные модули и отключить те, перед которыми стоит '!'). С пятой строки начинается описание пути, по которому вы сможете найти модуль в меню 'make menuconfig'
Согласен, твой путь более высокоуровневый, если можно так выразиться. На самом деле, на тот момент я еще не знал, что в menuconfig можно поиск делать :) Вот и пришлось грепать.
Но по сути, наши способы одинаковы.
Но по сути, наши способы одинаковы.
Наивные...
Самое главное - это понимать, в каких целях собирается ядро, где оно будет использоваться? Сервер или рабочая станция? Какие программы будут работать??
Затем уже определяется, ядро будет работать только на одной машине, или будет использоваться на целом парке машин с разнообразным железом? В первом случае можно будет включать только то железо, что нужно и уже не в виде модулей, а напрямую компилируя все в ядро... Во втором случае уже как раз нужно использоваться модули и включать все то железо, что будет использоваться в этом парке... То есть делать его более универсальным.
Я обычно собираю сугубо индивидуальное ядро, которое оптимизировано под работу только на моей машине, и только на моем железе. Если перенести его на другую машину, велика вероятность того, что вообще ничего работать не будет...
Затем я использую модули по минимуму, компилируя все в ядро.
Увеличиваю частоту до 1000Герц, в целяз получения большей отзывчивости, одно время даже реалтайм ядро использовал...
Это если кратко...