Здравствуйте. Возможно, если вы пользуйтесь линуксом, то вы слышали всякие страшилки про пересборку ядра и хотели бы по подробнее разобраться с тем что такое ядро. В этой статье я попробую подробно пройтись по этой теме.
Где оно?
Само ядро находится в директории /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
Вместо заключения
На этом я заканчиваю столь подробный обзор пересборки ядра. Я рассказывал про то как компилировать ядро, поскольку описание того, как что-то собрать дает лучшее описание, как это что-то работает, чем какая-то диаграмма.
Попробуйте это, убедитесь, что это не так сложно собрать подходящее ядро с третей попытки, экспериментируйте и познавайте систему.
В акедемических интересах пересобрать ядро это очень хорошо, но на практике в этом нет необходимости:
1. лучше добавлять нужные модули без пересборки ядра.
2. в конкретном случае в archlinux и так приходят свежие ядра при обновлении.
Really great info can be found on blog.!
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
priligy pill Management of vulvovaginal lichen planus a new approach
The mean heart rate was unchanged propecia help Marlon, USA 2022 06 28 08 13 54
аккаунты с балансом https://birzha-akkauntov-online.ru
профиль с подписчиками заработок на аккаунтах
платформа для покупки аккаунтов маркетплейс аккаунтов соцсетей
перепродажа аккаунтов https://prodat-akkaunt-online.ru/
аккаунты с балансом маркетплейс для реселлеров
Account Trading Platform Secure Account Purchasing Platform
Buy Pre-made Account Account Trading Service
Database of Accounts for Sale Account Trading Platform
Online Account Store Accounts market
Website for Selling Accounts Account exchange
Account market Buy accounts
Account marketplace Guaranteed Accounts
Account trading platform Buy Account
buy and sell accounts purchase ready-made accounts
account selling service account market
secure account sales account market
account market account marketplace
buy and sell accounts account trading platform
sell accounts gaming account marketplace
secure account purchasing platform purchase ready-made accounts
account exchange account trading service
account trading platform account trading platform
ready-made accounts for sale https://accounts-marketplace.org
buy accounts purchase ready-made accounts
website for buying accounts account selling platform
secure account purchasing platform social media account marketplace
account market account trading
gaming account marketplace account market
buy accounts https://best-social-accounts.org/
account store database of accounts for sale
account catalog account buying platform
account selling service secure account sales
profitable account sales account trading
ready-made accounts for sale social media account marketplace
account exchange account sale
account trading platform https://accounts-offer.org/
social media account marketplace https://accounts-marketplace.xyz
account purchase https://buy-best-accounts.org
account exchange service https://accounts-marketplace.live
account exchange https://social-accounts-marketplace.xyz
sell account https://buy-accounts.space
ready-made accounts for sale https://buy-accounts-shop.pro/
accounts market https://accounts-marketplace.art
guaranteed accounts https://buy-accounts.live
online account store https://accounts-marketplace.online
биржа аккаунтов akkaunty-na-prodazhu.pro
продать аккаунт kupit-akkaunt.xyz
биржа аккаунтов маркетплейсов аккаунтов
площадка для продажи аккаунтов маркетплейсов аккаунтов
биржа аккаунтов akkaunty-market.live
продать аккаунт маркетплейсов аккаунтов
продать аккаунт https://akkaunty-optom.live/
купить аккаунт маркетплейсов аккаунтов
продажа аккаунтов https://akkaunty-dlya-prodazhi.pro/
маркетплейс аккаунтов соцсетей https://kupit-akkaunt.online
buy facebook profiles https://buy-adsaccounts.work
buy facebook ads accounts https://buy-ad-account.top
buy facebook ads manager https://buy-ad-accounts.click
facebook account buy https://ad-account-buy.top
buy ad account facebook https://buy-ads-account.work
buy a facebook account buy facebook account
buy facebook account for ads https://ad-accounts-for-sale.work/
buy google adwords accounts https://buy-ads-account.top
google ads account seller https://buy-ads-accounts.click
buying facebook account facebook accounts for sale
buy aged google ads account https://ads-account-for-sale.top/
google ads accounts https://ads-account-buy.work
adwords account for sale https://buy-ads-invoice-account.top
buy aged google ads account buy google ads verified account
google ads accounts buy google ads account
google ads reseller https://buy-verified-ads-account.work/
buy facebook business account buy-business-manager.org
buy google ads https://ads-agency-account-buy.click
buy facebook bm business manager for sale
buy facebook ads accounts and business managers https://buy-verified-business-manager-account.org/
facebook business manager buy https://buy-verified-business-manager.org
facebook verified business manager for sale buy facebook business manager accounts
verified bm business-manager-for-sale.org
buy facebook business account https://buy-bm.org/
unlimited bm facebook buy facebook bm
buy tiktok ads tiktok ads agency account
buy tiktok ads https://tiktok-ads-account-buy.org
buy tiktok ads https://tiktok-ads-account-for-sale.org
tiktok ads account buy https://tiktok-agency-account-for-sale.org
buy tiktok ads accounts https://buy-tiktok-ad-account.org
buy tiktok business account https://buy-tiktok-business-account.org
tiktok agency account for sale https://buy-tiktok-ads.org
tiktok ad accounts https://tiktok-ads-agency-account.org
Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.