"А навіщо, власне, потрібно компілювати ядро? - можливо, запитаєте ви. - Адже до складу сучасних дистрибутивів Linux входить вже відкомпільоване ядро, і воно чудово працює". Причин може бути декілька.
По-перше, постійно виходять нові версії ядра, вихідні коди яких можна скачати з Інтернету. Вони, як правило, більш стабільні (маються на увазі, звичайно ж, релізи), підтримують більшу кількість пристроїв і взагалі містять багато нових корисних функцій. По-друге, ядро, яке постачається з дистрибутивом, скомпільовано таким чином, щоб працювати на будь-якому комп'ютері - від простенької трієчки до потужного сервера. Воно використовує тільки стандартні команди 386-го процесора, містить вбудовані драйвери для самого різного "заліза", а також підтримку величезної кількості різних можливостей і функцій (більшістю з них ви ніколи не скористаєтеся).
Втім, я трохи згустив фарби. Зовсім не обов'язково завантажувати та встановлювати собі кожен новий реліз ядра. Багато сучасні дистрибутиви мають кілька варіантів ядра, оптимізованих під різні конфігурації (найчастіше існує окремий варіант для багатопроцесорних систем). Крім того, всі драйвери включати в ядро не обов'язково - можна компілювати їх у вигляді окремих модулів (правда, такий метод прийнятний далеко не для всіх пристроїв, до того ж монолітне ядро швидше завантажується і стабільніше). Однак мені здається, витратити деякий час на компіляцію все ж варто - ви отримаєте ядро, оптимізоване під ваше залізо і ваші цілі використання Linux. Тим більше, що процес компіляції зовсім не складний.
Відразу обмовлюся, ми поговоримо про "переробці" Red Hat 6.1 на ядрі 2.2.12-20. однак для більшості сучасних дистрибутивів процес компіляції не відрізнятиметься від описаного.
Що ж, приступимо. Для початку потрібно зайти в систему під логіном root. Вихідні тексти kernel розташовані в каталозі / usr / src / linux / (якщо їх там немає - встановіть kernel sources зі свого дистрибутива). Переходимо в зазначену директорію і запускаємо програму настройки ядра. Зробити це можна по-різному. Для тих, хто працює в X-Window, ймовірно, зручніше буде графічна програма настройки. Щоб її запустити, наберіть у командному рядку make xconfig. Якщо ж у вас не встановлені Ікси, або ви чомусь вважаєте за краще текстові меню - використовуйте make menuconfig. Потрібно відзначити, що в обох випадках потрібні певні пакети (відповідно Tk і ncurses), які, однак, встановлюються за замовчуванням в більшості дистрибутивів. Є третій спосіб, найбільш незручний, але він працює завжди - make config. Але в цьому випадку вам доведеться послідовно відповідати на безліч запитань.
Так як для багатьох графічна програма настройки зручніше, розглянемо саме цей варіант (до речі, він вигідно відрізняється більш зручним інтерфейсом). Отже, після запуску make xconfig на екрані з'явиться вікно з великими кнопками, які відповідають різним розділах конфігурації ядра. На жаль, обсяг статті не дозволяє детально описати всі опції у всіх розділах, але думаю, цього і не потрібно, адже існує кнопка Help :-). Тому ми зупинимося лише на ключових моментах.
Далі - Processor type and features. Виберіть тип вашого процесора. Частина процесорів присутні в самих назвах опцій, проте для деяких вибір не настільки очевидний. Наприклад, для K6-2 або K6-III слід зупинитися на Pentium / K6 / TSC, для IDT Winchip - 586 / k5 / 5x86 / 6x86, для Cyrix MII, Pentium II (III), Celeron - PPro / 6x86MX. Далі виберіть інші пункти даного розділу.
Наступний розділ - Loadable module support - дуже важливий. Тут ви можете дозволити підтримку модулів або відмовитися від їх використання. Кожен варіант має свої переваги і недоліки. Про переваги монолітного ядра вже говорилося. Але є аргументи і на користь завантажувальних модулів. По-перше, при установці нового заліза вам не доведеться перекомпілювати все ядро. По-друге, модулі можуть довантажувати в пам'ять і розвантажуватися у міру потреби. І, нарешті, якщо при виборі конфігурації ядра ви не можете визначити, чи потрібна вам та чи інша функція, - її можна скомпілювати в вигляді модуля. Навпаки опцій, для яких можлива компіляція у вигляді модуля між кнопками y (включити в ядро) і n (не включати), буде перебувати також кнопка m (скомпілювати у вигляді модуля).
У розділах General setup, PnP support, Block devices просто прибираємо все непотрібне - там дуже багато екзотики, начебто XT hard disk support, Parallel Port IDE device support, Multiple device driver support (програмна реалізація RAID), підтримка IDE-? EinaoiaCMD640, RZ1000 ( потрібно для деяких 486 плат і систем на основі 440FX) IDE / ATAPI Tape і інших речей, які більшості користувачів не потрібні.
Деякі розділи, на кшталт Appletalk devices, Token ring devices, Infrared port device drivers і інші, можна заборонити повністю (якщо, звичайно, у вас немає відповідних пристроїв). В інших - залишаємо тільки потрібне (нагадаю, що якщо ви не впевнені, чи потрібна ця опція чи ні, - скомпілюйте її у вигляді модуля).
Після того, як ви відвідали всі розділи і повністю сконфигурировали ядро, натисніть на кнопку Save and Exit. Тепер можна приступити безпосередньо до компіляції. Наберіть в командному рядку make dep; make clean; make bzImage і ... терпіння. Компіляція може тривати від декількох хвилин до одного-двох годин, в залежності від продуктивності комп'ютера. Якщо ви використовували підкачуємі модулі, то слід також виконати команди make modules і make modules_install. Скомпільований ядро (файл bzImage) знаходиться в / usr / src / linux / arc / i386 / boot /. Тепер залишилося переписати його на місце старого. Ядро Linux, з якого відбувається завантаження, найчастіше називається vmlinuz або vmlinuz-x.y.z (x.y.z - версія ядра, у мене, наприклад, vmlinuz-2.2.12-20). Місцезнаходження ядра зазвичай можна подивитися в /etc/lilo.conf. Наприклад, в Red Hat 6.1 ядро знаходиться в / boot /. а в деяких інших дистрибутивах прямо в корені /. Далі два шляхи. Перший - просто видалити старе ядро і скопіювати на його місце файл bzImage (природно, перейменувавши його в vmlinuz або vmlinuz-x.y.z, в залежності від того, що у вас записано в /etc/lilo.conf) і перезавантажити комп'ютер. Однак якщо в процесі автоматичної інсталяції або компіляції ядра ви зробили щось не так - Linux може просто зависнути при завантаженні. В принципі, нічого страшного. Якщо у вас дистрибутив Red Hat, то досить запустити інсталяцію Linux в режимі оновлення старої версії і вибрати автоматичний режим оновлення. Так як у вас все пакети з точки зору дистрибутива :-) найновіші, то просто перепишіть ядро і деякі інші найбільш критичні файли. Правда, з деякими іншими метушні може бути набагато більше, та й компакта з інсталяцією, можливо, не опиниться під рукою. Тому слід чинити більш обачно. Не будемо видаляти старе ядро, а просто перейменуємо його, наприклад в vmlinuz.old. Потім додамо можливість завантаження цього ядра через LILO. щоб, в разі чого, ви могли завантажитися і повернути старе ядро, для чого потрібно відредагувати файл /etc/lilo.conf. Виглядає це приблизно так (у вас, звичайно, він може відрізнятися від написаного).
boot = / dev / hda
prompt
timeout = 50
default = linux
image = / boot / vmlinuz-2.2.12-20
label = linux
read-only
root = / dev / hda2
Перед other = / dev / hda1 слід додати щось на зразок:
image = / boot / vmlinuz.old
label = old
read-only
root = / dev / hda2