Конфігурація, збірка і установка ядра Linux

  1. Отримання початкових кодів ядра і підготовка до конфігурації
  2. конфігурація
  3. збірка Ядра
  4. Установка нового ядра
  5. резюме

Доброго дня, читачі і гості   мого сайту Доброго дня, читачі і гості мого сайту . В продовження минулого поста про ядрі Linux , Сьогодні хочу розповісти, як зібрати і налаштувати власне ядро.

З минулого поста ми вже знаємо, що ядро Linux володіє мінімальними можливостями і підтримкою обладнання, але при необхідності ми можемо розширити можливості ядра за допомогою kernel modules (модулів ядра). Для чого може знадобитися складання або Перезбірка власного ядра? Наприклад для включення / відключення будь-яких нових можливостей, або оновлення старого ядра на більш нове з підтримкою нових можливостей, або просто для дослідів З минулого поста ми вже знаємо, що ядро Linux володіє мінімальними можливостями і підтримкою обладнання, але при необхідності ми можемо розширити можливості ядра за допомогою kernel modules (модулів ядра) як в нашому прикладі.

Отримання початкових кодів ядра і підготовка до конфігурації

Можна кількома шляхами отримати вихідні:

    1. Отримати оригінальні архіви коду с, у вигляді gzip або bzip2 архівів, за допомогою команди:

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.1.tar.bz2 cp linux-2.6.36.1.tar.bz2 / usr / src /

  1. Отримати вихідні з репозиторіїв дистрибутивів (наприклад:,,) у вигляді бінарного пакета deb або rpm (src.rpm) з патчами від виробника дистрибутива. Наприклад: kernel-server: / tmp / 123 # apt-cache search source | grep linux ketchup - update utility for linux-kernel sources linux-patch-grsecurity2 - grsecurity kernel patch - new major upstream version linux-wlan-ng-source - linux-wlan-ng driver linuxdoc-tools - convert LinuxDoc SGML source into other formats linux-patch-lustre - Linux kernel patch for the Lustre Filesystem libcorelinux-dev - Foundation Classes, Design Patterns, IPC and Threads libcorelinux-doc - Foundation Classes, Design Patterns, IPC and Threads libcorelinux-examples - Foundation Classes, Design Patterns, IPC and Threads libcorelinuxc2a - Foundation Classes, Design Patterns, IPC and Threads linux-patch-openswan - IPSEC Linux kernel support for openswan selinux-policy-src - Source of the SELinux reference policy for customization user-mode-linux-doc - User-mode Linux (Documentation) linux-patch-xenomai - Linux kernel patches for Xenomai linux-patch-debian-2.6.26 - Debian patches to version 2.6.26 of the Linux kernel linux-source-2.6.26 - Linux kernel source for version 2.6 .26 w ith Debian patches linux-tree-2.6.26 - Linux kernel source tree for building Debian kernel images Print-server: ~ # apt-get install linux-source-2.6.26 Читання переліків пакетів ... Готово Побудова дерева залежностей Читання інформації про стані ... Готово Будуть встановлені наступні додаткові пакети: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev make Пропоновані пакети: binutils-doc bzip2-doc cpp-doc gcc-4.3-locales gcc-multilib manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.3-multilib libmudflap0-4.3-dev gcc-4.3-doc libgcc1-dbg libgomp1-dbg libmudflap0-dbg glibc-doc libncurses-dev ncurses-dev kernel-package libqt3-mt-dev make-doc НОВІ пакети, які будуть встановлені: binutils bzip2 cpp cpp-4.3 gcc gcc-4.3 libc6-dev libgmp3c2 libgomp1 libmpfr1ldbl linux-libc-dev linux-source-2.6.26 make оновлено 0, встановлено 13 нових пакетів, для видалення відзначено 0 пакетів, і 5 пакетів не оновлено. Необхідно завантажити 50,2MB / 63,2MB архівів. Після даної операції, обсяг зайнятого дискового простору зросте на 89,4MB. Хочете продовжити [Д / н]? y Отримано: 1 http://ftp.debian.org lenny / main linux-libc-dev 2.6.26-26 [769kB] Отримано: 2 http://ftp.debian.org lenny / main linux-source-2.6. 26 2.6.26-26 [49,5MB] Отримано 50,2MБ за 1min49s (460kБ / c) Вибір які раніше не обраного пакета binutils. (Читання бази даних ... на даний момент встановлено 16621 файлів і каталогів.) Розпаковується пакет binutils (з файлу ... / binutils_2.18.1 ~ cvs20080103-7_i386.deb) ... Вибір які раніше не обраного пакета bzip2. ..... Розпаковується пакет make (з файлу ... / archives / make_3.81-5_i386.deb) ... Обробляються тригери для man-db ... Настроюється пакет binutils (2.18.1 ~ cvs20080103-7). .. ..... Настроюється пакет linux-source-2.6.26 (2.6.26-26) ... Настроюється пакет make (3.81-5) ... kernel-server: ~ # ls / usr / src / linux -source-2.6.26.tar.bz2

Хочу відзначити, що ім'я архіву з кодами або пакета, має приблизно такий вигляд: linux-source-2.6.26 або kernel-source-2.6.18. З лістингу другого прикладу, видно що при установці початкових кодів зі сховищ, apt нам пропонує встановити і інші супутні пакети, без яких ядро ​​зібрати не вийти.

Отже. Після отримання початкових кодів одним з вищевказаних шляхів (копіюванні архіву (в першому випадку) і установки пакета (у другому випадку)), ми отримуємо в каталозі / usr / src / - архів з ім'ям, аналогічним linux-source-2.6.26.tar. bz2. Далі нам необхідно розпакувати динний архів командою: tar -xjf linux <version> .tar.bz2. В результаті, отримуємо дерево каталогів исходников ядра, розташовані в каталозі /usr/src/linux-2.6.36.1/. Так само рекомендується створити символьне посилання / usr / src / linux на вищевказаний каталог:

kernel-server: ~ # cd / usr / src / kernel-server: / usr / src # ln -s linux-2.6.36.1 linux kernel-server: / usr / src # ls -l lin * lrwxrwxrwx 1 root src 14 Гру 3 16:31 linux -> linux-2.6.36.1 -rw-r - r-- 1 root src 70236745 Гру 3 15:57 linux-2.6.36.1.tar.bz2

Перш ніж приступати до спроби побудови та конфігурації, необхідно переглянути файл Changes, розташований в каталозі Documentation. Він, серед іншого, містить список пакетів, необхідних для складання ядра, із зазначенням номерів версій. Переконайтеся, що ці пакети встановлені (якщо установка початкових кодів проводилася за допомогою пакетного менеджера, то швидше за все потрібні пакети вже встановлені).

В розпакованому дереві підкаталогів міститься файл Makefile. make-файл містить різні цілі збірки для конфігурації опцій ядра, збірки ядра і його модулів, установки модулів і складання пакетів RPM або deb. Найбільш свіжі версії початкових кодів ядра дозволяють використовувати make help для отримання короткої довідки для кожної мети. У старіших системах було необхідно звертатися до документації або переглядати make-файл. Нижче показана частина виведення make help:

kernel-server: /usr/src/linux-2.6.36.1# make help Cleaning targets: clean - Remove most generated files but keep the config and enough build support to build external modules mrproper - Remove all generated files + config + various backup files distclean - mrproper + remove editor backup and patch files Configuration targets: config - Update current config utilising a line-oriented program nconfig - Update current config utilising a ncurses menu based program menuconfig - Update current config utilising a menu based program xconfig - Update current config utilising a QT based front-end gconfig - Update current config utilising a GTK based front-end oldconfig - Update current config utilising a provided .config as base .......

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

kernel-server: /usr/src/linux-2.6.36# gzip -cd ../patch-2.6.xx.gz | patch -p1 # або Print-server: /usr/src/linux-2.6.36# bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1

конфігурація

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

config

Мета config використовує інтерфейс командного рядка для отримання відповідей багато на питання, що стосуються створення або поновлення файлу .config. Имхо, в порівнянні з цілями використовують меню - дуже незручна штука.

cloneconfig

Копіювання налаштувань поточного ядра в файл .config. Дана мета застаріла і в нових ядрах замінена oldconfig . (Зручно для додавання нових функція поточного ядра)

menuconfig

Мета menuconfig використовує програму з меню-інтерфейсом, побудовану на базі ncurses, для створення або поновлення файлу .config. Ви повинні тільки відповісти на питання для елементів, які потрібно змінити. Цей підхід замінив стару мета config. Виконується у вікні терміналу віддалено або локально.

nconfig

Мета nconfig використовує програму з меню-інтерфейсом, побудовану на базі ncurses, для створення або поновлення файлу .config. Дана версія заснована на menuconfig, але має більш сучасний зовнішній вигляд. Додана після релізу Linux-ядра 2.6.35. Ви повинні тільки відповісти на питання для елементів, які потрібно змінити. Виконується у вікні терміналу віддалено або локально.

xconfig

Мета xconfig використовує систему графічного меню, засновану на QT front-end, що використовується в KDE desktop.

gconfig

Мета gconfig використовує систему графічного меню, засновану на GTK front-end, що використовується в GNOME desktop.

oldconfig

Мета oldconfig дозволяє створити конфігурацію з використанням існуючого файлу .config, створеного раніше або взятого з іншої системи. Наприклад, ви можете скопіювати конфігураційний файл для вашої системи з / lib / modules / $ (uname -r) /build/.config в / usr / src / linux. Зробивши це, можна використовувати одну з цілей меню конфігурації, щоб при необхідності внести зміни. Так само при виконанні даної команди, якщо в новому ядрі додано багато нових можливостей - буде задано багато питань по налаштуванню нових параметрів. (Зручно для додавання нових функція поточного ядра)

Повторюю, що список всіх цілей команд можна побачити, ввівши make help. Отже, почнемо конфігурація. Найзручніша для консолі, имхо - make menuconfig.

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

kernel-server: /usr/src/linux-2.6.36.1# make menuconfig *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make [1]: *** [scripts / kconfig / dochecklxdialog] Помилка 1 make: *** [menuconfig] Помилка 2

Чогось не вистачає, подумав Штірліц (С) ... Напевно пакета, що містить ім'я ncurses і якщо вже це libraries, то швидше за все, пакет починається на lib. Я поліз в репозиторій:

kernel-server: /usr/src/linux-2.6.36.1# apt-cache search ncurses | grep ^ lib libcunit1-ncurses-dev - Unit Testing Library for C (ncurses) - development files libcunit1-ncurses - Unit Testing Library for C (ncurses) libncurses-gst - Ncurses bindings for GNU Smalltalk libkaya-ncurses-dev - Ncurses binding for kaya libkaya-ncursesw-dev - Ncurses binding for kaya libcurses-perl - Curses interface for Perl libcurses-widgets-perl - Curses widget interface for Perl libruby-extras - a bundle of additional libraries for Ruby libruby1.8-extras - a bundle of additional libraries for Ruby 1.8 libtexttools-dev - Ada and C ++ library for writing console applications libtexttools2.0.5 - Ada and C ++ library for writing console applications libncurses-ruby1.8 - ruby ​​Extension for the ncurses C library libncurses-ruby1.9 - ruby Extension for the ncurses C library libncurses-ruby - ruby ​​Extension for the ncurses C library lib64ncurses5-dev - developer's libraries for ncurses (64-bit) lib64ncurses5 - shared libraries for terminal handling (64-bit) libncurses5-dbg - debug ging / profiling libraries for ncurses libncurses5-dev - developer's libraries and docs for ncurses libncursesw5-dbg - debugging / profiling libraries for ncurses libncursesw5-dev - developer's libraries for ncursesw libcurses-ocaml-dev - OCaml bindings for the ncurses library libcurses-ocaml - OCaml bindings for the ncurses library libggi-target-terminfo - General Graphics Interface termInfo display target libncurses5 - колективні бібліотеки для керування терміналом libncursesw5 - бібліотеки для керування терміналом (підтримка двобайтових символів)

Цей рядок: libncurses5-dev - developer's libraries and docs for ncurses мені здалася потрібною. Давайте встановимо:

kernel-server: /usr/src/linux-2.6.36.1# apt-get install libncurses5-dev Читання переліків пакетів ... Готово Побудова дерева залежностей Читання інформації про стан ... Готово НОВІ пакети, які будуть встановлені: libncurses5-dev оновлено 0, встановлено 1 нових пакетів, для видалення відзначено 0 пакетів, і 5 пакетів не оновлено. Необхідно завантажити 1546kБ архівів. Після даної операції, обсяг зайнятого дискового простору зросте на 6599kB. Отримано: 1 http://ftp.debian.org lenny / main libncurses5-dev 5.7 + 20081213-1 [1546kB] отримано 1546kБ за 4s (344kБ / c) Вибір які раніше не обраного пакета libncurses5-dev. (Читання бази даних ... на даний момент встановлено 18098 файлів і каталогів.) Розпаковується пакет libncurses5-dev (з файлу ... / libncurses5-dev_5.7 + 20081213-1_i386.deb) ... Обробляються тригери для man-db ... Настроюється пакет libncurses5-dev (5.7 + 20081213-1) ...

Готово, пробуємо make menuconfig:

Ура Ура! Ми бачимо заповітне меню конфігурації ядра. Нижче показані різні опції, що дозволяють включати компоненти в ядро ​​або створювати модулі. Коли опція підсвічена, за допомогою клавіші пробілу можна переміщатися між можливими варіантами для даного компонента. Щоб активувати опцію, натисніть y, щоб відключити - n, щоб створити, якщо це можливо, модуль, натисніть m. Вихід з меню: Esc Esc.

  • [*] Компонент буде включений в ядро.
  • [] Компонент не буде включено в ядро.
  • [M] Компонент буде оформлений у вигляді модуля.
  • <> Компонент не буде включено в ядро, але може бути оформлений у вигляді модуля.

Нижче приведу опис основних розділів конфігурації зміню (згодом буде поповнюватися):

Розділ Пареметр Опис General setup Цей розділ дозволяє додати ідентифікаційну рядок до вашого ядра, а також ряд атрибутів, які не мають відношення до будь-яких розділах, але тим не менше повинні бути описані. Enable loadable module support Цей розділ містить опції, що визначають, чи буде ваше ядро підтримувати модулі і чи будуть вони довантажуватися і розвантажуватися автоматично. Опцію "Enable loadable module support" слід включити. Processor type and features Цей розділ містить специфічні для даного типу процесора конфігураційні опції. Тут ви можете вибрати процесор і сімейство процесора, які будуть підтримуватися вашим ядром. Ви можете ввімкнути або вимкнути підтримку ядром різних можливостей, що надаються даним процесором. Переконайтеся, що ви включили підтримку багатопроцесорних систем (symmetric multi-processing support), якщо у вашому системі встановлено більше одного процесора або процесор підтримує технологію hyperthreading. Крім того, для отримання більшої продуктивності графічної підсистеми в системах з AGP або PCI відеокартами слід включити підтримку MTRR. Power management options У цьому розділі поміщені опції, що стосуються управління живленням. Особливо вони важливі для ноутбуків. Крім контролю стану харчування, ви зможете знайти там засоби для контролю і моніторингу таких параметрів як температура або стан охолоджуючого вентилятора. Bus options (PCI etc.) Цей розділ містить опції для комп'ютерних шин, підтримуваних вашою системою, таких як PCI, PCI Express і PC Card. Тут ви можете включити підтримку файлової системи / proc / pci, якою можна користуватися разом із зазвичай використовуваної командою lspci. Executable file formats / Emulations Цей розділ містить опції, що стосуються підтримки різних форматів бінарних файлів. Слід включити підтримку "ELF binary". Крім того, можна включити підтримку DOS binaries для запуску їх під DOSEMU, також як і інших підтримуваних відповідними wrapper'амі бінарних файлів, таких як Java ™, Python, Emacs-Lisp і т.д. Нарешті, для 64-бітових систем, що підтримують 32-бітну емуляцію, ви, можливо, захочете включити підтримку 32-бітних додатків. Networking Секція, що стосується налаштувань мережі, досить велика. Тут ви можете включити базову підтримку сокетів, мереж TCP / IP, фільтрацію, маршрутизацію і bridging мережевих пакетів, а також підтримку різних протоколів, таких як IPV6, IPX, Appletalk і X.25. Крім того, ви можете включити підтримку wireless, infrared і amateur radio. Device drivers Цей розділ також дуже великий. Тут ви можете включити підтримку великого числа апаратних пристроїв, включаючи IDE / ATAPI або SCSI диски, або flash-диски. Увімкніть DMA для ваших IDE пристроїв; інакше вони будуть працювати в більш повільної PIO-моді. Якщо ви хочете мати підтримку multiple devices, таких як RAID або LVM, відповідні опції також треба включити. Тут ви також можете включити підтримку паралельного порту для роботи з принтером через цей інтерфейс. Тут відбувається конфігурація широкого набору підтримуваних мережевих пристроїв для різних мережевих протоколів, які ми конфігурували раніше. Крім того, тут ви знайдете опції підтримки пристроїв аудіо- і відео-захоплення, пристроїв USB і IEEE 1384 (Firewire), а також різного роду пристроїв апаратного моніторингу. У розділі управління символьними пристроями (Character Devices) ви, можливо, захочете включити підтримку друку через паралельний порт і підтримку direct rendering. Firmware drivers Цей розділ містить кілька опцій, що відносяться до встановлення та оновлення BIOS, таких як використання функцій Dell System Management на деяких системах виробництва компанії Dell. File systems Цей розділ призначений для конфігурації файлових систем, підтримку яких ви хочете мати у вашому ядрі, скомпільованих в вигляді модулів чи ні. Також ви зможете знайти тут файлові системи для знімних дискових пристроїв (дискети, CD і DVD пристрої), а також мережевих файлових систем, таких як NFS, SMB або CIFS. Підтримка різних типів розділів і національних кодувань Native Language Support також розташовуються в цьому розділі. Kernel hacking Цей розділ дозволяє включати режим налагодження ядра і вибирати, які додаткові функції будуть включені. Security options Цей розділ призначений для конфігурації опцій захисту, а також включення і конфігурації SELinux (Security Enhanced Linux). Cryptographic options У цьому розділі можна настроїти підтримку різних алгоритмів шифрування, таких як MD4, DES і SHA256. Library routines Тут ви можете вказати ряд алгоритмів обчислення контрольних сум (CRC), які будуть включені в ядро або зібрані як модулі.

Я навів дуже короткий опис розділів конфігурації ядра. Саме за вибором налаштувань, я напевно, зроблю окремий пост, бо поточний виріс до величезних розмірів. Найкраще опис налаштувань make menuconfig я знайшов тут. Від себе скажу, що логічним буде виконати make oldconfig (тим самим скопіювавши поточний .config встановленої ОС), а потім запустити make menuconfig і відключити всі непотрібні функції (припустимо я відключив підтримку WiFi, непотрібних мені файлових систем jfs і т.п.). І загалом, я прихильник такої думки, що займатися оптимізацією ядра необхідно в дуже крайніх випадках, коли продуктивність ОС впирається в можливості заліза. Відповідно, зменшивши розмір ядра (відключивши непотрібні модулі, включивши їх до складу ядра + відключивши непотрібні можливості), можна додати в продуктивності 1-2%. А на сучасних серверах, думаю це (переконфігуруванні ядра) не особливо актуально.

збірка Ядра

Тепер, коли ми сконфигурировали ядро, ми готові до його складання. Якщо ви не знаєте, який стан дерева для збірки, перш ніж приступати до конфігурації нового ядра виконайте make clean. Для більш повного очищення виконайте make mrproper (при цьому - make mrproper - буде видалений файл .config, а також деякі інші файли, які використовуються в процесі складання).

В ході проби конфігурації, бажано дати новому ядру спеціальну назву, яке дозволить вам легко його ідентифікувати. Щоб зробити це, необхідно встановити значення Local version і активувати опцію Automatically append version information to the version string у відповідному рядку розділу General setup.

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

Щоб розпочати складання ядра 2.6, необхідно виконати make.

Щоб розпочаті складання ядра 2.4, та патенти, Виконати 3 командіровку:
make dep
make bzImage
make modules
Перша створює файли необхідніх залежних. Друга збірає ядро. І остання збирає модулі.

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

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

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

Після виконання make install повинен оновитися конфігураційний файл завантажувача. Але у мене він чомусь оновився після команди update-grub.

На цьому і закінчу. Дуже велика стаття вийшла. У найближчому майбутньому постараюся її стиснути.

Що ще почитати?

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/

резюме

Підведу маленький підсумок написаному. Скажу відразу, що завантажитися з переконфігурувати ядра мені вдалося рази з п'ятого :) Тому - пробуйте, експериментуйте! VirtualBox вам на допомогу :)

На мою думку, зазначену в статті процедуру доцільно виконувати або при необхідності виграти кілька мегабайт вільної пам'яті, або додати необхідні модулі / драйвера (звичайно, можна і інші причини придумати, наприклад для експериментів На мою думку, зазначену в статті процедуру доцільно виконувати або при необхідності виграти кілька мегабайт вільної пам'яті, або додати необхідні модулі / драйвера (звичайно, можна і інші причини придумати, наприклад для експериментів   ) ). При цьому, в першому випадку, збірка ядра розтягується на невизначений проміжок часу і невизначену кількість спроб складання і перезавантаження для того щоб отримати "ідеально" оптимізоване під залізо і заточене під себе ядро. У другому випадку, збірка ядра зводиться до кількох кроків: 1. отримання початкових кодів, 2. підготовка ядра до компіляції, 2.1 виконання make cloneconfig перед make menuconfig для копіювання поточних налаштувань ядра, 3. Виконання make menuconfig або іншої мети для конфігурації і додавання нових параметрів , 4. Компіляція та встановлення по вищезгаданої інструкції.

Отже, збірка і настройка індивідуального ядра складається з декількох етапів: 1. отримання початкових кодів ядра, 2. Конфігурація ядра, 3. Складання (компіляція) ядра, 4. Установка ядра. перший етап - це команда wget, другий - make menuconfig, третій - make. Ось так Отже, збірка і настройка індивідуального ядра складається з декількох етапів: 1

Буду радий Вашим Коментар.

upd 2010.01.15: додав нову мету - make nconfig (спасибі S_paul за коммент)

З повагою, Mc.Sim!

Інші матеріали в категорії Linux

Хочете продовжити [Д / н]?
Що ще почитати?
86.xml?