debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: (Howto) Сборка ядра в Debian.  (Прочитано 24342 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Brainey

  • Topic Author
  • Сообщений: 1943
  • Jabber: brainey@jabber.cz
(Howto) Сборка ядра в Debian.
« : 02 Июнь 2011, 14:26:58 »
Подготовка
Ставим пакеты, необходимые для компиляции ядра:
# aptitude install kernel-package libncurses5-dev fakeroot build-essential pkg-config
Переходим в каталог, в котором собираемся производить сборку. (В этом примере в качестве данного каталога будет рассматриваться /usr/src). Скачиваем и распаковываем исходники ядра:
# cd /usr/src && wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-версия-ядра.tar.bz2 && tar xjf linux-версия.tar.bz2
Переходим в папку с исходниками:
# cd /usr/src/linux-версия

Наложение патчей
Если вы собираетесь накладывать патчи на ядро, ставим необходимую для наложения патчей программу:
# aptitude install patch
Сами же патчи накладываются следующими командами:
patch -p1 -i patch-версия
Если патч запакован в архив, то команда будет выглядеть так:
bzip2 -dc /usr/src/patch-версия | patch -p1
В этом случае использовался патч, запакованный в архив .tar.bz2, если же ваш случай отличается от моего, то в этой команде всего лишь нужно заменить имя архиватора bzip2 на нужное, например, на gzip в случае с tar.gz архивом.
Кстати говоря, перед наложением патчей, лучше проверить, насколько хорошо они накладываются на ядро. Для этого к вышеприведенным командам добавляется флаг --dry-run, который имитирует применение патча:
patch -p1 -i patch-версия --dry-runbzip2 -dc /usr/src/patch-версия | patch -p1 --dry-run
Если при выполнении этих команд в выводе не появились строчки, содержащие что-то вроде комбинации слов "Hunk failed", то скорее всего, всё хорошо.


Конфигурирование
Конфигурация ядра читается из файла .config. Для создания оного можно воспользоваться старым файлом конфигурации ядра, который лежит в /boot:
# cp /boot/config-$( uname -r ) .config
Либо создать новый.
Для конфигурирования ядра можно использовать одну из нижеперечисленных команд:
make nconfigЭта команда поддерживается, начиная с ядра версии 2.6.35, не требует установки дополнительных пакетов.
make menuconfigСтарый аналог make nconfig

make xconfigЭта программа конигурации имеет графический интерфейс, использующий qt. Если собирается ядро младше версии 2.6.38, то ставим следующие пакеты:
# aptitude install qt3-dev-toolsЕсли 2.6.38 или старше, то:
# aptitude install libqt4-dev
make gconfigТоже имеет графический интерфейс, но в отличие от xconfig, использует gtk, а не qt.
Для работы с ней ставим следующие пакеты:
# aptitude install libgtk2.0-dev libglib2.0-dev libglade2-dev
make oldconfig
При использовании этой команды, файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра.

make defconfigПри использовании defconfig файл конфигурации создается, основываясь на значения по умолчанию.

make localmodconfigПри использовании этой команды, (работает в ядрах 2.6.32 и новее) сравниваются загруженные в данный момент модули и те, чья поддержка включена в ядре, если находятся лишние модули, то они отключаются.

make localyesconfigСкрипт для отказа от initrd. Все необходимые модули включаются в ядро.


Компиляция ядра и сборка в пакеты
Компиляция и сборка ядра в пакеты производится следующей командой:
# make-kpkg --initrd --revision=mybuild.1.0 kernel_image kernel_headers
Также можно задать количество потоков для компиляции. В этом случае команда будет выглядеть так:
# CONCURRENCY_LEVEL=N make-kpkg --initrd --revision=mybuild.1.0 kernel_image kernel_headersгде N = количество потоков.

Установка
После компиляции ядра в каталоге создаются два deb-пакета, которые ставятся командами
dpkg -i linux-image-версия.debdpkg -i linux-headers-версия.deb
После чего grub автоматически прописывает их в своем конфигурационном файле.
Теперь можно загрузиться с новым ядром. Если при конфигурировании вы не допустили никаких критических ошибок, всё должно быть хорошо.  :)
« Последнее редактирование: 08 Декабрь 2011, 10:26:33 от Brainey »
Конференция форума в jabber: debianforum@conference.jabber.ru | Клуб кедоводов: kde@conference.jabber.ru
 

Оффлайн Metrix

  • Сообщений: 486
  • Jabber: metrix-ds@jabber.ru
Re: (Howto) Сборка ядра в Debian.
« Ответ #1 : 02 Июнь 2011, 16:20:28 »
Вот и у нас на форуме теперь есть хаутушка про то, как собирать ядро)))
Юзербар в отпуске
 

paulcarroty

  • Гость
Re: (Howto) Сборка ядра в Debian.
« Ответ #2 : 02 Июнь 2011, 22:49:47 »
В Debian Wiki вроде давно есть.
 

Оффлайн Angel_ok

  • Интересующийся
  • Сообщений: 484
  • Lenovo E440 Debain 9 Gnome 3.22.2
Re: (Howto) Сборка ядра в Debian.
« Ответ #3 : 18 Июнь 2012, 12:01:40 »
В этом примере в качестве данного каталога будет рассматриваться /usr/src
В README не рекомендуют использовать эту директорию
Цитировать
Do NOT use the /usr/src/linux area! This area has a (usually
   incomplete) set of kernel headers that are used by the library header
   files.  They should match the library, and not get messed up by
   whatever the kernel-du-jour happens to be.

Компиляция и сборка ядра в пакеты производится следующей командой:
# make-kpkg --initrd --revision=mybuild.1.0 kernel_image kernel_headers
Часто встречается рекомендация использовать данную команду не из под руда а с помощью fakeroot
fakeroot make-kpkg --initrd kernel_image kernel_headers
Также необходимо добавить к инструкции пункт
Если что-то пошло не так - необходимо выполнить
make mrproperПредварительно забэкапив .config
Вы думаете, всё так просто? Да, всё просто. Но совсем не так…
                                                                                                          Альберт Эйнштейн
 

Оффлайн sx88

  • Сообщений: 345
  • ASUS P8H61-MLE intel g630
Re: (Howto) Сборка ядра в Debian.
« Ответ #4 : 26 Декабрь 2012, 19:47:16 »
Прошу прощения если пишу не в ту тему. При компиляции ядра 3.5.4 возник вопрос по поводу опции
Enable cleancache driver to cache clean pages if tmem is present
Что это такое и для чего служит? Кто ее включал?
И еще, если у меня процессор Intel нужна ли мне опция AMD MCE features ?
 

Оффлайн Olej

  • Сообщений: 344
Re: (Howto) Сборка ядра в Debian.
« Ответ #5 : 26 Декабрь 2012, 20:42:34 »
Прошу прощения если пишу не в ту тему. При компиляции ядра 3.5.4 возник вопрос по поводу опции
Enable cleancache driver to cache clean pages if tmem is present
Что это такое и для чего служит? Кто ее включал?
И еще, если у меня процессор Intel нужна ли мне опция AMD MCE features ?

Меня всегда удивляло: зачем вы лезете конфигурировать ядро, если не понимаете что там и зачем?
Там 2 или 3 сотни конфигурационных параметров ... вы все их будуте разгребать и менять?
Вам КАЖЕТСЯ, что вы соберёте ядро лучше? - Да ни в жисть!

Единственный разумный путь конфигурирования ядра:
- хорошо понимать тот ЕДИНСТВЕННЫЙ (или минимум) параметр, который не устраивает в стандартной конфигурации;
- использовать oldconfig ...
- а после этого поменять тот единственный параметр.
 

Оффлайн sx88

  • Сообщений: 345
  • ASUS P8H61-MLE intel g630
Re: (Howto) Сборка ядра в Debian.
« Ответ #6 : 26 Декабрь 2012, 21:29:59 »
Меня всегда удивляло: зачем вы лезете конфигурировать ядро, если не понимаете что там и зачем?
Что-то понимаем, что-то нет, ищем в гугле, читаем форумы русскоязычные и иностранные.
Цитировать
Вам КАЖЕТСЯ, что вы соберёте ядро лучше? - Да ни в жисть!
Эх...  :-[  Но попробовать хотя бы стоит?  :D
Кстати, спасибо за совет за разумный путь конфигурации ядра. Если не получится "терпением и трудом" то прибегнем к вашему совету.
 

Оффлайн Olej

  • Сообщений: 344
Re: (Howto) Сборка ядра в Debian.
« Ответ #7 : 26 Декабрь 2012, 23:39:14 »
Эх...  :-[  Но попробовать хотя бы стоит?  :D

Конечно стоит!
Но стоит: понять какой ограничивающий параметр нам мешает + его устранить.

P.S. посмотрите ещё вот сюда: Драйверы и модули ядра Linux  - там есть и об этом.
« Последнее редактирование: 26 Декабрь 2012, 23:45:32 от Olej »
 

Оффлайн sx88

  • Сообщений: 345
  • ASUS P8H61-MLE intel g630
Re: (Howto) Сборка ядра в Debian.
« Ответ #8 : 26 Декабрь 2012, 23:57:44 »
Вот что нашел по опции  Enable cleancache driver to cache clean pages if tmem is present
Реализация нового типа кэша Cleancache, который может использоваться ядром для хранения восстановимых из других источников данных, которые не страшно потерять, но при наличии ресурсов неплохо держать в памяти. Например, в Cleancache могут храниться ассоциированные с файлами на диске страницы памяти, которые в случае очистки кэша впоследствии могут быть перечитаны с диска. Поддержка CleanCache уже добавлена в Ext3, Ext4, Btrfs, OCFS2 и Xen. Cleancache является первой практической реализацией появившейся в ядре 2.6.39 техники трансцендентного управления памятью ("Transcendent memory"), позволяющей улучшить поведение системы при работе с не представляющими важность данными (например кэш) в условиях дефицита оперативной памяти. По сути Transcendent memory напоминает RAM-диск, имеющий ряд особенностей: размер RAM-диска не известен, запись данных не всегда может быть гарантирована и уже записанные данные могут быть очищены (удалены);

Насколько я понял, если довольно много ОЗУ, то можно опцию и не включать. Интересно, от нее есть реальный прирост в производительности?  ???

Сообщение объединено: 27 Декабрь 2012, 21:36:41
P.S. посмотрите ещё вот сюда: Драйверы и модули ядра Linux  - там есть и об этом.
Немного не понял, что там есть? Лекция для программистов с глубоким пониманием того, как ядро работает с модулями, памятью и т.п. Т.е., чтобы грамотно собрать ядро нужно перелопатить весь материал?
« Последнее редактирование: 27 Декабрь 2012, 21:36:41 от sx88 »
 

Оффлайн sx88

  • Сообщений: 345
  • ASUS P8H61-MLE intel g630
Re: (Howto) Сборка ядра в Debian.
« Ответ #9 : 28 Декабрь 2012, 22:52:21 »
Как говориться :"Стучите и вам откроют, ищите и найдете" "... по неотступности".
Кто-нибудь в курсе какое значение ставить в опции MTRR cleanup spare reg num ?
Сама функция MMTR cleanup очищает мусор из регистров. Только непонятно какое значение выставлять. Наткнулся на форму обсуждение данного вопроса. 
Вывод регистров, с которыми работает MTRR cleanup
cat /proc/mtrr
reg00: base=0x000000000 (    0MB), size= 4096MB, count=1: write-back
reg01: base=0x100000000 ( 4096MB), size= 1024MB, count=1: write-back
reg02: base=0x0bb800000 ( 3000MB), size=    8MB, count=1: uncachable
reg03: base=0x0bc000000 ( 3008MB), size=   64MB, count=1: uncachable
reg04: base=0x0c0000000 ( 3072MB), size= 1024MB, count=1: uncachable
reg05: base=0x13fe00000 ( 5118MB), size=    2MB, count=1: uncachable
В dmesg "MTRR variable ranges enabled:" отображается полный список регистров.
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 000000000 mask F00000000 write-back
[    0.000000]   1 base 100000000 mask FC0000000 write-back
[    0.000000]   2 base 0BB800000 mask FFF800000 uncachable
[    0.000000]   3 base 0BC000000 mask FFC000000 uncachable
[    0.000000]   4 base 0C0000000 mask FC0000000 uncachable
[    0.000000]   5 base 13FE00000 mask FFFE00000 uncachable
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000]   8 disabled
[    0.000000]   9 disabled

 Так вот, на форуме человек говорит, что значение MTRR cleanup spare reg num нужно выставлять таким, какое количество незадействованных (disable) регистров. 
After some research, try-and-fail, the issue is solved. For anyone interested, here's what I've come to:

On the beginning of the kernel init, I have the fallowing output:

Code:
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 000000000 mask F80000000 write-back
[    0.000000]   1 base 07F800000 mask FFF800000 uncachable
[    0.000000]   2 base 07F700000 mask FFFF00000 uncachable
[    0.000000]   3 disabled
[    0.000000]   4 disabled
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
[    0.000000] original variable MTRRs
[    0.000000] reg 0, base: 0GB, range: 2GB, type WB
[    0.000000] reg 1, base: 2040MB, range: 8MB, type UC
[    0.000000] reg 2, base: 2039MB, range: 1MB, type UC
[    0.000000] total RAM covered: 2039M
[    0.000000] Found optimal setting for mtrr clean up
[    0.000000]  gran_size: 64K  chunk_size: 16M         num_reg: 3      lose cover RAM: 0G
[    0.000000] New variable MTRRs
[    0.000000] reg 0, base: 0GB, range: 2GB, type WB
[    0.000000] reg 1, base: 2039MB, range: 1MB, type UC
[    0.000000] reg 2, base: 2040MB, range: 8MB, type UC
showing how the MTRR memory is configured. You can see that from the 8 registers, 3 are taken and 5 are free. The "mtrr_spare_reg_num" is about those 5 free registers, where MTRR cleanup can make use of. My graphics card (GMA965) has 8MB of dedicated memory and 256MB of shared memory. So, MTRR cleanup will take use of one of those registers using it as a write-combining.

My kernel command-line is configured as "mtrr_spare_reg_num=5", saying that 5 of the 8 registers are free for MTRR cleanup to use. When set to a value > 5, MTRR complains about cannot find a optimal setting, leading to a bunch of errors - of course, since it's saying that > 5 registers are free, when actually they are taken.

The MTRR cleanup, in my case, only use one register (reg 3) for the MTRR cleanup, keeping the other 4 registers free, and thus giving the /proc/mtrr output showed on the first post.

So, this is it. Thank you, business_kid, for helping me out.

С точки зрения здравой логики, раз MTRR cleanup очищает мусор, значит она должна очищать мусор из заполненных регистров, а не из тех, которые недоступны/запрещены. Значит нужно ставить значение 6 (задействованные), а не 4 (disable регистры)

У кого какие соображения по этому поводу?
Источник из генту вики
cat /proc/mtrr
reg00: base=0x000000000 (    0MB), size= 2048MB, count=1: write-back
reg01: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back
Note that the reg01 is actually a normal memory layout due to 3G/1G memory split option i have set my kernel up as, There is not section at point reg01 for my write-combined graphics card in fact that is missing all together. This is because the ATI fglrx driver has claimed it. If you use Frame-buffer either kernel or X.org then the setting will appear as reg03,4,5 etc and will be moved(remapped) from the reg01 slot IO hope that clears up the reason and how this setting in the kernel works. If when MTRR_cleanup is disabled you notice the base address of your graphics card is at a different regXX number then change the spare reg number to this accordingly so you can allow for the write-combined or as in my case proprietary driver to take control of it.

« Последнее редактирование: 28 Декабрь 2012, 22:55:05 от sx88 »
 

Оффлайн Olej

  • Сообщений: 344
Re: (Howto) Сборка ядра в Debian.
« Ответ #10 : 29 Декабрь 2012, 04:09:40 »
P.S. посмотрите ещё вот сюда: Драйверы и модули ядра Linux  - там есть и об этом.
Немного не понял, что там есть? Лекция для программистов с глубоким пониманием того, как ядро работает с модулями, памятью и т.п. Т.е., чтобы грамотно собрать ядро нужно перелопатить весь материал?

нет, там есть приложение в конце, которое описывает только сборку ядра ...
а кроме того, там есть замечание о том, как ускорить сборку ядра раз в 10-20 (используя tmpfs), что очень способствует для экспериментов ... как вам: вместо 1.5 часа - 5 минут? :)
 

Оффлайн sx88

  • Сообщений: 345
  • ASUS P8H61-MLE intel g630
Re: (Howto) Сборка ядра в Debian.
« Ответ #11 : 05 Январь 2013, 01:17:48 »
что очень способствует для экспериментов ... как вам: вместо 1.5 часа - 5 минут?
По-моему, здорово :)
Может, стоит завести отдельную тему по опциям ядра, описаню, их включению/выключению для стационарников/нетбуков/ноутбуков? Каждый будет по мере сил записывать свои наблюдения, эмпирический опыт.
 

Оффлайн SeHELLioN

  • Сообщений: 910
Re: (Howto) Сборка ядра в Debian.
« Ответ #12 : 07 Январь 2013, 17:50:15 »
Может, стоит завести отдельную тему по опциям ядра, описаню, их включению/выключению для стационарников/нетбуков/ноутбуков? Каждый будет по мере сил записывать свои наблюдения, эмпирический опыт.
если есть желающие следить за ней и регулярно дополнять шапку, собирая такое большое и доступное howto, то против никто не будет
Asus m5a97+Amd fx-8350+4x4GB DDR3 1600MGz+asus gtx670 DCII (перешита в top)
Debian stable
 

Оффлайн noname

  • Сообщений: 198
Re: (Howto) Сборка ядра в Debian.
« Ответ #13 : 27 Февраль 2013, 21:01:27 »
хотелось бы добавить по ошибке при сборке ядра 3.xx:
make: *** Documentation/lguest: No such file or directory.
Вот что google говорит:
-при переходе ядер с версии 2.х.х на 3.х.х поменялось расположение каталога с документацией по lguest.
Находясь в каталоге с исходниками ядра:
#cd ./Documentation
#ln -s virtual/lguest
#cd  /usr/src/linux-3.xx 
т.е создаем символьную ссылку в  /Documentation  на тот самый  потерявшийся  lquest.
Без этого ну никак не хотело собираться 3.2
Если что поправьте :-[
Вот еще полезная ссылка
http://hardware4linux.info/types/   <---Тут можно посмотреть что есть в пк  :)
взято с http://zenux.ru/articles/44/
Ещё вот утилиты: ccache (кеширует процесс сборки,в репозиториях есть)
и distcc (сборка по сети ресурсами нескольких ПК)
вот http://rascal.su/blog/2010/11/05/
« Последнее редактирование: 02 Март 2013, 02:20:10 от noname »
Gentoo x86_64 AMD E-350 Openbox 3.5.2
 

Оффлайн AlekseyDebian

  • Сообщений: 72
Re: (Howto) Сборка ядра в Debian.
« Ответ #14 : 09 Август 2013, 11:53:40 »
make-kpkg --initrd --revision=mybuild.1.0 kernel_image kernel_headers
Так ядро не компилируется: ругается, что версия должна начинаться с цифры.

Так все ок:
make-kpkg --initrd --revision=1.0 kernel_image kernel_headers
 

Теги: сборка ядра