Ручне складання і конфігурація ядра Linux

  1. Переходимо до практики. Ручне складання ядра Linux
  2. Можливі проблеми.
  3. Уточнення.
  4. Як жити далі?
  5. Навіщо це взагалі треба?
/ статті / Системне / Ручне складання і конфігурація ядра Linux /

Дата публікації: Oct. 28, 2010 7:18 pm

Теги:, Автор: Brainsburn

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

Почну з спроби зруйнувати міф. Багато хто звик думати, що конфігурація та збірка ядра - справа, посильну лише гуру. Звичайно, це не так і я розповім, чому. Конфиг ядра не потрібно створювати з нуля, в Linux є готовий дефолтний конфіг і вся додаткова настройка зводиться до включення потрібних драйверів на основні компоненти системи і включенню підтримки необхідних файлових систем. За бажанням можна прибрати підтримку не потрібних драйверів, але ця умова зовсім не обов'язково і навіть не бажано.

Найчастіша проблема, які можуть спіткати людей, вперше конфігурують своє нове ядро ​​- питання, які ж саме драйвера потрібно включити, щоб ядро ​​запрацювало на вашому комп'ютері? Але в більшості випадків це все легко вирішується і вистачить лише назви чіпа материнської плати. А якщо ви не знаєте і цього, на допомогу прийде утиліта lspci з набору pciutils. У деяких людей, правда, виникають яких важко проблеми в зв'язку з недостатньою підтримкою Linux їх обладнання, але це буває лише у користувачів екзотичного заліза.

Друга проблема проявляється вже після складання ядра і перезавантаження комп'ютера, і вона може погасити прагнення до вивчення у багатьох. Як ви вже зрозуміли, вона полягає в тому, що комп'ютер не включається. Точніше, комп'ютер то включається, але ось завантаження системи переривається на kernel panic. І я з упевненістю можу сказати, що в більшості випадків це відбувається не через те, що користувач не включив потрібні модулі, а через те, що користувач їх відключив, вважаючи, що вони ядру не потрібні. Саме з цього я і сказав, що "тюнінг" ядра і відключення зайвих опцій в прагненні до досконалості, можуть привести до повної непрацездатності ядра. Для цього є золоте правило - якщо не знаєте, що це і для чого, не чіпайте це, залиште все, як є.

Ну і, нарешті, деякі вважають, що вручну збирати ядро ​​- довго і виснажливо. Звичайно, це не так. Створений один раз конфиг, може застосовуватися до нових ядер за допомогою команди make oldconfig. А компіляція ядра хоч і триває довго на слабких машинах, але не вимагає ніякого втручання людини, з цього ви можете в цей час пити чай і читати новини.

Переходимо до практики. Ручне складання ядра Linux

Перш за все, я хотів описати процес зміни і збірки ядра Linux на прикладі Gentoo, але потім вирішив, що буде краще, якщо збирати ядро я буду повністю вручну, скачавши архів прямо з http://kernel.org. Отже, приступимо.

йдемо на http://kernel.org і дивимося - остання версія ядра - 2.6.36. Качаємо його і розпаковуємо. Деякі програми будуть шукати конфиг ядра в / usr / src / linux, з цього розпакувати архів потрібно в / usr / src і зробити символічну посилання:

# Cd / usr / src / # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2 # tar xavf linux-2.6.36.tar.bz2 # ln -snv linux-2.6.36 linux Тепер переходимо до конфігурації. Це самий трудомісткий процес у збірці ядра: # make menuconfig Ви потрапите в утиліту конфігурації ядра Linux. Зайдіть в розділ "Processor type and features" і знайдіть рядок "Processor family" (див. Скріншот).

Вам потрібно вибрати тип свого процесора. Якщо ви не впевнені з вибором або не вважаєте в цьому списку свій процесор, ви можете вибрати тип 586 або 486. Але перед цим, скористайтеся утилітою lspci з пакета pciutils. Запустіть її від користувача root і знайдіть в її виведення інформацію про процесор. На моєму комп'ютері lspci виводить текст, що містить такий рядок:

00: 18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64 / Opteron] Значить, значення опції "Processor family" в моєму випадку треба вказати в "Opteron / Athlon64 / Hammer / K8".

Тепер, не виходячи з розділу "Processor type and features" знайдіть опцію "High Memory Support" (див. Скріншот)


Її значення за замовчуванням встановлено в 4GB. І це найкращий варіант, якщо у вас не більше 4GB оперативної пам'яті. Справа в тому, що 32-бітові машини можуть працювати не більше ніж з 4GB (2 ^ 32) фізичної пам'яті. При включенні підтримки пам'яті більше 4GB, ви активуєте роботу з віртуальною пам'яттю. І не турбуйтеся, якщо побачите, що пам'яті у вас всього ніби 3.5GB. Але чому на 32-бітних машинах власники 4GB планки RAM бачать лише 3.5GB доступної пам'яті? Відповідь проста: ядро Linux розділяє фізичну пам'ять на дві частини, одна з них доступна для користувача додатків, а невелика частина зарезервована ядром. Утиліти, що показують обсяг RAM, не мають доступу до зарезервованої ядром пам'яті, завдяки чому ви і бачите ці горезвісні 3.5GB.

Якщо RAM у вас більше 4GB, ви можете включити підтримку до 64GB пам'яті. В цьому випадку активується PAE (Physical Address Extension), яка дозволяє x86 процесорів працювати з більше ніж 4GB RAM. Не варто включати це, якщо у вас не більше 4GB RAM, тому що PAE накладає деякі обмеження і, попросту, працює трохи повільніше.

Тепер переходимо до розділу "Device Drivers" - "Serial ATA and Parallel ATA drivers".

У цьому розділі вам треба включити драйвера для роботи з вашим жорстким диском. У нових версіях Linux навіть старі IDE диски будуть визначатися як / dev / sd XX. У визначенні потрібного драйвера знову допоможе утиліта lspci. На моєму комп'ютері вона пише ось що: 00: 0d.0 IDE interface: nVidia Corporation MCP51 IDE (rev a1) 00: 0e.0 IDE interface: nVidia Corporation MCP51 Serial ATA Controller (rev a1)

У списку драйверів є два схожих варіанту - "NVIDIA SATA support" і "AMD / NVidia PATA support". Який з них вибрати? Нічого поганого не станеться, якщо ви дозволите відразу обидва. А якщо хочеться точності, то зайдіть на цю сторінку:. Тепер дивимося - lspci говорить "IDE interface:". Шукаємо на цій сторінці "IDE interface" і переходимо по посиланню. У великому списку шукаємо "MCP51". В даному випадку нам потрібен "nVidia / MCP51 IDE". Варіантів буде кілька, дивимося будь і бачимо, що працює він з модулем "pata_amd" (див. Скріншот).

З цього включаємо підтримку "AMD / Nvidia PATA support" і йдемо далі. Так, до речі, тому що я не використовую initrd, драйвер для роботи з жорстким диском потрібно включити в ядро, тобто (*), А не (M).

Тепер переходимо в розділ "Graphics support" (див. Скріншот).

Тут все залежить від того, які драйвера ви збираєтеся використовувати для вашої відеокарти. Власники Nvidia і ATI можуть вибирати між відкритими і пропрієтарними драйверами. Бо'льшую продуктивність забезпечують пропрієтарні драйвера, тобто ті, які ви можете завантажити з сайту виробника відеокарти. Якщо ви будете використовувати пропрієтарні драйвера, то вимкніть опцію "Direct Rendering Manager (Xfree86 4.1.0 and higher DRI support)", тому що такі драйвера будуть встановлювати свої власні модулі в ядро. В інших випадках, швидше за все, нічого міняти в цьому розділі не знадобиться.

Переходимо в розділ "Sound card support" - "Advanced Linux Sound Architecture". У моєму випадку у мене інтегрована звукова карта, а lspci повідомляє:

00: 05.0 Audio device: nVidia Corporation MCP61 High Definition Audio (rev a2)

З цього переходимо до підрозділу "PCI sound devices". У виборі драйвера для звукової карти в Linux допоможе ось цей сайт:. Знаходимо в списку nVidia і переходимо по посиланню. У наступному списку тільки два варіанти - AC97 і HDA. Не важко здогадатися, що HDA розшифровується, як High Definition Audio, з цього натискаємо по "Details" і бачимо:

The module options for snd-hda-intel description: Intel HDA driver

Повертаємося до утиліти конфігурації ядра, знаходимо в списку драйверів на звукові карти "Intel HD Audio", переходимо туди і виявляємо великий список. Скажу чесно - я не знаю, як точно визначити, який саме варіант зі списку потрібний. На моєму залозі звукова карта працює тільки з Realtek HD-audio. З NVIDIA HDMI HD-audio і INTEL HDMI HD-audio - ні в яку. Думаю, що можна залишити підтримку їх усіх, а система сама підбере потрібний.

Переходимо до підтримки мережевої карти в розділі "Device Drivers - Network device support". Наша незамінна lspci каже:

00: 14.0 Bridge: nVidia Corporation MCP51 Ethernet Controller (rev a1)

Знову йдемо на, натискаємо по "Ethernet controller", шукаємо "MCP51", виявляємо, що варіантів багато, дивимося кілька з них і бачимо, що всі вони працюють з модулем "forcedeth" (див. Скріншот).

Отже, ім'я модуля дізналися, залишилося дізнатися, де його шукати. Детальну інформацію про мережевої карти покаже маленька, але корисна, утилитка ethtool. Запускати її можна, вказавши єдиний параметр - ім'я мережевого інтерфейсу. Я не буду приводити сюди її висновок, просто скажу, що там є такий рядок:

Speed: 100Mb / s

От і добре. Вибираємо в розділі "Network device support" підрозділ "Ethernet (10 or 100Mbit)" і переходимо в нього. "Forcedeth" в списку, звичайно, немає, тому що це ім'я самого модуля. Але, я знаю, що мій чіп - nVidia nForce, тому вибираємо "nForce Ethernet support" і натискаємо "Help". У верху буде рядок "CONFIG_FORCEDETH", а значить - це те, що нам потрібно. Тепер можна перейти на рівень вище і зняти галки з "Ethernet (1000 Mbit)" і "Ethernet (10000 Mbit)"

З розділом "Device drivers" покінчено. Залишилося всього нічого - включити підтримку потрібних файлових систем. Переходимо в розділ "File systems".

Просто включите в ядро ​​всі необхідні файлові системи. Пам'ятайте, що тому initrd не використовується, то драйвер файлової системи кореневого розділу повинен бути вкомпілен в ядро ((*), а не (M)).

Якщо вам потрібно мати доступ до даних на NTFS розділах, включіть опцію "FUSE (Filesystem in Userspace) support". Пізніше, для можливості монтування NTFS розділів, вам потрібно буде встановити пакет ntfs3g. Так само можете включити опцію "CD-ROM / DVD Filesystems" - "UDF file system support".

Можна вважати, що конфігурацію ядра ми майже закінчили. Залишилося лише злегка полегшити ядро, перейшовши в розділ "Kernel hacking" і відключивши "Kernel debugging", "Compile the kernel with frame pointers" і "Remote debugging over FireWire early on boot"

От і все. Конфігурація ядра Linux завершена і можна приступати до складання. Вийдіть з утиліти конфігурації зі збереженням конфіга і виконайте наступні команди:

# Make && make modules_install

Компіляція ядра займе якийсь час. Після завершення збирання ядро буде лежати за адресою arch / x86 / boot / bzImage. Все, що залишилося зробити - скопіювати ядро ​​в каталог / boot і внести зміни в конфігураційний файл завантажувача GRUB.

# Cp arch / x86 / boot / bzImage /boot/kernel-2.6.36 Ось найпростіший конфиг GRUB: default 0 timeout 15 title My Linux 2.6.36 kernel /boot/kernel-2.6.36 root = / dev / sda2 / dev / sda2 ви повинні замінити на ім'я вашого кореневого розділу. (Не «/ boot", а "/").
Тепер можна перезавантажуватися з новим ядром! :)

Можливі проблеми.

Якщо ви не вкажіть драйвер на жорсткий диск або неправильно вкажіть "root =", ядро не зможе примонтировать кореневий розділ і біля повідомлення Kernel panic ви зможете знайти щось подібне:

Please append a correct "root =" boot option: here are the available partitions:

Після цього рядка буде перерахований список виявлених накопичувачів. Якщо вашого жорсткого диска серед них немає, то вам треба пересобрать ядро, включивши відсутні драйвера на жорсткий диск. Якщо ж ваш жорсткий диск в цьому списку є, значить ви не правильно вказали значення "root =".

Так само часто люди забувають включити підтримку файлової системи кореневого розділу в ядро ​​і це так само є причиною непрацездатності ядра.


Уточнення.

Я не використовував підтримку initrd в цій статті. І, швидше за все, вам вона теж не знадобиться. Якщо ви включите в ядро ​​необхідні драйвера на кореневу файлову систему і жорсткий диск, то ядро ​​цілком обійдеться без initrd.

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


Як жити далі?

Пізніше, якщо ви захочете встановити свіжу версію ядра, вам не доведеться конфігурувати ядро Linux заново. Вам потрібно буде лише скопіювати файл ".config" з каталогу з кодами старого ядра в нове і виконати команду make oldconfig. Вона "піджене" старий конфиг під нове ядро ​​і, якщо в новій версії з'явилися нові опції, вона запитає, включати їх чи ні. У більшості випадків ви можете залишати все по-замовчуванню. Кількість питань, на які доведеться відповідати, залежить від різниці між версіями ядер. Після цього, нове ядро ​​можна буде просто зібрати і скопіювати в потрібне місце.

Навіщо це взагалі треба?

Може виникнути закономірне питання "якого біса це взагалі треба?". Звичайно, ви можете встановити вже зібране ядро за допомогою пакетного менеджера вашого дистрибутива Linux і воно буде відмінно працювати, хоча і буде злегка "жирніше" сконфигурированного вручну. Відповісти я можу тільки за себе. Я роблю це вручну, тому що на мій погляд, ядро - основний компонент будь-якої Linux-системи і розуміння його, і вміння його збирати є такими ж необхідними основами, як знання правил дорожнього руху для водія автомобіля. Але навіть якщо ви вважаєте по-іншому, цей досвід ручної збірки ядра допоможе вам краще зрозуміти свою систему, а значить, краще вміти нею управляти, підтримувати в працездатному вигляді і всяке-всяке;)


Дякую за увагу!

Можливо, ці матеріали Вас зацікавлять:
Рекомендувати цю сторінку:
Коментарі: (38)






































коментувати:
Як жити далі?
Навіщо це взагалі треба?
Найчастіша проблема, які можуть спіткати людей, вперше конфігурують своє нове ядро ​​- питання, які ж саме драйвера потрібно включити, щоб ядро ​​запрацювало на вашому комп'ютері?
GB доступної пам'яті?
Який з них вибрати?
Як жити далі?
Навіщо це взагалі треба?
Може виникнути закономірне питання "якого біса це взагалі треба?
IRC (Internet Relay Chat)