Компиляция ядра linux
Дата добавления: 31 марта 2010
Зачем вообще самому компилировать ядро?
Пожалуй, главный вопрос, который задают по поводу компиляции ядра: «А зачем мне это делать?».
Многие считают это бессмысленной тратой времени для того, чтобы показать себя умным и продвинутым «линуксоидом». На самом деле компиляция ядра — это очень важное дело. Допустим, вы купили новый ноутбук, в котором у вас не работает веб-камера. Ваши действия? Вы заглядываете в поисковик и ищите решение проблемы по этому вопросу. Довольно часто может оказаться, что ваша веб-камера работает на ядре более новой версии, чем у вас. Если вы не знаете, какая у вас версия — введите в терминале uname -r , в результате вы получите версию ядра (например, linux-2.6.31-10). Также компиляция ядра широко применяется для увеличения производительности: дело в том, что по умолчанию в дистрибутивах ядра компилируются «для всех», из-за этого в нем включено огромное количество драйверов, которые вам могут не понадобиться. Так что если вы хорошо знаете используемое оборудование, то можете отключить ненужные драйвера на этапе конфигурирования. Также есть возможность включить поддержку более 4х Гигабайт оперативной памяти, не меняя разрядность системы. Итак, если вам всё же необходимо иметь своё ядро, приступим к компиляции!
Получение исходного кода ядра.
Первое, что необходимо сделать — получить исходный код нужной версии ядра. Обычно необходимо получить самую новую стабильную версию. Все официальные версии ядра доступны на kernel.org. Если у вас уже установлен X сервер (домашний компьютер), то вы можете перейти на сайт в вашем любимом браузере и скачать нужную версию в архиве tar.gz (сжатый gzip). Если же вы работаете в консоли (например ещё не устанавливали X сервер или конфигурируете сервер), можете воспользоваться текстовым браузером (например elinks). Также можно воспользоваться стандартным менеджером загрузок wget :
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.gz
Но учтите, что вы должны знать точный номер нужной версии.
Распаковка архива исходного кода.
После того как вы получили архив с исходным кодом, вам необходимо распаковать архив в папку. Это можно сделать из графических файловых менеджеров (dolphin,nautilus и т.п) или через mc. Либо воспользуйтесь традиционной командой tar:
tar -zxvf путь_до_архива
Теперь у вас есть папка и исходным кодом, перейдите в неё, используя команду cd каталог_исходного_кода_ядра (чтобы просмотреть список каталогов в папке, используйте команду ls ).
Конфигурация ядра.
После того как вы перешли в каталог с исходным кодом ядра, необходимо выполнить «20 минутную» конфигурацию ядра. Цель её — оставить только нужные драйвера и функции. Все команды уже нужно исполнять от имени суперпользователя.
make config — консольный режим конфигуратора.
make menuconfig — консольный режим в виде списка.
make xconfig — графический режим.
После внесения нужных изменений, сохраните настройки и выйдите из конфигуратора.
Компиляция.
Пришло время завершающего этапа сборки — компиляция. Это делается двумя командами:
make && make install
Первая команда скомпилирует в машинный код все файлы, а вторая установит новое ядро в вашу систему.
Ждем от 20 минут до нескольких часов (в зависимости от мощности компьютера). Ядро установлено. Чтобы оно появилось в списке grub(2), введите (от суперпользователя)
update-grub
Теперь после перезагрузки нажмите «Escape», и вы увидите новое ядро в списке. Если же ядро не включается, то просто загрузитесь со старым ядром и конфигурируйте более аккуратно.
KernelCheck — компиляция ядра не заходя в консоль.
KernelCheck позволяет собрать ядро в полностью графическом режиме для Debian и основанных на нём дистрибутивов. После запуска, KernelCheck предложит свежие версии ядра и патчи, и после вашего согласия, скачает исходных код, запустит графический конфигуратор. Программа соберет ядро в .deb пакеты и установит их. Вам останется лишь перезагрузиться.
Автор: Soft, дата: 31 марта 2010 , время: 20:46:09 (MSK).
Если блог для новичков, то сразу бы с кернелчек программы начать надо, а потом уже для тех кому не страшно самому))))
+ не плохо былобы скриншоты каждого этапа)))
Ноябрь 2018
Октябрь 2018
Май 2017
Март 2017
Апрель 2016
Март 2016
Октябрь 2013
Сентябрь 2013
Май 2013
Март 2013
Ноябрь 2012
Июль 2012
Июнь 2012
Апрель 2012
Март 2012
Февраль 2012
Апрель 2011
Март 2011
Февраль 2011
Январь 2011
Декабрь 2010
Ноябрь 2010
Октябрь 2010
Сентябрь 2010
Август 2010
Июль 2010
Июнь 2010
Май 2010
Апрель 2010
Март 2010
Источник
Зачем компилировать ядро?
Часто пишут про компилирование ядра для поддержки разного оборудования. Зачем это делать если есть динамически загружаемые модули ядра и можно собрать только необходимые модули, а ядро оставить как есть? Когда вообще возникает необходимость компилировать ядро кроме сборки или обновления системы из исходников?
Я например компиляю ядро чтобы оно было монолитное, пропатчить драйвер видеокарты для поддержки видеокартой 4К разрешения, потому как в дефолте она прикидывается, что может только в 1920х1080. Можно еще собрать ядро реального времени чтобы звук был без задержек совсем. Кроме того когда нет нужды компилять все модули это происходит в разы быстрее — 5 минут вместо часа например. Когда хочется отключить патчи ядра, снижающие быстродействие, которые защищают от угроз и много чего еще.
А в вашем дебиане всегда так. Если там чего то нет — значит это никому не нужно и вообще ни на что не влияет. Но оно влияло, когда эта фича только появилась, я отмечал разницу между ядрами с 250 и 1000hz визуально, при перемещении окон в КДЕ например. Никакой OpenGL тогда ничего не ускорял и банальный композитинг казался чрезвычайно продвинутой и крутой фишкой. Сейчас наверное действительно разницу можно только в динамических играх почувствовать.
Я например компиляю ядро чтобы оно было монолитное
Просто чтобы оно таким было, из религиозно-фанатических соображений?
пропатчить драйвер видеокарты для поддержки видеокартой 4К разрешения
Ну, ОК, такое. Что за драйвер, удивлён тем что нужно патчить для этого. Сам 4к не практикую, просто интересно знать на будущее.
Можно еще собрать ядро реального времени чтобы звук был без задержек совсем.
А можно использовать rt ядро для своего дистрибутива, если оно есть. Тоже, такое. Ну ОК.
Кроме того когда нет нужды компилять все модули это происходит в разы быстрее — 5 минут вместо часа например.
А если пользоваться готовым — 0 секунд.
Когда хочется отключить патчи ядра, снижающие быстродействие, которые защищают от угроз
Достаточно прописать mitigations=off в параметры загрузки ядра, пересобирать его совсем не обязательно для этого, кроме того в конфиге не все mitigations отключаются.
Хм. А что это за тайно супер возможности, которые не нужны настолько, что легче перекомпелять ядро?
Уже не первый раз на протяжении многих лет задаётся вопрос в лоб — «Зачем компилировать ядро?» И ни разу я не слышал ничего вменяемого. «Не всем нужно то что по дефолту, некоторым нужно нечто особенное» и никакой конкретики. И даже мантры про то, что ядро становится быстрее уже не повторяют.
А в вашем дебиане всегда так. Если там чего то нет — значит это никому не нужно и вообще ни на что не влияет.
А у тебя что за дистрибутив, где по дефолту 1000 герц стоит?
Хм. А что это за тайно супер возможности, которые не нужны настолько, что легче перекомпелять ядро?
В моём случае в дефолтном ядре моего дистрибутива криво включена поддержка NUMA, наполовину, например не включено управление распределением памяти с учётом этой архитектуры. И это единственная причина почему оно у меня самосборное. Ну и заодно я в нём повыключал всё то чего у меня нет, просто потому что умею и могу.
А там где архитектура стандартная я давно и прекрасно пользуюсь дефолтным ядром и ущербным себя не чувствую. Если ты думаешь меня поджечь на флейм самосбор или дефолт, модули или монолит и т.п. — зря, я не бомбану. Всегда утверждал и утверждаю что от добра добра не ищут, если в готовом дистрибутивном ядре всё работает и всё устраивает — это прекрасно. Правильно говорят, те кто пересобирают ядра сами обычно знают зачем они это делают. А тем кто спрашивает «зачем пересобирать?» пересобирать ядра незачем. Иначе они бы этот вопрос не задавали.
А у тебя что за дистрибутив, где по дефолту 1000 герц стоит?
А, ну у них там всё не как у людей. Насколько я помню они и патчи с BFQ раньше накладывали, до того как его в апстрим влили, и ещё что-то. Но в большинстве дистрибутивов это либо 250, либо 300 герц.
я отмечал разницу между ядрами с 250 и 1000hz визуально
Испытания проводил двойным слепым методом? Или поменял и сразу «заметил»?
Сейчас наверное действительно разницу можно только в динамических играх почувствовать
Игры тут вообще не причём. Суть была в том, что изначально к CONFIG_HZ были привязаны все планировщики ядра. С ростом производительности дефолтное значение в 100 (т.е. 10мс) стало слишком большим для планировщика типичного десктопа — мощность процессора позволяла комфортно работать с несколькими задачами, но время переключения между ними упиралось в 10мс интервал между принятиями решений планировщиком. Аналогичная проблема была с планировщиком ввода-вывода — характерные времена задержки у винчестеров упали меньше 10мс. Поэтому сначала добавили вариант с 1000 (1мс), а потом и 250 (4мс), когда выяснилось, что 1000 даёт великоватый оверхэд. Но время шло, росло число ядер (при обработке пользовательского действия во время уже работающей одной задачи теперь не надо ждать принятия решения планировщиком по приостановке этой задачи и отдачи процессора на другую, теперь она просто запускается на свободном ядре с нулевой задержкой), появлялись NCQ и SSD, которые вообще сводили на нет нужду в планировщике в/в, под это всё менялись и планировщики, теперь тот же bfq полностью отвязан от CONFIG_HZ.
Прогнал тест таймеров на Linux 5.8.1, OpenSUSE, результаты нормальные, но хуже, чем у Haiku: https://imgur.com/a/jwdP1QI.
в большинстве дистрибутивов это либо 250, либо 300 герц.
Мне почему то кажется что так только в Дебиане и в серверных дистрибутивах, RHEL\CentOS там. В бубунте кажется 1000, в сусе и федоре тоже, но могу наврать, не уверен. В любом случае там ядер на все случаи жизни есть, и десктопные наверняка с 1000, а серверные — нет. В Кальке только десктопное ядро с 1000, а серверное с 300 или 250, не помню, но не 1000.
Gentoo же, видеокарта использует драйвер Radeon и в биосе ограничен, плюс крашит логин менеджеры вроде GDM, SDDM, ругаясь на кривой биос у видеокарты. Вот тут описание с файлами, где изменения
Если использовать скачиваемое ядро, то я видел у войда скорость низкую, так что пока оно скачает под 300 мегабайт, то архив на 70 мегабайт уже соберется.
Можно и так, но вдруг есть любители нарочно включать то, что должно быть выключено. Мало ли какие ситуации бывают в жизни, это просто вариант.
Кажется. 250. В росе 300.
Испытания проводил двойным слепым методом? Или поменял и сразу «заметил»?
Поменял и заметил, именно так. Это было миллиард лет назад, МНЕ разница в отклике и поведении ГУИ была очевидна, и сейчас я доказывать ничего не собираюсь. И даже более того, соглашусь что сейчас возможно разницы и нет, но проверять не буду, так как у меня всё прекрасно так как есть и трогать я это не буду больше.
Игры тут вообще не причём. Суть была в том, что изначально.
Полностью согласен и спорить не буду. Уверен что сейчас разницу в производительности и отзывчивости между этими параметрами можно увидеть только в синтетике и она будет на грани погрешности измерений.
Нет, я не поджигаю. Я просто конкретики хочу. Про NUMA — это повод, но не массовое явление. Это нужно 0.001% линуксоидов. Как и другие реальные проблемы. И каждый, кто решал такие проблемы в состоянии в двух-трёх словах описать это, но обычно доводы лоровцев на животрепещущий вопрос — «патамучо нада!»
П.с. это не наезд на тебя, а то вдруг опять не так поймёшь 🙂
А можно смешной вопрос? А как другие дистрибутивы ведут себя на данном компе?
Когда вообще возникает необходимость компилировать ядро кроме сборки или обновления системы из исходников?
Если нужно что-то в конфиге изменить или если какие-нибудь сторонние патчи нужны (например, сторонний планировщик CPU).
Кстати откуда вы берёте частоту таймеров? У меня ничего такого нет, ядро родное от OpenSUSE:
Прогнал тест таймеров на Linux 5.8.1, OpenSUSE, результаты нормальные, но хуже, чем у Haiku.
HPET в бивисе\уефи выключен или включён?
Читал что HPET для десктопа «не очень», снижает производительность в играх, и его рекомендуется выключать, но я тупой и так и не всосал до конца чем он плох. Но на всякий случай выключил.
NUMA — это довольно таки массовое явление среди линуксоидов. Не на десктопе, конечно. Собирать, конечно, никто не собирает, потому что в мейнстриме не принято обрезать нуму, на дебиане, убунте, центоси всё пучком из коробки.
Источник