Розділ 7. Ядро Лінукс в Дебіен

Дебіен має власний спосіб перекомпіляції ядра, котрий описаний у параграфі 2.7.

Перекомпіляція ядра

Якщо ви компілюєте найсвіжіше ядро, вам можуть знадобитись gcc, binutils, та modutils з нестабільної збірки. Гляньте /usr/share/doc/kernel-package/README.gz, особливо його верхню частину, за офіційною інформацією.

Що б там не казали, а компіляція ядра - це сладна тема, що може ввести в оману навіть досвідчених розробників:

Маной Срівастава (Manoj Srivastava) пише:

--initrd вимагає специфічної для Дебіен латки cramfs.

Герберт Ксу (Herbert Xu) пише:

Зовсім ні, все що вам потрібно для того, щоб використовувати файлову систему відмінну від CRAMFS - це задати MKIMAGE у файлі /etc/mkinitrd/mkinitrd.conf.

Будьте уважні і завжди звіряйтесь з /usr/share/doc/kernel-package/README.gz від Маноя та Кента. Переконайтесь, що ви використовуєте останню версію пакунка kernel-package якщо ви хочете скомпілювати останню версію ядра.

Для ядер, скомпільованих лише для однієї машини, initrd не потрібен. Я його використовую, оскільки я хочу, щоб моє ядро було таким самим, як те, котре пропонують пакунки kernel-image. Якщо ви використовуєте initrd, перечитайте mkinitrd(8) та mkinitrd.conf(5) і гляньте на http://bugs.debian.org/149236.

Стандартний спосіб для Дебіен

Перегляньте повідомлення про вади для kernel-package, gcc, binutils, та modutils. Якщо потрібно, використовуйте їх найсвіжіші версії.

Компіляція власного ядра з джерельних кодів під Дебіен вимагає особливої обережності. Користуйтесь --append_to_version з make-kpkg для компоновки кількох образів ядер.

# apt-get install debhelper modutils kernel-package libncurses5-dev
# apt-get install kernel-source-2.4.18   # візьміть найсвіжішу версію
# apt-get install fakeroot
# vi /etc/kernel-pkg.conf                # введіть ім'я та електронну адресу
$ cd /usr/src                            # каталог джерельних кодів
$ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2
$ cd kernel-source-2.4.18                # підставте вашу версію
$ cp /boot/config-2.4.18-386 .config     # зробити поточну конфігурацію типовою
$ make menuconfig                        # налаштуйте як вам подобається
$ make-kpkg clean                        # обов'язково! (man make-kpkg)
$ fakeroot make-kpkg --append_to_version -486 --initrd \
        --revision=rev.01 kernel_image \
        modules_image # modules_image для pcmcia-cs* та ін.
$ cd ..
# dpkg -i kernel-image*.deb pcmcia-cs*.deb # встановити; make-kpkg образ_ядра насправді 
                                #виконує make oldconfig та make dep.
                                #Не вводьте --initrd якшо ви не користуєтесь initrd.

Якщо хтось не хоче використовувати модулі з pcmcia-cs чи pcmcia з джерельних кодів ядра, він повинен вибрати "General setup" —> "PCMCIA/CardBus support" ("Загальні налаштування" -> "Підтримка PCMCIA/CardBus") у діалозі menuconfig і забрати прапорець з пункту < > PCMCIA/CardBus support.

На однопроцесорній машині задайте значення CONCURRENCY_LEVEL відповідно до kernel-pkg.conf(5).

Класичний спосіб

Звантажте найсвіжіші джерельні коди з:

Лінукс: http://www.kernel.org/
pcmcia-cs: http://pcmcia-cs.sourceforge.net/
або еквівалентні для Дебіен і зробіть наступне:

# cd /usr/src
# tar xfvz linux-whatever.tar.gz
# rm -rf linux
# ln -s linux-whatever linux
# tar xfvz pcmcia-cs-whatever.tar.gz
# ln -s pcmcia-cs-whatever pcmcia
# cd linux
# make menuconfig
... наконфігуруйте всякого ...
# make dep
# make bzImage
... відконфігуруйте lilo / grub ...
... перемістіть /usr/src/linux/arch/i386/boot/bzImage в каталог boot ...
... /sbin/lilo або що там роблять для grub
# make modules; make modules_install
# cd ../pcmcia
# make config
# make all
# make install
... додайте назви потрібних модулів до /etc/modules
# shutdown -r now
... перезавантажтесь у нове ядро ...

Заголовки ядра

Більшість звичайних програм не потребують заголовків ядра і в такому випадку їх (заголовки) можна просто викинути; з іншого боку якщо вам потрібно перекомпілювати якусь програму, вона потребуватиме заголовків, з котрими була скомпільована glibc, і котрі знаходяться в /usr/include/linux та /usr/include/asm в системі Дебіен.

Отож, не робіть симлінків на каталоги в /usr/src/linux з /usr/include/linux і /usr/include/asm, як це рекомендують деякі застарілі документи.

Якщо вам справді потрібні найсвіжіші заголовки ядра для якихось специфічних програм, відредагуйте їхні файли Makefile таким чином, щоб вони включали в себе шляхи до каталогів /каталог/з/свіжим/ядром/include/linux і /каталог/з/свіжим/ядром/include/asm.

Модульне ядро версій 2.4

На мою думку цей параграф перекладати недоцільно.