Збірка ядра

досить проста Це може здатися дивним, але вона навіть більш проста, ніж компіляція та інсталяція інших системних компонентів, як, наприклад бібліотеки glibc У ядрах серії 26 вбудована нова система конфігурації та компіляції, яка дозволяє зробити це завдання ще простіше і є довгоочікуваним поліпшенням у порівнянні з серією ядер 24

Таблиця 21 Каталоги в корені дерева вихідних кодів ядра

Каталог Опис

arch crypto Documentation drivers

fs

include init

ipc

kernel lib

mm net scripts security sound

usr

Специфічний для апаратної платформи вихідний код

Криптографічний API Документація вихідного коду ядра Драйвери пристроїв

Підсистема VFS та окремі файлові системи

Заголовки ядра

Завантаження і ініціаліеація ядра

Код між процесами взаємодії Основні підсистеми, такі як планувальник Допоміжні підпрограми

Підсистема управління памяттю і підтримка віртуальної памяті

Мережева підсистема Сценарії компіляції ядра Модуль безпеки Linux Звукова підсистема

Початковий код простору користувача (initramfs)

Так як доступний початковий код ядра Linux, то, це означає, що є можливість конфігурувати ядро ​​перед компіляцією Є можливість скомпілювати підтримку тільки необхідних драйверів і функцій Конфігурація ядра-необхідний етап перед тим, як його компілювати Оскільки в ядрі незліченна кількість функцій і варіантів підтримуваного апаратного забезпечення, можливостей по конфігурації, мяко кажучи, багато Конфігурація управляється за допомогою опцій конфігурації у вигляді CONFIG_FEATURE Наприклад, підтримка симетричної багатопроцесорної обробки (Symmetric multiprocessing, SMP) встановлюється за допомогою опції CONFIG SMP Якщо цей параметр встановлений, то підтримка функцій SMP включена Якщо цей параметр не встановлений, то функції підтримки SMP відключені Всі конфігураційні параметри зберігаються у файлі confi g в кореневому каталозі дерева вихідного коду ядра і встановлюються однією з конфігураційних програм, наприклад, за допомогою команди make xconfig Конфігураційні параметри використовуються як для визначення того, які файли повинні бути скомпільовані під час збірки ядра, так і для управління процесом компіляції через директиви препроцесора

Конфігураційні змінні бувають двох видів: логічні(boolean) і змінні з трьома станами (instate)  Логічні змінні можуть приймати значенняyes іпо Такі змінні конфігурації ядра, як CONFIG_PREEMPT, зазвичай є логічними Конфігураційна змінна з трьома станами може приймати значенняyes,  no і module Значенняmodule  відповідає конфігураційному параметру, який встановлений, але відповідний код повинен компілюватися як модуль (тобто як окремий обєкт, який завантажується динамічно) Драйвери пристроїв звичайно представляються конфігураційними змінними з трьома станами

Конфігураційні параметри можуть мати цілочисельний, або строковий, тип Ці параметри не контролюють процес складання, а дозволяють вказати значення, які вбудовуються у вихідний код ядра за допомогою препроцесора Наприклад, за допомогою конфігураційного параметра можна вказати розмір статично виділеного масиву

Ядра, які включаються до поставки ОС Linux такими виробниками, як Novell і Redhat, компілюються як частина дистрибутива У таких ядрах зазвичай є великий набір різних функцій і практично повний набір всіх драйверів пристроїв у вигляді завантажуваних модулів Це дозволяє отримати хорошу базову ядро ​​і підтримку широкого діапазону обладнання На жаль, як розробникам ядра, вам буде потрібно компілювати свої ядра і самим розбиратися, які модулі включати, а які ні

У ядрі підтримується кілька інструментів, які дозволяють виконувати конфігурацію Найбільш простий інструмент – це текстова утиліта командного рядка:

make config

Ця утиліта переглядає всі параметри один за іншим і інтерактивно запитує у користувача, яке значення відповідного параметра встановити – yes,  no або module {для змінної з трьома станами) Ця операція вимагає тривалого часу, і якщо у вас не погодинна оплата, то краще використовувати утиліту на основі інтерфейсу ncurses:

make menuconfig

або графічну утиліту на основі системи X11:

make xconfig

або ще більш зручну графічну утиліту, засновану на бібліотеці gtk+

make gconfig

Ці утиліти дозволяють розділити всі параметри за категоріями, таким як Processor Features (Властивості процесора) і Network Devices (Мережні пристрої) Користувачі можуть переміщатися по категоріях і, звичайно, змінювати значення конфігураційних параметрів Команда

$ make defconfig

дозволяє створити конфігураційний файл, який буде містити параметри, які використовуються за замовчуванням для поточної апаратної платформи Хоча ці параметри і досить загальні (ходять чутки, що для апаратної платформи i386 використовується конфігурація Лінуса), вони є хорошою стартовою точкою, якщо ви ніколи перед цим не займалися конфігурацією ядра Щоб все зробити швидко, необхідно виконати цю команду, а потім перевірити, чи включена підтримка всіх потрібних апаратних пристроїв

Конфігураційні параметри містяться в корені дерева каталогів вихідного коду ядра у файлі з імям Config Для вас може здатися більш простим, так само як і для більшості розробників, безпосередньо редагувати цей конфігураційний файл Досить легко проводити пошук у цьому файлі і змінювати значення конфігураційних параметрів Після внесення змін до конфигура-

ційний файл або при використанні існуючого конфігураційного файлу для нового дерева каталогів вихідного коду ядра, необхідно активізувати і оновити конфігурацію за допомогою команди:

make oldconfig

До речі, перед складанням ядра цю команду також необхідно виконати Після того як конфігурація ядра виконана, можна виконати збірку за допомогою команди:

make

На відміну від попередніх серій ядер, у версії 26 більше немає необхідності виконувати команду make dep перед складанням ядра, так як створення дерева залежностей виконується автоматично Також не потрібно вказувати мету збірки, наприкладbzlmage,  як це було необхідно для більш ранніх версій Правило, записане у файлі з імям Makefile, яке використовується за умовчанням, в змозі обробити всі

Зменшення кількості виведених повідомлень

Для того щоб зменшити шум, повязаний з повідомленнями, які видаються під час складання, але в той же час бачити попередження і повідомлення про помилки, можна використовувати таку хитрість, як перенаправлення стандартного виводу команди make (1):

make> Імя_некоторого_файла

Якщо раптом виявиться необхідним переглянути виводяться повідомлення, можна скористатися відповідним файлом Але зазвичай, якщо попередження або повідомлення про помилки виводяться на екран, в цьому немає необхідності

Насправді я виконую таку команду

make &gt /dev/null,

що дозволяє зовсім позбутися непотрібних повідомлень

Паралельна збірка

Програма make (1) надає можливість розбити процес складання на кільказавданьКожне з цих завдань виконується окремо від інших і паралельно з іншими, істотно прискорюючи процес складання на багатопроцесорних системах Це також дозволяє більш оптимально використовувати процесор, Оскільки час компіляції великого дерева вихідного коду також включає час очікування завершення вводу-виводу (час, протягом якого процес чекає завершення операцій введення-виведення)

За замовчуванням утиліта make (1) запускає тільки одну задачу, оскільки часто файли збірки містять некоректну інформацію про залежності При неправильної інформації про залежності кілька завдань можуть почати наступати один одному на ноги, що призведе до помилок компіляції Звичайно ж, у файлі збірки ядра таких помилок немає Для компіляції ядра з використанням паралельної складання необхідно виконати наступну команду

$ make -jn

де n – кількість завдань, які необхідно запустити

Зазвичай запускається один або два процеси на процесор Наприклад, на двухпроцессорной машині можна використовувати наступний запуск

$ make -j4

Використовуючи такі відмінні утиліти, як distc c (1) і ccache (l), можна ще більш істотно зменшити час компіляції ядра

Інсталяція ядра

Після того як ядро ​​зібрано, його необхідно інсталювати Процес інсталяції істотно залежить від платформи і типу системного завантажувача Для того щоб дізнатися, в якій каталог повинен бути скопійований образ ядра і як встановити його для завантаження, необхідно звернутися до керівництва по використовуваному системному завантажувачу На випадок якщо нове ядро ​​буде мати проблеми з працездатністю, завжди слід зберегти одну або дві копії старих ядер, які гарантовано працездатні

Наприклад, для платформи x86, при використанні системного завантажувача gru b можна скопіювати завантажений образ ядра з файлу arch/i386/boot/bzlmag e в каталог / boo t і відредагувати файл / Etc / grub / grubcon f для вказівки записи, яка відповідає новому ядру У системах, де для завантаження використовується завантажувач LILO, необхідно відповідно відредагувати файл / etc / lilocon f і запустити утиліту lil o (8)

Інсталяція модулів ядра автоматизована і не залежить від апаратної платформи Просто потрібно запустити наступну команду з правами користувача root

$ make modules_install

У процесі компіляції в кореневому каталозі дерева вихідного коду ядра також створюється файл Systemmap У цьому файлі міститься таблиця відповідності символів ядра їх початковим адресами в памяті Ця таблиця використовується при налагодженні для перекладу адрес памяті в імена функцій і змінних

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*