Збірка ядра в ubuntu
Збірка ядра в Ubuntu. Покрокова інструкція.
Наявна інформація про збірку ядра сильно різниться, тому будемо описувати збірку ядра саме для Ubuntu. Постараємося. щоб в командах, написаних в цій статті, не було помилок. При описі процесу компіляції, не зупинимося тільки на отриманні ядра. Отримати працездатне ядро - цього мало. Для власників карт nVidia, тут буде дано опис, як отримати систему з працювати графікою на новому ядрі. Причому, графіка буде працювати як в старому ядрі, так і в новому.
1. Установка початкових кодів ядра
Спочатку нам потрібні будуть вихідні ядра. Для Ubuntu 7.04 в репозитарії вони вже є, потрібно знайти пакет linux-source-тратата (в нашому випадку це буде linux-source-2.6.20), і встановити його (все це можна зробити через Synaptic). Після установки даного пакту, в каталозі / usr / src з'явиться файл з ім'ям linux-source-2-6-20.tar.bz2.
Робимо під sudo команду
chmod 777 / usr / src
Заходимо звичайним користувачем в каталог / usr / src і розпаковуємо цей файл
tar -jxvf linux-source-2-6-20.tar.bz2
З'явиться каталог з вихідними кодами / usr / src / linux-source-2-6-20. Архівний файл видаляємо (потрібні будуть права рута).
2. Установка супровідних пакетів
Для складання знадобляться ще пакети kernel-package. libncurses5-dev. fakeroot. Встановлюємо їх через Synaptic. Само собою, в системі також повинен бути встановлений компілятор gcc і dev -пакети для системних бібліотек, такі наприклад як libc6-dev.
3. Створення файлу конфігурації ядра
Тепер нам потрібен конфиг ядра, з яким збиралося ядро для Убунту. Заходимо в каталог / boot. і бачимо там файл типу config-2.6.20-15-generic. Він нам і потрібен. Копіюємо його в каталог з вихідними кодами / usr / src / linux-source-2-6-20 та перейменовуємо його в .config. Зверніть увагу, що ім'я файлу починається з точки, це не помилка.
Тепер, перебуваючи в каталозі / usr / src / linux-source-2-6-20. даємо під звичайним користувачем команду
це запуститься текстовий інтерфейс настройки ядра. Можна так само запустити настройку в графічному режимі
В обох випадках відкриється інтерфейсік з галочками, через який конфігуруємо ядро. Ніби як за замовчуванням якраз і відкривається файл .config. який в даний момент і містить стандартний конфіг ядра Убунту.
В кінці конфігурації вибираємо пункт "Save тратата кофігурація", вказуємо ім'я файлу, відмінного від .config. наприклад .config_my_01. Виходимо.
Тепер перейменовуємо .config в .config_ubuntu. І у вас виходить два файли - .config_ubuntu і .config_my_01. Ви можете подивитися відмінності між стандартною і вашої конфігурацією, наприклад так
diff .config .config_my_01
Тепер копіюємо вашу конфігурацію .config_my_01 під ім'ям .config. Тобто у вас вийде 3 конфиг файлу. При компіляції буде використовуватися файл .config. Файли .config_ubuntu і .config_my_01 нам допоможуть в майбутньому для нової компіляції. Це на той випадок, якщо нове ядро виявиться непрацездатним або глючний.
Перед компіляцією обов'язково перевіряємо наявність вільного простору (на тому розділі, де лежать вихідні). Добре б міть 4-5Gb (!) В запасі. При компіляції розмір каталогу з кодами може розростися до 3,5Gb. Перевірити вільний простір можна командою
Тепер, перебуваючи під звичайним користувачем в каталозі / usr / src / linux-source-2-6-20. даємо команду, яка видалить в исходниках скомпільовані кимось об'ектнікі, які залишилися від попередньої компіляції і перебували в архіві.
Потім через sudo отримуємо права рута і запускаємо компіляцію.
make-kpkg --initrd --revision = mybuild.1.0 kernel_image kernel_headers
Де замість "mybuild.1.0" пишіть що вам потрібно. Допустимі латинські букви, цифри, точки. Символи підкреслення і тире не допускаються.
Взагалі-то, по-хорошому, компіляцію ядра треба робити під правами звичайного користувача. Формально, створення бінарники ядра нічим не відрізняється від компіляції бінарники будь-який інший програми. Але ми робимо компіляцію не в ручному режимі (через команди типу make bzImage modules), а в напівавтоматичному (через make-kpkg). А ця програма, після проходження компіляції, буде запускати з-під себе програму dpkg-deb щоб отримати deb-пакет з ядром. Ось в цей момент і будуть потрібні права рута.
Тепер давайте розберемося, що ж робить вищенаведена команда. Вона запускає компіляцію ядра, і потім створює deb-пакет з ім'ям linux-image-версія.deb. в якому будуть знаходитися бінарник ядра і модулі ядра (це зробиться завдяки мети kernel_image). А так же буде створений deb-пакет з ім'ям linux-headers-версія.deb. в ньому будуть перебувати заголовки ядра (це зробиться завдяки мети kernel_headers). Отримані пакети будуть лежати в каталозі / usr / src.
Подивитися, які файли знаходяться в цих deb-пакет, можна в konqueror (в Kubuntu), клацнувши правою клавішею по на інтересуемом deb-файл і вибравши "Kubuntu package menu" -> "Show package info". Інформація буде формуватися досить повільно, близько хвилини, так як пакети великі.
Тепер встановлюємо ядро. Перебуваючи з правами суперкористувача в каталозі / usr / src. даємо команду
dpkg -i linux-image-версія.deb
після якої ваше ядро (файл vmlinuz-2.6.20.3-ubuntu1) буде поміщено в каталог / boot (всі попередні ядра теж нікуди не подінуться, залишаться на своїх місцях), а в каталозі / lib / modules. поруч з каталогом з модулями звичайного ядра (в Ubuntu 7.04 називається /lib/modules/2.6.20-15-generic) з'явиться каталог з модулями вашого нового ядра (в нашому випадку це буде /lib/modules/2.6.20.3-ubuntu1). Нове ядро буде автоматично прописано в /boot/grub/menu.lst.
Впринципі, вже можна перевантажитися, і в екрані завантаження Grub з'явиться новий пункт з вашим ядром. Нове ядро з'явиться на початку списку. Але поки не поспішаємо, а дамо ще команду
dpkg -i linux-headers-версія.deb
яка встановить хедери ядра в каталог / usr / src / linux-headers-версія. в нашому випадку це буде каталог /usr/src/linux-headers-2.6.20.3-ubuntu1. Ці хедери нам знадобляться, наприклад, для перекомпіляції драйверів nVidia для нового ядра.
Але для користувачів карт nVidia. які користувалися драйвера, встановленими через "Менеджер пропрієтарних драйверів" або пользовали драйвера з пакету nvidia-glx (або там nvidia-glx-new), даю 99% гарантії, що вам не пощастить! І графіки під новим ядром ви не побачите!
7. Установка драйверів nVidia з сайту nvidia.com
Щоб отримати працюють ікси під новим ядром, перше що приходить в голову - це встановити під новим ядром драйвера з сайту nvidia.com. І це неправильне рішення! Як тільки встановляться дрова під новим ядром, графіка в вашому старому перевіреному ядрі працювати перестане (через те, що файли драйверів nVidia жорстко зав'язані на версію і назва ядра). А так як працездатність нового ядра ви ще толком не перевірили, ви можете отримати систему "з рідним ядром, але без графіки" і "глючний ядром, зате з графікою". Думаю, нікого така ситуація не влаштує.
У популярній статті "Ядерна фізика для домогосподарок", є рекомендації, як отримати графіку під обома ядрами. Пропонується наступний шлях - мати напоготові інсталяційний пакет дров з nvidia.com, і при бажанні завантажитися під конкретним ядром, треба спочатку завантажитися в командному режимі цього ядра, встановити дрова, і потім завантажитися вже нормально. Думаю, такий підхід теж мало кого потішить.
Ми зробимо так, що графіка буде працювати і в старому ядрі, і в новому ядрі, і для цього не потрібно буде кожен раз запускати установку (компіляцію) дров. Для цього нам потрібно буде виконати тільки одну умову - щоб графічні дрова під різними ядрами були однією версією.
Короткий план дій - ставимо дрова з сайту nvidia.com для стандартного ядра в повному обсязі. Переконуємося що вони працюють. Потім з цього ж пакета ставимо дрова для саморобного ядра, але в режимі "тільки графічний модуль".
8. Встановлення драйверів nVidia під звичайне ядро
Все, що нижче написано, підходить і для тих, хто просто вирішив встановити нові дрова nVidia під стандартне ядро!
Качаємо з сайту nvidia.com дрова під Линух. Я собі качав дрова версії 96.43. Файл називається NVIDIA-Linux-x86-96.43.01-pkg1.run. Але ви можете спробувати інші стабільні релізи, які присутні на сайті nVidia.
Для установки, створюємо в каталозі / usr / src підкаталог з ім'ям nvidia. копіюємо туди цей файл. Перебуваючи в цьому підкаталозі, даємо файлу дозвіл на виконання
chmod 777 NVIDIA-Linux-x86-96.43.01-pkg1.run
Все, на цьому робота в графічному інтерфейсі на час закінчується. Перед виходом з графрежіма, запустіть Synaptic. і переконайтеся, що у вас стоїть
- aptitude. Це інтерфейсна оболонка над пакетним менеджером для text-mode.
- linux-headers-2.6.20-15. Це заголовки (хедери) вашого стандартного ядра.
- linux-headers-2.6.20-15-generic. Точно не скажу на кой хрен цей пакет, але нехай буде.
Хороший рада - мати роздрукований текст даної статті на папірці, або зберегти його в текстовий файл, який можна подивитися з текстового режиму.
Перевантажуємося в консольний режим звичайного ядра (в Grub є такий пункт). В Ubuntu ви автоматично отримаєте права рута, навіть пароль вводити непотрібно. Тепер треба видалити дрова nVidia. які є в системі. Якщо ви встановлювали дрова через "Менеджер пропрієтарних драйверів" (або шляхом установки пакета nvidia-glx або nvidia-glx-new), то пакет nvidia-glx / nvidia-glx-new потрібно видалити з системи, причому не просто деінсталювати, а деінсталювати в режимі purge.
Я досить тупий користувач, і замість того, щоб розбиратися з опціями dpkg. в консолі користуюся програмою aptitude. наберіть команду
і ви потрапите в оболонку, оталенно нагадує Synaptic. Вгорі буде підказка по клавішах. Щоб потрапити в меню, натискаємо Ctrl + t (незручно, але що робити). В меню
стрілками і клавішею Enter знаходимо і вибираємо пункт "Find". Пишемо рядок пошуку - nvidia-glx. Засвітка потрапить на потрібний пакет. Знову викликаємо меню, і знаходимо там пункт "Purge". Натискаємо його, і пакет, на якому стоїть засвічення, буде позначений для повного деінсталлірованія всіх його файлів із системи (сам пакет залишиться в кеші, його можна буде заново встановити при необхідності). Внизу з'явиться підказка - "e - Examine. - remove". Натискаємо "e" - і бачимо які пакети будуть видалені. Якщо від nvidia-glx будуть залежати пакети, то вони теж будуть деінсталювати. Зазвичай це пакет nvidia-glx-dev. Нічого страшного, що він піде теж.
Тепер натискаємо "!" (Для особливо обдарованих - Shift + 1), тим самим ми погоджуємося з нашими змінами. Потім натискаємо "q" (вихід). При виході програма видалить відмічені нами пакети.
Тепер такий момент. Ми зараз знаходимося на рівні init 1 (тільки консоль, купа сервісів не запущена). Якщо запустити інсталяцію драйвера nVidia. то вона буде лаятися, що можливо у вас не запущений сервіс devfs. який зазвичай запускається на рівні 3. Тому даємо команду
і система довантаження потрібні сервісу, а заодно вийде з розрахованого на одного користувача режиму (з'явиться кілька консолей, які можна перемикати клавішами ALT + F1. ALT + F6). Для подальшої роботи нам якраз знадобиться дві консолі. До речі, система спробує завантажити графіком, їй це не вдасться, тому що драйвер ми тільки що видалили. І вона залишиться в 7-й консолі з порожнім екраном. Чи не панікуємо, натискаємо ALT + F1. бачимо першу консоль, там вводимо логін, пароль так само як і в графічному вході (тільки після логіна і пароля натискаємо Enter а не TAB).
Залягання, викликаємо mc під суперкористувачем
Заходимо в каталог / usr / src / nvidia і починаємо установку дров командою
Опція "-e" дозволить нам бачити звіт про дії і побачити конфліктуючі файли. Починаємо установку. Погоджуємося з ліцензією. Відмовляємося від докачки початкових кодів з ftp нвідіі. Говоримо OK що будуть створюватися модулі нами. На питання введення шляхів просто натискаємо Enter.
Зрештою, перед самою установкою буде показаний список файлів які будуть встановлені. А на початку цього списку (якщо будуть знайдені) здадуться конфліктуючі файли. Буде написано "Backup file." - ось це вони і є. У моєму випадку це були файли
Як тільки побачите такий список, логінтесь в другу консоль (перехід - ALT + F2), запускайте
і методично переносите ці конфліктуючі файли куди-нитка в окремий каталог в домашній директорії, звіряючись зі списком в першій консолі. Чому переносити а не видаляти? Справа в тому, що імена файлів в Линух "человеконечітаемие", і легко можна помилитися і видалити не той файл.
Після того, як видалили всі файли, призначені для Backup. повертайтеся в першу консоль. Переривайте установку (Ctrl + c) і запускайте її заново. Якщо "Backup file." Більше не буде, то завершуйте установку. Все повинно пройти гладко. Можете погодитися з виправленням xorg.conf. всерівно содасться резервний файл.
Тепер увага! Найголовніше, в народних обранців перевантажитися! А зайти в файл / etc / default / linux-restricted-modules-common. і додати в опцію DISABLED_MODULES модулі nv і nvidia_new. У мене це зроблено так
Якщо цього не зробити, то при наступному завантаженні файл (який ви видалили!) /lib/modules/2.6.20-15-generic/volatile/nvidia.ko буде автоматично відновлено з пакета nvidia-restricted-modules. А ваш файл, який ви скомпілювали при установці драйверів, називається /lib/modules/2.6.20-15-generic/kernel/drivers/video/nvidia.ko. Так ось, при запуску іксів буде знайдений перший файл. А до вашого файлу справа не дійде. І ікси не зможуть завантажитися.
Перевантажуємося в стандартні ядро в повний режим. Якщо все зробили правильно, ікси запустяться. Радійте, як мінімум у вас залишилася працездатна система.
9. Установка драйверів nVidia під саморобний ядро
Тепер залишився останній крок - змусити працювати графіку в новому ядрі. Тут все досить просто. Завантажуємося в консольному режимі саморобного ядра. даємо команду
логіном, і в першій консолі запускаємо