Home> Компіляція ядра - Ubuntu way
Перш ніж приступити, спробуємо спочатку відповісти на питання: А навіщо власне потрібна Перезбірка ядра? Більшість сучасних користувачів Linux рідко замислюються про те, яке у них встановлено ядро, які функції в ньому закладені, чого там бракує, і тим більше про те, що його можна (і потрібно) оновлювати або збирати заново під конкретні потреби.
Доступність і безоплатність дистрибутивів дозволяють будь-якому вибрати собі той, на якому буде працювати весь доступний користувачеві обладнання, не замислюючись про причини чому ж воно не працює і не вникаючи в проблему. А часто потрібна всього лише установка єдиного пакета містить необхідний модуль ядра. Виробники дистрибутивів збирають свої ядра так сказати по максимуму, намагаючись охопити якомога ширший спектр обладнання та завдань. Основні компоненти включені в ядро, яке встановлюється разом з системою, а то що вважається необов'язковим виноситься в окремі пакети.
Щоб знайти пакети, які мають відношення до ядра, використовуйте репозитарій свого дистрибутива, наприклад в Ubuntu і інших системах використовують менеджер APT, щоб отримати весь список досить ввести:
Другою причиною пересборки ядра є його оптимізація і зменшення його розміру. Користувач або адміністратор може просто захоче зібрати систему, зібрану під свою марку процесора. Або модифікувати системні параметри, наприклад включити підтримку великої кількості пам'яті, дискових квот, підтримку файлових систем і багато іншого. Ще одна причина це усунення помилки, знайденої в ядрі або одному з драйверів. І нарешті - проба нових можливостей недоступних в дистрибутиві, а доступних поки тільки у вигляді патча. Так може і просто захочеться спробувати свої сили в збірці нового ядра.
Компіляція ядра із збіркою пакета в Debian / Ubuntu
Встановлене звичайним чином ядро (тобто стандартна компіляція) не буде видно менеджеру пакетів, в принципі це можливо і не потрібно. Але видалити ядро встановлене за допомогою менеджера пакетів простіше, оновлення ядра з репозитария також пройде без сучка і задирки. Тому краще спочатку зібрати пакет, який встановити прийнятим в дистрибутиві способом. У більшості дистрибутивів така можливість природно передбачена. В Debian / Ubuntu це просто. Спочатку оновлюємо базу даних додатків, щоб завантажити найостанніші доступні версії пакетів.
Тепер встановимо всі необхідні для зборки пакети.
$ Sudo apt-get install kernel-package libncurses5-dev fakeroot wget
Пакет kernel - package містить вихідні тексти ядра, які будуть розпаковані в / usr / src. Замість нього можна використовувати і будь-яке інше ядро з патчами.
Якщо немає make, gcc і іншого, то і:
$ Sudo apt-get install build-essential
Для спрощення беремо настройки поточного ядра, який будемо використовувати як базовий, і копіюємо поточну конфігурацію в / usr / src / linux.
$ Sudo cp / boot / config-`uname -r` /usr/src/linux/.config
Далі при необхідності конфігуруємо його ввівши одну з команд: make config. make menuconfig. make xconfig. make gconfig або make oldconfig.
Для компіляцію і збірки deb-пакет вводимо наступну команду.
$ Sudo make-kpkg clean fakeroot make-kpkg -initrd -append-to-version = -custom-kernel kernel_image kernel_headers
Рядок -append-to-version дозволяє додати свою нумерацію або назва до версії ядра, яке буде виводитися командою uname. Тут можна вписати будь-який рядок, але вона обов'язково повинна починатися з тире.
В Debian. Ubuntu і деяких інших дистрибутивах прийнятий формат пакета з розширенням deb. який містить, як правило, скомпільовану програму і дозволяє легко її встановити, видалити або оновити.
Через деякий час в каталозі / usr / src з'являться два deb пакета. Пакет з ім'ям linux-image-2.6.23.deb буде містити скомпільований ядро, а linux-headers-2.6.23.deb - заголовки, які можуть знадобитися при самостійній компіляцію деяких інших додатків або модулів. Цифра в вашому випадку буде швидше за все інша. Встановлюються вони за допомогою dpkg. У нашому прикладі команда буде виглядати так.
Ще одна зручність такого способу. Таке ядро тепер можна швидко і без проблем встановити на інші комп'ютери за умови, що при конфігурації було враховано все можливе обладнання. Якщо подивитися зараз в файл /boot/grub/menu.lst. то можна виявити в списку нове ядро. Ще один плюс, не потрібно возитися з налаштуванням завантажувача. Linux forever!
«Тепер встановимо всі необхідні для зборки пакети.»
Я б ще дописав make і gcc
«Рядок -append-to-version дозволяє додати свою нумерацію або назва до версії ядра, яке буде виводитися командою uname.»
Зовсім не обов'язково додавати append-to-version, досить лише в конфіги ядра в
General setup вказати свою версію в «Local version - append to kernel release», а також включити в ядро параметр «Automatically append version information to the version string»
Я завжди збираю ядро командою make-kpkg -roocmd = fakeroot kernel_image
В принципі, якщо є повне дерево сирців ядра, то хедери не потрібні.
В Ubuntu make, gcc та інше ставиться просто:
$ Sudo apt-get install build-essential
А нічого понад секретного тут і не написано, що роблю те і пишу. Книги для чайників теж цю інфу містять, але їх читають і радіють.
«В Ubuntu make, gcc та інше ставиться просто:"
просто, не просто, а в статті не описано.
2vlas Спасибі, підправив.
apt-get install build-essential їх якраз і ставить.
apt-cache show build-essential | grep depends:
Depends: libc6-dev | libc-dev, gcc (> = 4: 4.1.1), g ++ (> = 4: 4.1.1), make, dpkg-dev (> = 1.13.5)
в ubuntu 7.10:
також треба щоб версія збігалася з параметром Debian revision number в фаеле /etc/kernel-pkg.conf
якщо він не встановлений, то за замовчуванням - debian = $ (version) -10.00.Custom
сооветсвенно, якщо не збігається, то весь процес зупиняється.
спасибі за докладну довідку про налаштування