Конфигурирование и компиляция ядра linux

Введение

Gentoo предоставляет два способа настройки конфигурационного файла, установки и обновления ядра: автоматический (genkernel) и вручную. Несмотря на то, что автоматический метод может показаться простым для большинства пользователей, существует ряд причин, по которым достаточно большой процент пользователей выбирает настройку ядра вручную:

  1. Большая свобода
  2. Меньший размер ядра
  3. Быстрая компиляция
  4. Удовольствие от обучения
  5. Всепоглащающая скука
  6. Абсолютные знания об устройстве ядра и/или
  7. Тотальный контроль

В этом руководстве не охватывается автоматический способ конфигурации ядра (genkernel). Если для компиляции и установки ядра предпочтительней использовать genkernel, следует обратиться к документации Genkernel.

Данное руководство не стремится задокументировать процесс конфигурации вручную от начала до конца, поскольку он опирается на определенную долю здравого смысла и относительно высокий уровень знаний о системе. Вместо этого, руководство раскрывает основные представления о конфигурации ядра вручную и достаточно подробное описание наиболее распространенных подводных камней, с которыми сталкиваются пользователи.

ЗаметкаДанный документ написан с рассчётом на достаточно современные версии ядер и использование наиболее распространённых архитектур. Некоторые вещи разнятся на старых версиях ядра или более экзотичных архитектурах, но львиная доля приведённой ниже информации всё же будет применима.

На данный момент предполагается, что исходный код ядра Linux распакован на жёсткий диск (как правило в /usr/src), а читатель обладает навыками работы с menuconfig и системой меню на базе ncursers. В случае, если данный уровень не достигнут, то, прежде чем продолжить, следует ознакомиться со следующими статьями:

Установка символьной ссылки

Символьная ссылка /usr/src/linux всегда должна указывать на исходный код используемого в настоящий момент ядра. Это может быть сделано одним из трех способов:

1. Установите исходный код ядра с включенным USE-флагом. Это заставит /usr/src/linux указывать на исходный код свежеустановленного ядра. Если необходимо, символьная ссылка может быть изменена позже двумя следующими методами:

2. Настройка символьной ссылки с помощью eselect утилиты:

Available kernel symlink targets:
 linux-3.3.8-gentoo
 linux-3.4.9-gentoo

Эта команда выводит доступные исходные коды ядра. Звездочкой отмечен выбранный исходный код. Для того чтобы изменить исходный код ядра, например выбрать второй пункт, сделайте следующее:

3. Установка символьной ссылки вручную:

lrwxrwxrwx 1 root root 11 Aug 29 22:10 /usr/src/linux -> /usr/src/linux-3.4.9-gentoo

Популярные дистрибутивы Linux

Дистрибутив Linux – это определение операционной системы, которая использует ядро Linux и которую можно установить на машину пользователя. В дистрибутивах обычно содержатся не только ядро и сама операционная система, но и полезные приложения: редакторы, проигрыватели, инструменты для работы с базами данных и другое программное обеспечение.

То есть, как уже было сказано в начале статьи, дистрибутив Linux – это операционная система, состоящая из ядра Linux и утилит, которые разрабатываются в рамках GNU.

Количество существующих дистрибутивов Linux превышает 600 штук, более 300 из которых постоянно дорабатываются и обновляются.

Ubuntu

Ubuntu– один из самых распространенных дистрибутивов, легко устанавливается и интуитивно понятен в работе. Отлично подходит для персональных компьютеров, ноутбуков и серверов. Разрабатывается и спонсируется компанией Canonical Ltd, но имеет активную поддержку и со стороны свободного сообщества. Самая популярная операционная система для веб-серверов.

Debian

Debian– еще один популярный дистрибутив GNU/Linux, который оказал существенное влияние на развитие всех GNU/Linux-операционных систем в целом. Основные черты Debian: широкие возможности, наличие множества репозиториев, высокое качество версий. Это самый стабильный дистрибутив из всех существующих.

Linux Mint

Linux Mint– дистрибутив, основанный на Ubuntu и Debian. Linux Mint обладает красивым и удобным дизайном и подойдет даже начинающим пользователям. Поэтому его часто устанавливают на домашние компьютеры для того, чтобы иметь простую и удобную систему. Дистрибутив имеет поддержку различных мультимедийных форматов, в том числе включает проприетарные программы (Adobe Flash), поэтому хорошо подходит для работы с мультимедиа.

Manjaro

Manjaro– дистрибутив, основанный на Arch Linux. Благодаря большому количеству предустановленных программ (например, для офисной работы) он достаточно дружественен к новичкам, но в то же время может быть тонко настроен.

Arch

Arch– мощный дистрибутив, базирующийся на принципах простоты, современности, прагматизма, гибкости и идеи, что в центре внимания должен быть пользователь. Однако принцип простоты распространяется не на использование системы, а на ее внутреннюю организацию (принципы KISS и Unix-way). Поэтому Arch рассчитан на опытных пользователей, которые самостоятельно настроят и установят необходимые им утилиты.

Компиляция независимых модулей ядра

Когда ядро ​​скомпилировано, мы можем выбрать модуль ядра для компиляции через меню ядра. Но если ядро ​​было скомпилировано и новое оборудование сгенерировано в это время, но в меню ядра нет драйвера для этого нового оборудования, как скомпилировать соответствующий модуль ядра, даже если драйвер существует в меню ядра, нужно ли перекомпилировать ядро? Это необходимо решить путем компиляции независимых модулей ядра.

Проще говоря, независимая компиляция модуля ядра состоит в том, чтобы скомпилировать модуль ядра отдельно и добавить модуль ядра в менеджер ядра. Так что ядро ​​может использовать только что добавленный модуль ядра без перекомпиляции

Подводя итог, компиляция независимого модуля ядра в основном делится на эти шаги

1. Сделай чистым

2. Скомпилировать модули ядра, сделать модули

3. Установите модуль ядра make install

4. Построить зависимости depmod –a

Примечание. Вышесказанное предназначено только для компиляции и установки модуля ядра, но модуль ядра не был загружен в ядро, поэтому для загрузки модуля ядра необходимо использовать insmod.

Linux в Windows

Корпорация Microsoft сообщила о разработке собственной модификации полноценного ядра Linux, который она интегрирует в состав ОС Windows 10. За все время существования OC семейства Windows это первый подобный случай – Microsoft создала прецедент, о чем сообщила в своем официальном блоге.

Сама Windows 10 по-прежнему будет базироваться на собственном ядре, тогда как ядро Linux станет частью WSL 2.0 – подсистемы Windows Subsystem for Linux второго поколения. Точные сроки интеграции Linux Kernel в Windows 10 софтверный гигант не раскрывает, но в тестовых сборках оконной ОС, доступных для участников программы Windows Insider, его появление ожидается уже в июне 2019 г.

Настройка загрузчика Grub

Нам осталось только настроить загрузчик Grub, чтобы после перезагрузки система грузилась уже с нашим новым ядром. В место редактирования файла /boot/grub/menu.lst руками мы с делаем это с помощью центра управления YaST2:

$ /sbin/yast2

Если у вас помимо openSuSE и Windows установлена еще пара-тройка операционных систем, то лучше всё же править конфигурационный файл напрямую из текстового редактора. Возможно openSUSE некорректно определило другие дистрибутивы Linux.

  • Выберите из списка: «Cистема -> Загрузчик«
  • Перед вами появится текущий список выбора загрузчика Grub, нажмите «Добавить» для создания новой записи
  • На следующем экране выберите: «Клонировать выбранную секцию«, чтобы сделать копию рабочей загрузочной записи Grub и нажмите «Далее«
  • Теперь введите имя для вашего ядра, например, openSUSE-12.2 — 3.4.6 и нажмите «Образ ядра -> Обзор«
  • Вы увидите список файлов директории /boot, в которой и находится ваше ядро. Выберите ваше недавно созданное ядро, обычно его название начинается с vmlinuz.
  • Далее точно так же выбираем «Начальный RAM-диск«. Это файл с названием initrd-версия.вашего.ядра
  • Нажимаем «ОК» и возвращаемся в главное меню.
  • Если все сделано правильно, вы увидите новую запись для вашего ядра. Кнопками «Вверх» и «Вниз» переместите эту запись на необходимую вам позицию и нажмите «Установить по умолчанию«
  • Далее «OK«.

Все, настройка закончена! Для верности вы можете открыть файл /boot/grub/menu.lst в текстовом редакторе (именно его мы редактировали с помощью Yast) и проверить наличие новой секции с нашим ядром в ней. Сделать это можно, набрав:

$ vim /boot/grub/menu.lst

Заодно проверьте, правильно ли вы написали название ядра и RAM-диска. Сравните с тем, что показывает:

$ ls -l /boot

Осталось перегрузить систему:

# /sbin/shutdown -r now 

Если вы всё сделали правильно, система загрузится с новым ядом. Проверить это можно, набрав

$ uname -r

В ответ вы увидите что-то вроде этого:

3.4.6-2.10-default

Если система не загрузилась, перезапустите её, и в меню Grub выберите ваше предыдущее рабочее ядро. Вы сможете загрузить систему и исправить ошибки, или пересобрать ядро, но при этом не забудьте удалить неработающую загрузочную запись из /boot/grub/menu.lst.

Что такое Linux?

Linux — это семейство Unix-подобных операционных систем, использующих ядро Linux, которое разработал финно-американский программист Линус Торвальдс

ОС, использующие ядро Linux, называются дистрибутивами Linux, и они являются такими же операционными системами как Microsoft Windows или Apple macOS, но с одной очень важной особенностью, а именно — их исходные коды являются открытыми, так как они распространяются под лицензией GNU GPL, которая подразумевает создание свободного и открытого программного обеспечения (open source software). Это означает, что у любого пользователя есть право изучать и изменять исходный код

Примечание: Стоит отметить, что есть также и платные дистрибутивы Linux, например, , Astra Linux Special Edition и др.

Официальным талисманом Linux с 1996 года является пингвин Tux (сокр. от «Torvalds UniX«). Идею использовать пингвина в качестве талисмана Linux выдвинул создатель этого ядра Линус Торвальдс.

Пингвин Tux — талисман Linux

1.2.1. Прежде, чем продолжить

Прежде, чем мы приступим к программированию, необходимо
обсудить еще ряд моментов. Любая система имеет свои
отличительные черты и каждый из нас имеет разный багаж
знаний. Написать, скомпилировать и запустить свою первую
программу «Hello World!» для многих может оказаться
довольно сложной задачей. Однако, после преодоления этого
начального препятствия, работа, как правило, продвигается без
особых проблем.

1.2.1.1.
Механизм контроля версий

Модули, скомпилированные с одним ядром, могут не
загружаться другим ядром, если в ядре включен механизм
проверки версий модулей. В большинстве дистрибутивов ядро
собирается с такой поддержкой. Мы не собираемся обсуждать
проблему контроля версий в этой книге, поэтому нам остается
порекомендовать, в случае возникновения проблем,
пересобрать ядро без поддержки механизма контроля
версий.

1.2.1.2. Работа в
XWindow

Мы настоятельно рекомендуем скачать и опробовать все
примеры, обсуждаемые в книге. Кроме того, мы настаиваем на
том, чтобы всю работу, связанную с редактированием исходных
текстов, компиляцией и запуском модулей, вы выполняли из
текстовой консоли. Поверьте нашему опыту, XWindow не
подходит для выполнения подобных задач.

Модули не могут использовать функцию printf() для вывода не экран, но они
могут регистрировать сообщения об ошибках, которые в
конечном итоге попадают на экран, но только в текстовой
консоли. Если же модуль загружается из окна терминала,
например xterm, то эти сообщения
будут попадать только в системный журнал и не будут
выводиться на экран. Чтобы видеть выводимые сообщения на
экране, работайте в текстовой консоли (от
переводчика: при опробовании примеров из книги мне
не удалось вывести ни одного сообщения на экран, так что
ищите ваши сообщения в системном журнале, в моем случае это
был файл /var/log/kern.log).

История разработки

Корни Linux уходят в два других проекта: Unix и Multics, которые ставили своей целью разработать многопользовательскую операционную систему.

Что такое Unix?

Unix – это собрание кроссплатформенных многопользовательских и многозадачных операционных систем.

Можно сразу сказать, что в данный момент Unix-системы являются одними из самых важных операционных систем. Влияние Unix распространилось и на языки программирования: язык C был разработан во время разработки Unix-систем.

Разработкой Unix занималась корпорация Bell Laboratories – в 1969 году они показали первую систему Unix. Чем дальше, тем большую популярность обретали системы Unix – в 70-х их начали устанавливать на компьютеры в учебных заведениях.

При создании Unix разработчики поставили перед собой три основные задачи:

  1. Использование минимального количества функций, сохранение простоты.
  2. Общность: одинаковые методы и механизмы в разных случаях.
  3. Комбинирование программ для решения задач, а не разработка новых программ с нуля.

Что касается отличительных особенностей Unix, то это:

  1. Практически постоянное использование командной строки.
  2. Использование конвейнеров.
  3. Настройка системы через использование простых (зачастую текстовых) файлов.

Unix имеет свою собственную философию. Программист Дуглас Макилрой, который разработал конвейнер в Linux, определил следующие правила:

Одна из проблем, коснувшаяся Unix, – наличие разных версий и множества программ, которые писали разработчики под свои нужды. Из-за низкой совместимости программы, работающие с одной версией Unix, могли не работать на машинах с другими версиями. В итоге было решено создать общий документ со стандартами, которым должны следовать разработчики.

В 1983 году было объявлено о создании GNU (GNU’s Not UNIX), Unix-подобной операционной системы. Произошло это под влиянием идеи основателя проекта Ричарда Столманна о необходимости создания свободно распространяемой операционной системы и программного обеспечения с открытым исходным кодом.

Ричард Столманн также основал движение свободного программного обеспечения и сформулирован четыре права, которыми должен обладать пользователь: он может запускать программу для любых целей, он может изучать программы и изменять их согласно своим потребностям, он может распространять программу, чтобы помочь другим, и он может публиковать улучшения программы, чтобы помочь сообществу в целом. Все это говорило о том, что исходный код программы должен быть доступен всем.

Именно эта мысль вдохновила Линуса Торвальдса, создателя Linux, начать в 1991 году работу над своей операционной системой. Linux, как и GNU, это Unix-подобная система, то есть система, появившаяся под влиянием Unix.

В дальнейшем именно система GNU/Linux станет той системой, которую сейчас называют просто Linux.

Что такое Multics?

Multics – Multiplexed Information and Computing Service («Мультиплексная информационная и вычислительная служба») – это одна из самых первых операционных систем, в которой была реализована плоская модель хранения данных и четко разделена концепция файлов (сегментов). Создание Multics началось в 1964 году. Над системой работали разработчики компании Bell Laboratories – через несколько лет часть разработчиков начнет работу над созданием Unix.

Multics разрабатывали для того, чтобы, во-первых, дать возможность использовать ресурсы ЭВМ большому количеству пользователей одновременно, во-вторых, дать пользователям возможность совместно использовать данные, в-третьих, обеспечить хорошую скорость работы с данными.

Однако главные вычислительные задачи не были достигнуты при выпуске первой версии системы, и компания Bell Laboratories перевела свой интерес на другой проект, в результате которого на свет появился Unix.

1.2 Загрузка: Обзор

Процесс загрузки во многом зависит от аппаратной платформы,
поэтому основное внимание будет уделено платформе IBM PC/IA32. Для
сохранения обратной совместимости, firmware-загрузчики загружают
операционную систему устаревшим способом

Процесс этот можно
разделить на несколько этапов:

  1. BIOS выбирает загрузочное устройство.
  2. BIOS загружает bootsector с загрузочного устройства.
  3. Код bootsector-а загружает установщика, процедуры
    декомпрессии и сжатый образ ядра.
  4. Ядро декомпрессируется в защищенном режиме (protected
    mode).
  5. Выполняется низкоуровневый инициализирующий ассемблерный
    код.
  6. Выполняется высокоуровневый инициализирующий C код.

Подготовка

Для подготовки ядра не требуется ни root-аккаунт, ни root-привилегии (например, через sudo).

Рекомендуется создать отдельный каталог для сборки вашего ядра. В этом примере будет использоваться каталог в домашнем каталоге:

$ mkdir ~/kernelbuild

Загрузка исходников

Важно: Для systemd необходимо ядро не старше версии 3.12 (4.2 и выше, если требуется поддержка единой иерархии контрольных групп. Подробнее см

.

Например, так выглядит загрузка ядра версии 4.8.6 в каталог утилитой :

$ cd ~/kernelbuild
$ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.8.6.tar.xz

Также стоит проверить корректность загрузки. Скачайте файл подписи, с его помощью добудьте отпечаток (fingerprint) ключа, а с помощью отпечатка получите сам ключ:

$ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.8.6.tar.sign
$ gpg --list-packets linux-4.8.6.tar.sign
$ gpg --recv-keys <отпечаток_из_предыдущего_шага>

Обратите внимание, что подпись создаётся для tar-архива (суффикс ), а не для сжатого файла , который был загружен. Необходимо выполнить декомпрессию, но без извлечения архива

Для этого потребуется :

$ unxz linux-4.8.6.tar.xz
$ gpg --verify linux-4.8.6.tar.sign linux-4.8.6.tar

К последующим шагам нельзя переходить, если вы не получили вывод в виде «Good signature».

Если запускался не из каталога сборки, переместите в него скачанный архив:

$ mv /путь/к/linux-4.8.6.tar.xz ~/kernelbuild/

Распаковка исходников

Распакуйте архив ядра в каталоге сборки:

$ tar -xvf linux-4.8.6.tar

Для завершения приготовлений убедитесь, что дерево файлов ядра абсолютно чистое; не стоит полагаться на то, что что оно будет таковым после распаковки. Перейдите в новый каталог с исходниками и выполните команду :

$ cd linux-4.8.6/
$ make mrproper

3.6.1. Старший и младший номер устройства

Давайте взглянем на некоторые файлы устройств. Ниже
перечислены те из них, которые представляют первые три
раздела на первичном жестком диске:

# ls -l /dev/hda
brw-rw----  1 root  disk  3, 1 Jul  5  2000 /dev/hda1
brw-rw----  1 root  disk  3, 2 Jul  5  2000 /dev/hda2
brw-rw----  1 root  disk  3, 3 Jul  5  2000 /dev/hda3
      

Обратили внимание на столбец с числами, разделенными
запятой? Первое число называют «Старшим номером»
устройства. Второе — «Младшим номером»

Старший
номер говорит о том, какой драйвер используется для
обслуживания аппаратного обеспечения. Каждый драйвер имеет
свой уникальный старший номер. Все файлы устройств с
одинаковым старшим номером управляются одним и тем же
драйвером. Все из выше перечисленных файлов устройств имеют
старший номер, равный 3, потому что все они управляются одним
и тем же драйвером.

Младший номер используется драйвером, для различения
аппаратных средств, которыми он управляет. Возвращаясь к
примеру выше, заметим, что хотя все три устройства
обслуживаются одним и тем же драйвером, тем не менее каждое
из них имеет уникальный младший номер, поэтому драйвер
«видит» их как различные аппаратные устройства.

Устройства подразделяются на две большие группы —
блочные и символьные.
Основное различие блочных и символьных устройств состоит в
том, что обмен данными с блочным устройством производится
порциями байт — блоками. Они имеют внутренний буфер,
благодаря чему повышается скорость обмена. В большинстве
Unix-систем размер одного блока равен 1 килобайту или другому
числу, являющемуся степенью числа 2. Символьные же устройства
— это лишь каналы передачи информации, по которым данные
следуют последовательно, байт за байтом. Большинство
устройств относятся к классу символьных, поскольку они не
ограничены размером блока и не нуждаются в буферизации. Если
первый символ в списке, полученном командой ls-l /dev, ‘b’, тогда это блочное
устройство, если ‘c’, тогда — символьное.
Устройства, которые были приведены в примере выше — блочные.
Ниже приводится список некоторых символьных устройств
(последовательные порты):

crw-rw----  1 root  dial 4, 64 Feb 18 23:34 /dev/ttyS0
crw-r-----  1 root  dial 4, 65 Nov 17 10:26 /dev/ttyS1
crw-rw----  1 root  dial 4, 66 Jul  5  2000 /dev/ttyS2
crw-rw----  1 root  dial 4, 67 Jul  5  2000 /dev/ttyS3
      

Если вам интересно узнать, как назначаются старшие номера
устройств, загляните в файл /usr/src/linux/documentation/devices.txt.

Все файлы устройств создаются в процессе установки системы
с помощью утилиты mknod.
Чтобы создать новое устройство, например с именем
«coffee», со старшим номером 12 и младшим номером
2, нужно выполнить команду mknod
/dev/coffee c 12 2. Вас никто не обязывает размещать
файлы устройств в каталоге /dev,
тем не менее, делается это в соответствии с принятыми
соглашениями. Однако, при разработке драйвера устройства, на
период отладки, размещать файл устройства в своем домашнем
каталоге — наверное не такая уж и плохая идея. Единственное
— не забудьте исправить место для размещения файла
устройства после того, как отладка будет закончена.

Еще несколько замечаний, которые явно не касаются
обсуждаемой темы, но которые мне хотелось бы сделать. Когда
происходит обращение к файлу устройства, ядро использует
старший номер файла, для определения драйвера, который должен
обработать это обращение. Это означает, что ядро в
действительности не использует и даже ничего не знает о
младшем номере. Единственный, кто обеспокоен этим — это сам
драйвер. Он использует младший номер, чтобы отличить разные
физические устройства.

Между прочим, когда я говорю «устройства», я
подразумеваю нечто более абстрактное чем, скажем, PCI плата,
которую вы можете подержать в руке. Взгляните на эти два
файла устройств:

% ls -l /dev/fd0 /dev/fd0u1680
brwxrwxrwx   1 root  floppy   2,  0 Jul  5  2000 /dev/fd0
brw-rw----   1 root  floppy   2, 44 Jul  5  2000 /dev/fd0u1680
      

1.3 Загрузка: BIOS POST

  1. При включении питания запускается тактовый генератор и схема
    контроля питания устанавливает на шине сигнал #POWERGOOD.
  2. На вывод CPU #RESET подается сигнал (после чего CPU переходит
    в реальный режим 8086).
  3. %ds=%es=%fs=%gs=%ss=0, %cs=0xFFFF0000,%eip = 0x0000FFF0
    (запуск кода Power On Self Test в ROM BIOS).
  4. На время выполнения проверок, прерывания запрещены.
  5. По адресу 0 инициализируется таблица векторов прерываний
    (IVT, Interrupts Vector Table).
  6. По прерыванию 0x19 вызывается начальный
    (bootstrap) загрузчик BIOS, регистр %dl содержит ‘номер
    загрузочного устройства’. В результате по физическому адресу
    0x7C00 (0x07C0:0000) загружается содержимое первого сектора
    нулевой дорожки.

Установка/Обновление ядра Linux

В Linux есть исходное ядро, которое разработал Линус Торвальдс, а затем уже дополняли и дополняют другие разработчики и организации вместе с Линусом Торвальдсом. Расположено исходное ядро на сайте kernel.org.

Все дистрибутивы Linux (Debian, Ubuntu, Manjaro, CentOS и др.), которые начали появляться после публикации исходного ядра, стали вносить свои изменения и дополнения, формируя, таким образом, свой вариант исходного ядра Linux. Все Linux-дистрибутивы имеют в своей основе исходное ядро из kernel.org, но уже с внесенными в него соответствующими правками.

Примечание: Ядра разных дистрибутивов не являются взаимозаменяемыми. Теоретически, можно «подкинуть», например, ядро из Debian в Ubuntu. И система даже заработает (ведь Ubuntu произошла от Debian), но в 99% случаев начнут появляться разные глюки и баги.

Соответственно, из этого можно сделать следующие выводы:

   Если вы хотите установить «чистое», оригинальное ядро Linux, то вам нужно скачать его с kernel.org, затем сконфигурировать на свое усмотрение и наслаждаться.

   Если вам нужно ядро Linux с правками под какой-то конкретный дистрибутив (например, Debian или Manjaro), то вам нужно скачать ядро из репозитория конкретного дистрибутива с помощью менеджера пакетов.

Зачем тогда нужен kernel.org? Дело в том, что сначала свежая версия исходного ядра появляется на kernel.org, а затем уже «расходится» по репозиториям остальных дистрибутивов.

Есть 2 способа установки/обновления ядра Linux:

   Обновление ядра Linux через менеджер пакетов.

На этом уроке мы рассмотрим обновление ядра Linux через менеджер пакетов, а на следующем — самостоятельную установку и конфигурирование ядра Linux.

Обновление ядра Linux через менеджер пакетов

Обычно, вместе с обновлением системы происходит и обновление ядра. Но если вы по каким-либо причинам хотите произвести установку/обновление непосредственно только ядра Linux, то ниже мы рассмотрим данный процесс для нескольких дистрибутивов Linux.

Linux Mint (Debian/Ubuntu)

Для начала сверим текущую установленную версию ядра:

Далее выполним поиск доступных для установки ядер (сгенерированный список может быть очень длинным, поэтому, чтобы хоть как-то ограничить вывод и сделать его постраничным, применим фильтр ):

Мой выбор пал на ядро linux-image-4.15.0-1004-oem. Чтобы его установить, нужно выполнить команду:

Останется только перезагрузить систему и убедиться, что новое ядро успешно установилось:

Manjaro (Arch Linux)

В Manjaro используется свой менеджер пакетов — pacman, поэтому его команды будут немного отличаться от команд в других дистрибутивах. Чтобы вывести список доступных для установки ядер, необходимо выполнить:

В рамке обведен список ядер, которые мы можем установить. Я выбрал пункт №5 (linux510), нажав соответствующую кнопку на цифровой клавиатуре. После этого запустился процесс скачивания необходимых пакетов. Когда всё будет готово, перезагружаем систему и радуемся новому ядру:

Установка нового ядра

После окончания сборки ядра, его необходимо установить. Перед установкой, необходимо выполнить для установки модулей ядра в новый подкаталог /lib/modules. После установки модулей, необходимо выполнить для установки нового ядра и стартового RAM-диска (initial RAM disk) в каталог /boot и обновления конфигурации загрузчика.

Хочу обратить внимание, что в процессе сборки автоматически создается необходимый стартовый RAM-диск (initial RAM disk или initrd). Если у вас возникнет необходимость создать его вручную, это можно сделать при помощи команды

После выполнения должен обновиться конфигурационный файл загрузчика. Но у меня он почему-то  обновился после команды.

На этом и закончу. Очень большая статья получилась. В ближайшем будущем постараюсь ее ужать.

Что еще почитать?

1. Gentoo Handbook: http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?full=1#book_part1_chap7
2. Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0: http://linux4u.jinr.ru/docs/add04/kernel-2.6-install-2.0.html
3. The Linux Kernel Module Programming Guide (Программирование ядра Linux): http://linux4u.jinr.ru/docs/add04/lkmpg.html
4. Linux From Scratch: http://linux4u.jinr.ru/docs/add04/LFS-BOOK-5.0-HTML/

Устранение проблем

Изменения конфигурации не вступают в силу

Среди пользователей весьма распространенной ошибкой является то, что они делают изменения в конфигурации, но затем совершают небольшую ошибку в процессе загрузки в только что настроенное ядро. Они перезагружаются в образ ядра, не являющийся тем, который они только что сконфигурировали, замечают, что проблема, которую они пытались решить, все еще присутствует и приходят к выводу что изменения конфигурации не решили проблему.

Процесс компиляции и установки ядер находится за рамками этого документа; обратитесь к руководству по обновлению ядра за общими инструкциями. Вкратце, процесс получения изменённого ядра заключается в следующем:

  1. конфигурация
  2. компиляция
  3. монтирование раздела /boot (если он ещё не примонтирован)
  4. копирование нового образа ядра в /boot
  5. убедитесь, что загрузчик ссылается на новое ядро
  6. перезагрузка.

Если какой-нибудь из финальных шагов пропущен, изменения не вступят в силу.

Можно проверить соответствует ли загруженное ядро с недавно скомпилированным ядром. Это можно сделать, изучив дату и время компиляции ядер. Предполагая, что используется архитектура x86 и исходный текст ядра установлены в /usr/src/linux, можно использовать следующую команду:

#4 SMP PREEMPT Sat Jul 15 08:49:26 BST 2006

Приведенная выше команда отобразит дату и время компиляции ядра, загруженного в настоящий момент.

-rw-r--r-- 1 dsd users 1504118 Jul 15 08:49 /usr/src/linux/arch/i386/boot/bzImage

Приведенная выше команда отображает дату и время когда образ ядра был скомпилирован в последний раз.

Если временные отметки из предыдущих команд отличаются более чем на 2 минуты, это означает что в процессе переустановки ядра была сделана ошибка и система загружена не с новым образом ядра.

Модули не загружаются автоматически

Как указано в этом документе ранее, система конфигурации ядра скрывает под собой большие изменения в поведении при выборе компонента ядра в качестве модуля , вместо встроенного

Важно повторить это снова, так как много пользователей попадают в эту ловушку.. При встраивании компонента в ядро, код встраивается в образ ядра (bzImage)

Когда ядру требуется использовать этот компонент, оно может инициализировать и загрузить его автоматически, без вмешательства пользователя

При встраивании компонента в ядро, код встраивается в образ ядра (bzImage). Когда ядру требуется использовать этот компонент, оно может инициализировать и загрузить его автоматически, без вмешательства пользователя.

При выборе компонента в качестве модуля, код встраивается в файл модуля ядра и устанавливается на файловую систему. В основном, когда ядру требуется использовать этот компонент, оно не может найти его. За некоторыми исключениями, ядро не совершает попыток загрузки этих модулей — эта задача оставлено пользователю.

Если поддержка сетевой платы включена в качестве модуля, и затем обнаруживается что сеть не доступна, это, возможно, потому что модуль не загружен — можно, либо сделать это вручную, либо система должно быть настроена для автоматической загрузки модулей во время запуска системы.

Если нет особых причин сделать по-другому, то можно сохранить время компилируя эти компоненты прямо в образ ядра, так чтобы ядро могло автоматически произвести эти небольшие настройки самостоятельно.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: