Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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"]]) |