Что такое ядро. Часть 1 : пересборка

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

Где оно?

Само ядро находится в директории /boot и, обычно, имеет имя вроде vmlinuz-linux. Загрузчик во время запуска компьютера загружает его и передает ему управление для загрузки. Но, драйвера всех железяк не вкомпилишь в ядро, иначе оно будет слишком здоровым. Поэтому у linux есть динамически подгружаемые модули ядра, причем, зачастую необходимые модули ядра для загрузки системы тоже динамические. Это значит, что систему так просто не загрузишь: нужно предусмотреть механизм загрузки драйверов жестких дисков, файловых систем и т.д.
Для такого случая в типичном дистре предусмотрен initrd (Initial RAM disk). initrd — это файловая система, где находится минимальный UNIX, достаточный для того, чтобы загрузить модули ядра, необходимые для работы с дисками, файловыми системами, примонтировать раздел жесткого диска с установленной ОС в корень и продолжить процесс загрузки с монтированным разделом. Это — демон инициализации, shell, утилиты командной строки (обычно, busybox) и модули ядра. Во время установи системы или обновления ядра initrd автоматически собирается и, в результате, там оказываются необходимые нам модули.
Теперь, когда мы знаем про ramdisk, попробуем организовать процесс загрузки по другому: загрузчик загружает ядро, загружает рамдиск и по некому стандарту сообщает ядру об этом диске, затем передает управление ядру. Ядро запускает демон инициализации. Как правило это /bin/init, тот грузит модули, показывает красивую картинку загрузки вашей убунты(федоры, минта…) монтирует жесткий диск и работает там.
Давайте убедимся, что это так. Дружно запускаем команду
cat /etc/mtab
Если система действительно загрузилась с помощью initrd, мы увидим в первой строчке что-нибудь вроде:
rootfs / rootfs rw 0 0
После rootfs в корень ФС монтируется раздел вашего жесткого диска. Как и положено, вы после монтирования жесткого диска не можете видеть, что находится в rootfs, однако она смонтирована в корне до него.
initrd находится в директории /boot и, в моем случае, зовется initramfs-linux.img.
Если вы не нашли ядро или рамдиск советую посмотреть процедуру загрузки в конфигах загрузчика. Если ваш загрузчик — GRUB 2, то делается это так:
cat /boot/grub/grub.cfg

Где модули?

Модули в /boot вы можете не искать, они находятся в папке /lib/modules. Если у вас стоит несколько ядер, то там будет несколько папок. Для того, чтобы узнать папку запущенного ядра вбейте команду:
uname -r
Модули ядра имеют расширение *.ko и запакованы в архивы.

Let’s go!

Итак, давайте для начала условимся, что особенности сборки и установки ядра немного зависят от дистрибутива и того, как его устанавливали. У меня, например стоит Arch Linux и у меня во время сборки ядра возникли проблемы. Для того, чтобы на арче собрать ядро убедитесь, что у вас есть bc, docbook-xsl, inetutils и xmlto. Мне не следует вам напоминать, что у вас должен стоять компилятор gcc. Если во время сборки возникают проблема, вроде «не могу запустить такую-то программу», убедитесь, что у вас все есть.
Поехали. Для начала, скачайте исходники ядра:
wget https://www.kernel.org/pub/linux/v3.x/linux-3.18.6.tar.xz
Затем, распакуйте их с помощью архиватора tar и зайдите в папку:
tar -xJf linux-3.18.6.tar.xz
cd linux-3.18.6

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

  • make menuconfig — подойдет, если мы не можем позволить себе такую роскошь, как графический интерфейс(например, мы не установили иксы, или они не запускаются из-за конфигурации ядра, или мы работаем по SSH, хотя собирать ядро по удаленке довольно странно). Будет представлен интерфейс на псевдографике, где мы сможем с помощью клавы отметить нужные чекбоксы.
  • make xconfig — если у нас есть такая роскошь, как графический интерфейс и в нем используется библиотека Qt.
  • make gconfig — у нас есть такая роскошь, как графический интерфейс, но по странному стечению обстоятельств вы используете GNOME вместо KDE.
  • make oldconfig — дополняет старый конфиг новыми параметрами, задав вам несколько вопросов.
  • make defconfig — настройки, по умолчанию.

Мы пойдем следующим путем: создатель дистрибутива тщательно подбирал настройки ядра и вы точно знаете, что система с ними работает. Мы возьмем настройки из рабочей системы. Если в конфигурации ядра был включен config.gz, то мы можем найти этот файл в файловой системе /proc:
cp /proc/config.gz .
gzip -d config.gz
mv config .config
make oldconfig

Дальше мы примемся все конфигурировать уже интересующие нас параметры. Во первых было-бы не плохо узнать, какие модули в наше системе в данный момент загружены. Команда lsmod выдает список модулей в три колонки:

  • Module — имя модуля
  • Size нас не интересует.
  • Used by по сути две колонки. Первая — это число зависимостей от данного модуля. Вторая — это те самые модули, которые его используют.

Если в колонке used by разность числа модулей и числа зависимостей не равна нулю, значит в ядре есть, что-то что использует его и вы не можете этот модуль выгрузить, не введя систему в неработоспособное состояние. Это значит, вы не выгрузите драйвер жесткого диска, который уже примонтирован и на котором установлена работающая в данный момент ОС. Помимо, этого есть модули, от которых зависят — эти невыгружаемые модули. Все остальные вы можете так или иначе выгрузить в рантайме командой вида modprobe -r foo и система, скорее всего, останется в работоспособном состоянии. Чтобы ваша система грузилась без рам диска вам, как минимум, нужно встроить в ядро невыгружаемые модули. Если вы хотите освободить несколько секунд загрузки, сделав ядро монолитным, встройте все, что вы видите в выхлопах команды lsmod. Приступим к конфигурированию:
make menuconfig
Не забудьте переименовать ядро, для поиска необходимых опций воспользуйтесь поиском. Помните, что вы не всегда найдете опцию, отвечающую за тот или иной модуль, в этом деле вам поможет Google (или Яндекс, Bing, поиск@mail.ru, в зависимости, от того, чем вы пользуетесь).
После, того как вы все настроили, осталось ядро собрать и установить вместе с модулями:
make
Отдохните, сделайте чай. У вас появилось несколько часов свободного времени, прежде чем вы выполните установку:
make install modules_install
Новое ядро будет установлено как /boot/vmlinuz. Переименуем его в vmlinuz-mykern, для того чтобы ядро было найдено GRUB’ом. Помимо, этого вам следует собрать initrd, даже если полагаете, что система загрузится без него, для того чтобы убедиться, что она загрузится хотя-бы с ним. В арче я делаю это так
mkinitcpio -g /boot/initramfs-mykern.img -k 3.18.6-MYKERN (предполагалось, что вы дали ядру имя -MYKERN)
Нам остается обновить конфиги GRUB’а и ребутнуть систему. Будьте внимательны и не удаляйте ядро из дистра, поскольку ваше ядро окажется скорее-всего не рабочим и вам придется в таком случае брать загрузочный диск, монтировать жесткий перейти в chroot окружение и переустановить ядро(если вы не знаете, как это сделать, вам ещё рано пересобирать ядра).
grub-mkconfig -o /boot/grub/grub.cfg
reboot

Вместо заключения

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

143 комментария к “Что такое ядро. Часть 1 : пересборка

  1. В акедемических интересах пересобрать ядро это очень хорошо, но на практике в этом нет необходимости:
    1. лучше добавлять нужные модули без пересборки ядра.
    2. в конкретном случае в archlinux и так приходят свежие ядра при обновлении.

  2. Immunofluorescent staining of Axin2 expressing cells with GFP C, in situ hybridisation analysis of dspp expression D and merged image E of damaged superior first molar from Axin2 CreERT2; Rosa26 mT mG flox mice 5 days post damage can you buy priligy online Experimental endometriosis was established by implanting endometrial tissue from green fluorescent protein GFP mice into the peritoneal cavity of DS- Red mice

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

  4. Im lebhaften Zentrum gelegen bietet diese moderne
    Spielbank in Holland alles was man sich von einem Casino
    Besuch wünscht. Im Holland Casino Enschede stehen nicht tolle
    Automatenspiele ebenso wie sämtliche klassische Casinospiele für
    die Besucher bereit. Aus dem ursprünglichen Interesse an traditionellen Glücksspielen und Poker entstand ein Startup,
    das heute ein erfolgreiches Unternehmen im Glücksspiel-Bereich ist.
    Pokerfans kommen bei den regelmäßig stattfindenden Texas Hold’em Turnieren auf ihre Kosten. Die Lage im Herzen der Stadt macht es leicht zugänglich und bietet zudem
    die Möglichkeit, die kulturellen und gastronomischen Highlights
    von Enschede zu erkunden.
    Nahe der deutschen Grenze und damit im Osten Hollands liegt das Casino Enschede in bester
    Innenstadtlage. Dieser Standort liegt direkt neben dem
    Grolsch Veste Stadion – also ideal gelegen! Das Parkhaus Van Heek Garage liegt direkt unterhalb des Casinos,
    im Casino ist ein vergünstigtes Parkticket erhältlich.
    Diese Veranstaltungen finden regelmäßig statt und
    bieten spannende Möglichkeiten, zusätzlich zu gewinnen.

    References:
    https://online-spielhallen.de/powerup-casino-freispiele-ihr-schlussel-zum-sieg/

  5. He likes to take a data-backed approach to his reviews,
    believing that some key metrics can make a huge difference between your experience at otherwise similar sites.

    Since then, he’s worked on Canada, New Zealand, and Ireland,
    and is an experienced hand with English-language gambling
    products worldwide. These are the top payment
    options that you’re likely to find at the best sites. It’s understandable, as one of the strongest attractions of these
    sites is the fact that you’re guaranteed free coins, and very
    often free spins as well, as soon as you register.
    That said, you’ll still be able to win actual money and cash prizes.
    Every Australian casino site is different, but there are still
    some questions about them that share the same answers.

    The online casino industry is getting more and more competitive each year.
    We look at terms, max bonus, wagering, no deposit bonuses and many more factors.
    In this list we have filtered out the absolute best Australian casino bonuses based on our algorithm.

    Fast payouts and mobile gaming are top priorities, driving sites like Jet4Bet Casino to optimise for speed and accessibility.
    They’re great for players who don’t trust
    crypto or prefer linking to their bank. They’re ideal for players
    who value privacy or want fast payouts without verification for smaller
    amounts. Joka Casino and Wolf Winner Casino have slick apps
    for iOS and Android, with full access to games and banking.

    Jackpot Jill Casino’s bonuses have clear terms but always
    read the fine print.

  6. Featuring iconic symbols like fruits, bars, and sevens, these games deliver simple, smooth gameplay without
    overwhelming features. The program ensures that the most dedicated players enjoy a
    premium, tailor-made casino experience. Top-tier players
    get dedicated account managers, higher withdrawal limits, reduced processing times,
    and even exclusive games. No deposit offers often carry moderate wagering
    requirements and are limited to specific games. These usually come as free spins on selected slots, letting players try the casino without spending
    a dime. The structure rewards active players and provides a fair path to turning bonus funds into
    real cash.
    Rocket isn’t just another game on the
    DraftKings casino app… it’s a centerpiece of their strategy
    to stand out in the crowded online casino market. New users
    to DraftKings online casino can take advantage of 100% deposit match
    up to $2,000. Players in eligible states like New Jersey, Pennsylvania,
    Michigan, West Virginia, and Connecticut can enjoy this rocket casino game online.
    The rocket play casino is simple to learn but challenging to
    master. Right now, DraftKings is offering a 24-hour lossback bonus up to $1,000 for eligible casino games, and Rocket is
    fully included. This means all players have an equal chance
    of winning, and no games are rigged.
    Any contemporary smartphone or tablet, including all popular models on iOS
    and Android, may effortlessly access RocketPlay mobile casino.
    Playson, Elk, Bongo, and hundreds of more software companies provide players with accumulating
    jackpots. The player’s interest, however, will rise indefinitely
    if the casino gives the chance to win a large sum.
    Players may enjoy playing at the casino using a variety of
    cryptocurrencies, as well as dollars and euros. There is
    a difference in the withdrawal rates for players with high
    VIP accounts.

    References:
    https://blackcoin.co/winspirit-casino-login-australia-quick-access-to-premium-gaming/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*