HOW-TO: Сборка ядра Linux Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:сборка_ядра [2012/07/28 14:31]
[HOW-TO: Сборка ядра Linux]
wiki:сборка_ядра [2018/12/18 21:10] (текущий)
[Шаг 1. Получение исходного кода ядра]
Строка 3: Строка 3:
  
 ===== Шаг 1. Получение исходного кода ядра ===== ===== Шаг 1. Получение исходного кода ядра =====
-  - Перейдите ​на сайт [[https://www.kernel.org|kernel.org]] +Исходники ядра Ubuntu можно получить [[https://help.ubuntu.com/​community/​Kernel/​Compile|двумя способами]] 
-  ​- Загрузите полный архив необходимой вам версии ядра в домашнюю папку, нажав справа от неё на ссылку [Full Source+  ​* Установив ​архив из репозитория, с автоматическим наложением ​последних официальных патчей. При этом скачается пакет ​размером ~150 Мб в текущую папку. Чтобы получить исходники ядра, ​версия которого установлена на компьютере выполните команду: <​code>​apt-get source linux-image-`uname -r`</​code>​ Или вместо ''​`uname -r`''​ можно указать конкретную версию из имеющихся в репозитории.  
-  ​Распакуйте полученный архив, используя команды:​+<​note>​Список имеющихся в репозитории версий можно увидеть набрав команду: ''"​apt-get source linux-image-"''​ и, не нажимая ''​Enter'',​ нажать два раза клавишу ''​Tab''​. 
 + 
 +Не забудьте включить общий доступ к исходникам в репозитории (''​Параметры ​системы → Программы и обновления → Программное обеспечение Ubuntu → Исходный код''​). Из консоли это сделать можно ​раскомментировав строки начинающиеся с deb-src в файле /​etc/​apt/​sources.list,​ а затем выполнить обновление командой: "sudo apt-get update"​.  
 +</​note>​ 
 +  * Самая свежая версия ядра доступна по [[https://​wiki.ubuntu.com/​Kernel/​Dev/​KernelGitGuide|git]]. Размер скачиваемого ​пакета ~500—800 Мб. <​code>​git clone git://​kernel.ubuntu.com/​ubuntu/​ubuntu-<​release codename>​.git</​code>​ Где <release codename>​ - имя релиза,​ например:​ <​code>​git clone git://​kernel.ubuntu.com/​ubuntu/​ubuntu-xenial.git</​code>​  
 + 
 +**Другие ядра** 
 + 
 +Также существуют ядраработоспособность которых в Ubuntu не гарантируется. Например,​ известна проблема с рядом популярных системных приложений (в частности драйвера NVidia, VirtualBox),​ которые при ​своей установке компилируются под установленное ядро. Поэтому для их установки на ядро, нестандартное для данной версии Ubuntu (например,​ Ubuntu 16.04 идёт ​с ядром 4.4.0), может потребоваться их отдельная ​компиляция вручную или специальные патчи, а последние версии ядер с kernel.org приложение может вообще не поддерживать. 
 + 
 +  * Архив с базовой версий без патчей,​ т.е. например "​4.8.0",​ "​4.8.10":​ <​code>​sudo apt-get install linux-source</​code>​ 
 +  * Ядра тестовой линии ​[[https://​wiki.ubuntu.com/​Kernel/​MainlineBuilds|Mainline]]: http://​kernel.ubuntu.com/​~kernel-ppa/​mainline/​ 
 +  ​* Общие ядра Linux, не адаптированные к Ubuntu: [[https://​www.kernel.org|kernel.org]] 
 + 
 +Распакуйте полученный архив, используя команды:​
 <​code>​cd ~/ <​code>​cd ~/
 tar -xjf linux-2.6.x.y.tar.bz2</​code>​ tar -xjf linux-2.6.x.y.tar.bz2</​code>​
 +Или в случае с linux-source:​
 +<​code>​cd /usr/src
 +tar -xjf linux-source-2.6.x.y.tar.bz2</​code>​
  
 ===== Шаг 2. Получение необходимых для сборки пакетов ===== ===== Шаг 2. Получение необходимых для сборки пакетов =====
Строка 24: Строка 41:
   * **localmodconfig** - файл конфигурации,​ создающийся автоматически,​ в который включается только то, что нужно данному конкретному устройству. При вызове данной команды большая часть ядра будет замодулирована   * **localmodconfig** - файл конфигурации,​ создающийся автоматически,​ в который включается только то, что нужно данному конкретному устройству. При вызове данной команды большая часть ядра будет замодулирована
   * **localyesconfig** - файл конфигурации,​ похожий на предыдущий,​ но здесь большая часть будет включена непосредственно в ядро. Идеальный вариант для начинающих.   * **localyesconfig** - файл конфигурации,​ похожий на предыдущий,​ но здесь большая часть будет включена непосредственно в ядро. Идеальный вариант для начинающих.
-В случае,​ если вы хотите использовать **config**, **oldconfig**,​ **defconfig**,​ **localmodconfig**, **localyesconfig** или **xconfig**, вам больше не нужны никакие дополнительные пакеты. В случае же с оставшимися тремя вариантами необходимо установить также дополнительные пакеты.+В случае,​ если вы хотите использовать **config**, **oldconfig**,​ **defconfig**,​ **localmodconfig** или **localyesconfig**, вам больше не нужны никакие дополнительные пакеты. В случае же с оставшимися тремя вариантами необходимо установить также дополнительные пакеты.
  
 Для установки пакетов,​ необходимых для использования **menuconfig** выполните следующую команду:​ Для установки пакетов,​ необходимых для использования **menuconfig** выполните следующую команду:​
Строка 31: Строка 48:
 Для установки пакетов,​ необходимых для использования **gconfig** выполните следующую команду:​ Для установки пакетов,​ необходимых для использования **gconfig** выполните следующую команду:​
 <​code>​sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev</​code>​ <​code>​sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev</​code>​
 +
 +Для установки пакетов,​ необходимых для использования **xconfig** выполните следующую команду:​
 +<​note>​До Ubuntu 12.04:
 +<​code>​sudo apt-get install qt3-dev-tools libqt3-mt-dev</​code>​
 +C Ubuntu 12.10:
 +<​code>​sudo apt-get install libqt4-dev</​code></​note>​
 +
 ===== Шаг 3. Применение патчей ===== ===== Шаг 3. Применение патчей =====
-<​note>​Данный шаг не является обязательным</​note>​+<​note>​Данный шаг не является обязательным.  
 + 
 +Официальные патчи уже наложены на исходники,​ если ядро получалось описанной выше командой:​ <​code>​apt-get source linux-image-`uname -r`</​code>​</​note>​ 
 Если вы никогда до этого не применяли патчей к исходному коду, то выполните следующую команду:​ Если вы никогда до этого не применяли патчей к исходному коду, то выполните следующую команду:​
 <​code>​sudo apt-get install patch</​code>​ <​code>​sudo apt-get install patch</​code>​
Строка 50: Строка 77:
 <​code>​patch -p1 -i patch-2.6.x.y</​code>​ <​code>​patch -p1 -i patch-2.6.x.y</​code>​
 где 2.6.x.y - версия патча ядра. Если не было никаких ошибок,​ значит к исходному коду был успешно применён патч. где 2.6.x.y - версия патча ядра. Если не было никаких ошибок,​ значит к исходному коду был успешно применён патч.
 +
 +<note warning>​**Внимание!** Перед тем, как применять патч, проведите следующие действия:​
 +1. Скачайте с [[http://​www.kernel.org]] патч той же версии,​ что и ваших исходников.
 +2. Выполните следующую команду:​
 +<​code>​patch -p1 -R <​patch-2.6.x.y</​code>​
 +где 2.6.x.y - версия патча и ваших исходников</​note>​
  
 ===== Шаг 4. Конфигурация будущей сборки ядра ===== ===== Шаг 4. Конфигурация будущей сборки ядра =====
Строка 57: Строка 90:
  
 На данный момент вы уже должны были определиться с методом конфигурации ядра (если нет, то ознакомьтесь с ними в разделе "​Получение необходимых для сборки пакетов"​. В зависимости от этого, выполните следующую команду для запуска выбранного вами способа конфигурации:​ На данный момент вы уже должны были определиться с методом конфигурации ядра (если нет, то ознакомьтесь с ними в разделе "​Получение необходимых для сборки пакетов"​. В зависимости от этого, выполните следующую команду для запуска выбранного вами способа конфигурации:​
-  * **config** <​code>​make config</​code>​ +  *  **config** ​- традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному,​ предлагая вам установить для каждого из них свое значение. Вызывается командой ​<​code>​make config</​code>​ 
-  * **oldconfig** <​code>​make oldconfig</​code>​ +  * **oldconfig** ​- файл конфигурации создаётся автоматически,​ основываясь на текущей конфигурации ядра. Рекомендуется для начинающих. Вызывается командой ​<​code>​make oldconfig</​code>​ 
-  * **defconfig** <​code>​make defconfig</​code>​ +  * **defconfig** ​- файл конфигурации создаётся автоматически,​ основываясь на значениях по-умолчанию для данной конкретной архитектуры. Вызывается командой ​<​code>​make defconfig</​code>​ 
-  * **menuconfig** <​code>​make menuconfig</​code>​ +  * **menuconfig** ​- псевдографический интерфейс ручной конфигурации,​ не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале. Вызов: ​<​code>​make menuconfig</​code>​ 
-  * **gconfig** <​code>​make gconfig</​code>​ +  * **gconfig** ​и **xconfig** - графические конфигураторы для ручной настройки. Вызов: ​<​code>​make gconfig</​code> ​и <​code>​make xconfig</​code> ​соответственно 
-  * **xconfig** ​<​code>​make xconfig</​code>​ +  * **localmodconfig** ​и **localyesconfig** - автоматические конфигураторы. Конфиг создается на основе вызванных в данных момент модулей и запущенного ядра. Разница между этими двумя конфигураторами в количестве модулей. В первом случае их будет не менее 50% ядра, а во-втором не больше 2 модулей. Вызов: ​<​code>​make localmodconfig</​code> ​и <​code>​make localyesconfig</​code>​ соответственно 
-  * **localmodconfig** <​code>​make localmodconfig</​code>​ +После вызова соответствующая программа конфигурации будет запущена. Произведите необходимые настройки в соответствии с вашими потребностями,​ сохраните файл конфигурации и переходите ​к следующему шагу.
-  * **localyesconfig** ​<​code>​make localyesconfig</​code>​ +
-После успешной сборки ​соответствующая программа конфигурации будет запущена. Произведите необходимые настройки в соответствии с вашими потребностями,​ сохраните файл конфигурации и выйдите ​из программы.+
 ===== Шаг 5. Сборка ядра ===== ===== Шаг 5. Сборка ядра =====
 Итак, приготовления завершены. Теперь можно запустить процесс сборки ядра. Чтобы это сделать,​ выполните команду:​ Итак, приготовления завершены. Теперь можно запустить процесс сборки ядра. Чтобы это сделать,​ выполните команду:​
-<​code>​fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers</​code>​ +<​code>​fakeroot make-kpkg ​-j 5 --initrd --append-to-version=-custom kernel_image kernel_headers ​#-j <​количество ядер процессора>​+1</​code>​ 
-<note important>​Сборка ядра может занимать от 20 минут до нескольких часов в зависимости от конфигурации ядра и технических параметров компьютера.</​note>​ +<note important>​Сборка ядра может занимать от 20 минут до нескольких часов в зависимости от конфигурации ядра и технических параметров компьютера. ​Сборка при многодерном процессоре может быть в несколько раз быстрее</​note>​
 ===== Шаг 6. Установка образов и заголовков ядра ===== ===== Шаг 6. Установка образов и заголовков ядра =====
 Когда сборка ядра подошла к концу, в вашей домашней папке появятся два deb-пакета. Их и необходимо установить. Для этого выполните команды:​ Когда сборка ядра подошла к концу, в вашей домашней папке появятся два deb-пакета. Их и необходимо установить. Для этого выполните команды:​
Строка 82: Строка 112:
  
 ===== Шаг 7. Генерация начального RAM-диска ===== ===== Шаг 7. Генерация начального RAM-диска =====
 +<​note>​Внимание! Если вы во время сборки ядра добавили ключ --initrd, этот шаг можно пропустить.</​note>​
 Для корректной работы Ubuntu требует наличия образа начального RAM-диска. Чтобы его создать,​ выполните команду:​ Для корректной работы Ubuntu требует наличия образа начального RAM-диска. Чтобы его создать,​ выполните команду:​
 <​code>​sudo update-initramfs -c -k 2.6.x.y-custom</​code>​ <​code>​sudo update-initramfs -c -k 2.6.x.y-custom</​code>​
 где 2.6.x.y - версия собранного ядра. где 2.6.x.y - версия собранного ядра.
-<​note>​Внимание! Если вы во время сборки ядра добавили ключ --initrd, этот шаг можно пропустить.</​note>​+
 ===== Шаг 8. Обновление конфигурации загрузчика GRUB ===== ===== Шаг 8. Обновление конфигурации загрузчика GRUB =====
 Для того, чтобы новая версия ядра была доступна для выбора при загрузке компьютера,​ выполните следующую команду:​ Для того, чтобы новая версия ядра была доступна для выбора при загрузке компьютера,​ выполните следующую команду:​
Строка 102: Строка 133:
  
 ** На этом процесс сборки и установки завершён,​ поздравляю!** ** На этом процесс сборки и установки завершён,​ поздравляю!**
 +
 +===== Ссылки =====
 +  * https://​help.ubuntu.com/​community/​Kernel/​Compile
 +  * https://​wiki.ubuntu.com/​Kernel/​BuildYourOwnKernel
 +  * https://​wiki.ubuntu.com/​Kernel/​Dev/​KernelGitGuide
  
 ===== ToDo ===== ===== ToDo =====
 +  * Исправить дублирование списка команд ''​make config''​ в двух разделах этой справки (перенести из "​Шаг 2: пакеты для компиляции"​ в "​Шаг 4: конфигурация"​)
   * Написать инструкцию по использованию каждого из интерфейсов конфигурирования (со скриншотами)   * Написать инструкцию по использованию каждого из интерфейсов конфигурирования (со скриншотами)
   * Заснять скринкаст по теме (в рамках проекта [[http://​team.ubuntu.ru/​projects/​videoguide|"​Видеокурс Ubuntu"​]])   * Заснять скринкаст по теме (в рамках проекта [[http://​team.ubuntu.ru/​projects/​videoguide|"​Видеокурс Ubuntu"​]])