arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
185 lines (110 loc) • 13.4 kB
Markdown
Представленная ниже информация будет полезна при сборке пользовательского ядра c **kernel.org**. Данный метод компиляции ядра является традиционным методом, общим для всех дистрибутивов; однако, он отличается от установки ядра при помощи makepkg и pacman.
Вы также можете использовать ABS для сборки и установки своего ядра; смотрите: [Kernel Compilation](/index.php/Kernel_Compilation "Kernel Compilation"). Использование существующего PKGBUILD [из архива](https://www.archlinux.org/packages/?name=linux) позволит автоматизировать большинство процессов и создаст готовый установочный пакет. Хотя некоторые пользователи предпочитают традиционный метод сборки.
Начинающие пользователи, которые не в полной мере знакомы с компиляцией ядра, должны взглянуть на [Compilation without ABS for New Users](/index.php/Kernel_Compilation_without_ABS_for_New_Users "Kernel Compilation without ABS for New Users").
## Contents
* [1 Получение исходников](#.D0.9F.D0.BE.D0.BB.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B8.D1.81.D1.85.D0.BE.D0.B4.D0.BD.D0.B8.D0.BA.D0.BE.D0.B2)
* [2 Конфигурирование](#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5)
* [2.1 Как насчет /usr/src/ ?](#.D0.9A.D0.B0.D0.BA_.D0.BD.D0.B0.D1.81.D1.87.D0.B5.D1.82_.2Fusr.2Fsrc.2F.C2.A0.3F)
* [3 Компиляция и установка](#.D0.9A.D0.BE.D0.BC.D0.BF.D0.B8.D0.BB.D1.8F.D1.86.D0.B8.D1.8F_.D0.B8_.D1.83.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
* [4 Выберите один из вариантов:](#.D0.92.D1.8B.D0.B1.D0.B5.D1.80.D0.B8.D1.82.D0.B5_.D0.BE.D0.B4.D0.B8.D0.BD_.D0.B8.D0.B7_.D0.B2.D0.B0.D1.80.D0.B8.D0.B0.D0.BD.D1.82.D0.BE.D0.B2:)
* [4.1 1\. Традиционный метод](#1._.D0.A2.D1.80.D0.B0.D0.B4.D0.B8.D1.86.D0.B8.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D0.BC.D0.B5.D1.82.D0.BE.D0.B4)
* [4.2 2\. Использование makepkg и pacman (рекомендуется)](#2._.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_makepkg_.D0.B8_pacman_.28.D1.80.D0.B5.D0.BA.D0.BE.D0.BC.D0.B5.D0.BD.D0.B4.D1.83.D0.B5.D1.82.D1.81.D1.8F.29)
* [5 Конфигурация загрузчика](#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D1.87.D0.B8.D0.BA.D0.B0)
* [6 Использование драйвера NVIDIA в ядре](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B4.D1.80.D0.B0.D0.B9.D0.B2.D0.B5.D1.80.D0.B0_NVIDIA_.D0.B2_.D1.8F.D0.B4.D1.80.D0.B5)
## Получение исходников
* Вы можете получить исходники ядра на `ftp.xx.kernel.org/pub/linux/kernel/`, где xx определяет вашу страну (f.e. 'us', 'uk', 'de', ... - Ознакомьтесь [[1](http://www.kernel.org)] с полным списком зеркал). Если у вас нет графического ftp-клиента, воспользуйтесь командой `wget`. В этом примере мы будем скачивать и компилировать ядро версии 2.6.32.8; вам необходимо изменить только версию, чтобы получить новое ядро.
Например:
```
$ wget -c [http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.8.tar.bz2 ]
```
* Хорошей идеей будет проверка подписи полученного ядра. Взгляните на [http://kernel.org/signature.html](http://kernel.org/signature.html), чтобы узнать, как это сделать.
* По существу:
```
$ gpg --import public-key.sign
$ gpg --verify detached-signature.sign kernel.tar.bz2
```
* Скопируйте архив с ядром в вашу рабочую директорию.:
```
$ cp linux-2.6.32.8.tar.bz2 ~/kernelbuild/
```
* Распакуйте архив и войдите в полученную директорию:
```
$ cd ~/kernelbuild
$ tar -xvjf linux-2.6.32.8.tar.bz2
$ cd linux-2.6.32.8
```
Подготовьтесь к компиляции посредством следующей команды:
```
make mrproper
```
Это может понадобиться для очистки каталогов после предыдущих компиляций. Разработчики ядра рекомендуют выполнять эту команду перед каждой компиляцией ядра.
## Конфигурирование
* (Необязательно) Скопируйте файл .config вашего текущего ядра, если хотите модифицировать настройки ядра Arch, заданные по умолчанию.
```
$ zcat /proc/config.gz > .config
```
* Сконфигурируйте ваше ядро.
Традиционный путь:
```
$ make menuconfig (Будет создана новая конфигурация и файл '.config'.)
```
Другие команды, которые могут быть использованы:
```
$ make oldconfig (работает только со старым файлом '.config', копируя его в директорию, где проходит сборка. Также позволяет выбрать опции скачанного вами ядра, которые помечены как 'НОВЫЕ'.)
$ make localmodconfig (пытается извлечь /proc/config.gz из работающего ядра. Допускает предварительный выбор опций/модулей.)
$ make localyesconfig (Same as above, except that as many modules as possible compiled into the kernel.)
$ make xconfig (Требует установки Qt. Приятный интерфейс.)
$ make gconfig (Требует установки GTK. Другая реализация xconfig.)
$ make help (Справочная информация.)
```
*Примечание: более подробная информация о "localmodconfig" указана в [2.6.32 release notes](http://kernelnewbies.org/Linux_2_6_32#head-11f54cdac41ad6150ef817fd68597554d9d05a5f).*
* Внесите изменения в конфигурацию ядра и сохраните конфигурационный файл. Это неплохая идея - делать его копию, поскольку вы можете испробовать несколько вариантов сборки, пока не получите тот, который действительно вас устроит.
* Если вы компилируете ядро, используя текущий конфигурационный файл, не забудьте переименовать версию ядра, иначе вы можете по ошибке заменить существующее.
```
$ make menuconfig
General setup --->
(-ARCH) Local version - append to kernel release '3.n.n-RCn'
```
### Как насчет /usr/src/ ?
Вы можете использоввать директорию /usr/src/ для сборки ядра от пользователя root c предварительным созданием символической ссылки, хотя это считается плохой практикой. Наилучшим вариантом будет просто использовать вашу домашнюю директорию. Если вы согласны с этой точкой зрения, собирайте и конфигурируйте ваше ядро от имени непривилегированного пользователя и лишь устанавливайте от имени суперпользователя root, или при помощи makepkg и pacman (описано ниже).
Хотя эта концепция является предметом дискуссий и некоторые опытные пользователи рассматривают практику компилирования от root в /usr/src/ полностью безопасной, приемлемой и даже предпочтительной.
Используйте тот метод, с которым можете чувствовать себя более уверенно.
## Компиляция и установка
## Выберите один из вариантов:
#### 1\. Традиционный метод
**Осторожно:** Не запускайте `make all`, если вы используете GRUB и всё ещё имеете установленный LILO; в итоге это сконфигурирует LILO и вы можете не суметь загрузить вашу машину! Удалите LILO (pacman -R lilo) перед запуском `make all,если вы используете` GRUB!
* Соберите его:
```
$ make
```
(Или make vmlinux && make modules && make bzImage - смотрите make help для получения подробной информации.)
* Если у вас многоядерный процессор ( Dual Core, Quad Core, etc), вы можете компилировать ядро быстрее, добавив флаг -j . Это сработает на всех процессорах на 100% .
```
$ make -j[# число ядер + 1]
```
**Примечение:** Рекомендуется выставить число на один больше, чем имеется ядер в вашей машине. Например: для двухъядерной машины вы можете выставить значение make -j3\. Двухъядерный процессор с 2.8Ghz компилирует ядро за 10-15 минут.
* Установка модулей: ( предстоит сделать с правами root.)
```
# make modules_install
```
Это скопирует скомпилированные модули в директорию /lib/modules с именем версии ядра. Эти модули будут храниться отдельно от тех, что уже используются другими ядрами в системе.
* Копирование ядра:
```
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-НазваниеВашегоЯдра
```
* Если вам нужны какие-либо модули для того, чтобы смонтировать корневую файловую систему, создайте виртуальный диск (большинству пользователей это нужно). The -k parameter accepts the kernel version and appended string you set in menuconfig and is used to locate the modules in /lib/modules::
```
# mkinitcpio -k ПолноеНазваниеЯдра -g /boot/initramfs-НазваниеВашегоЯдра.img
```
Вы можете назвать ядро при копировании в /boot как вам угодно. Однако, использование схемы [kernel-major-minor-revision] поможет поддержать порядок, если вы имеете несколько ядер/часто используете mkinitcpio/собираете сторонние модули.
Если вы используете LILO и он не может взаимодействовать с kernel device-mapper driver, в первую очередь запустите `modprobe dm-mod`.
#### 2\. Использование makepkg и pacman (рекомендуется)
Смотрите [Kernel Compilation](/index.php/Kernel_Compilation "Kernel Compilation").
## Конфигурация загрузчика
Добавьте строку для загрузки вашего нового ядра в [GRUB](/index.php/GRUB_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "GRUB (Русский)") или [LILO](/index.php/LILO "LILO") как указано в примерах. Заметим, что если у вас установлен LILO, исходные тексты ядра содержат скрипт для автоматизации процесса:
```
$ arch/i386/boot/install.sh
```
При использовании LILO, не забудьте скомандовать `lilo` как root, чтобы обновить его.
## Использование драйвера NVIDIA в ядре
Об использовании драйвера NVIDIA в ядре смотрите: [Installing the driver for a custom kernel](/index.php/NVIDIA "NVIDIA"). Также вы можете установить драйвер nvidia из AUR.