This Might Be Useful

Сборка нового ядра для Ubuntu Linux

Некоторое время назад у меня наконец-то появилась возможность перейти на Linux. Раньше я всегда использовал Slackware, но тут решил поставить Ubuntu из-за удобства менеджера пакетов. И столкнулся с необходимостью сборки нового ядра. Оказалось, что процесс немного отличается от привычного.

Примечание: предполагается, что все манипуляции выполняются с привилегиями root.

/bin/sh на Ubuntu 6.10 ("Edgy Eft")

В Ubuntu 6.10 /bin/sh по умолчанию является symlink'ом на /bin/dash. Это может вызвать проблемы при сборке ядра из исходных текстов, поэтому стоит сделать /bin/sh ссылкой на /bin/bash.

CODE:
  1. rm -f /bin/sh
  2. ln -s /bin/bash /bin/sh

Установка необходимых пакетов

Для начала обновляем базу даных пакетов:

CODE:
  1. apt-get update

Затем ставим необходимые пакеты:

CODE:
  1. apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Получение исходных текстов ядра

Переходим в /usr/src и скачиваем туда нужное ядро. На момент написания статьи самым новым было 2.6.20.4, поэтому комманды выглядели так:

CODE:
  1. cd /usr/src
  2. wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.4.tar.bz2

Затем распаковываем архив и делаем нужны ссылки:

CODE:
  1. tar xjf linux-2.6.20.4.tar.bz2
  2. ln -s linux-2.6.20.4 linux
  3. cd /usr/src/linux

В случае, если нужно установить какой-либо patch для ядра (предположим, это patch.bz2), выполняем примерно такие манипуляции находясь в папке /usr/src/linux:

CODE:
  1. bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
  2. bzip2 -dc /usr/src/patch.bz2 | patch -p1

Настройка ядра

Разумно будет в качестве основы использовать конфигурацию текущего (работающего) ядра:

CODE:
  1. cp /boot/config-`uname -r` ./.config

Теперь можно приступать к ручной настройке:

CODE:
  1. make menuconfig

Перед тем, как менять параметры ядра нужно зайти в Load an Alternate Configuration File и выбрать .config, который мы получили до этого.
По окончании настройки нужно не забыть сохранить изменения на выходе.

Сборка ядра

Последовательно запускаем две команды:

CODE:
  1. make-kpkg clean
  2. fakeroot make-kpkg --initrd --append-to-version -someCustomText kernel_image kernel_headers

Примечание: вместо someCustomText можно вставить свой текст, который будет добавлен к версии ядра. Единственное, что этот текст не должен содержать пробелов.

Учтите, что сборка ядра - процесс долгий. Придется подождать.

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

По окончании сборки в папке /usr/src должны появится два .deb-файла. В моем случае это были linux-headers-2.6.20.4-ac97hacks_2.6.20.4-ubuntu-ac97-hacks-10.00.Custom_i386.deb и linux-image-2.6.20.4-ac97hacks_2.6.20.4-ubuntu-ac97-hacks-10.00.Custom_i386.deb. Собственно, их и надо установить:

CODE:
  1. dpkg -i linux-image-2.6.20.4-ac97hacks_2.6.20.4-ubuntu-ac97-hacks-10.00.Custom_i386.deb
  2. dpkg -i linux-headers-2.6.20.4-ac97hacks_2.6.20.4-ubuntu-ac97-hacks-10.00.Custom_i386.deb

Теперь проверяем настройки загрузки (/boot/grub/menu.lst). В моем случае там появились такие строки:

CODE:
  1. title           Ubuntu, kernel 2.6.20.4-ac97hacks
  2. root            (hd0,0)
  3. kernel          /boot/vmlinuz-2.6.20.4-ac97hacks root=/dev/hda1 ro quiet splash
  4. initrd          /boot/initrd.img-2.6.20.4-ac97hacks
  5. quiet
  6. savedefault
  7. boot
  8.  
  9. title           Ubuntu, kernel 2.6.20.4-ac97hacks (recovery mode)
  10. root            (hd0,0)
  11. kernel          /boot/vmlinuz-2.6.20.4-ac97hacks root=/dev/hda1 ro single
  12. initrd          /boot/initrd.img-2.6.20.4-ac97hacks
  13. boot

Теперь можно перезагрузиться:

CODE:
  1. shutdown -r 0

И после загрузки проверить версию ядра:

CODE:
  1. uname -r

Эта команда должна вывести что-то вроде 2.6.20.4-ac97hacks.

В случае, если система не загружается с новым ядром, зайдите в меню GRUB (нажав Esc в начале загрузки) и выберите более старое, стабильное ядро.

· Ubuntu Linux: настройка, оптимизация, программы
· Включаем потерянный после обновления ядра wifi
· Включаем звук в Benq S52 (Conexant CX20551, ICH6 Family)
· Linux: загрузка в single-user mode. Чиним систему или восстанавливаем забытый пароль root.
· Включаем Wi-fi, потерянный в Ubuntu 8.10 (iwl3945: Radio disabled by HW RF Kill switch)

- Коментировать
- Trackback

26 Responses to “Сборка нового ядра для Ubuntu Linux”

  1. Trackback by erased.info — Wednesday, April 18, 2007 at 10:24
  2. Pingback by Проблемы со звуком. mpd | librarian@blog:~$ — Tuesday, September 16, 2008 at 13:08
  3. Pingback by Как я оптимизировал систему: Ubuntu 8.04 Hardy | librarian@blog:~$ — Saturday, September 20, 2008 at 11:46
  4. Pingback by links for 2009-08-28 .:: [aka щямукюшт] Ozver.in | Озверин — Saturday, August 29, 2009 at 05:07

  1. NeX1k Says:

    "Пере тем, как менять параметры"
    Опечатка ;-)

  2. Filosoff Says:

    NeX1k @ 06.04.2007, 15:35 #

    Опечатка ;-)

    спасибо, исправил

  3. alkaed Says:

    Спс) содержательная статья.

  4. Тарзаныч Says:

    Ну ОЧЕНЬ хорошая статья, спасибо автору)

  5. mikoto Says:

    Для Ubuntu 8.04.1 тоже пойдёт?

  6. Filosoff Says:

    mikoto @ 08.08.2008, 11:00 #

    Для Ubuntu 8.04.1 тоже пойдёт?

    в принципе должно, why not :)

  7. r1zar Says:

    ой спасибо. самый внятный ман по компиляции своего ядра... над будет занятся

  8. NetImperia Says:

    Спасибо за инструкцию. Мне очень помогла.

  9. Andrey Says:

    отличная статья! ничего лишнего

  10. KT315 Says:

    Господа! Скажите linux-image-2.6.хх-mybuild_i386.deb После сборки весит что-то около 150 Мб, тогда как изкоробочная версия около 17 Мб.
    Скажите, это допустимо или все-же я что-то делаю не так. (хотя .config от предыдущего ядра)

  11. Filosoff Says:

    KT315 @ 31.01.2009, 15:47 #

    ...После сборки весит что-то около 150 Мб...

    что-то не так. многовато. может что-то лишнее в пакете? или не то собрали?

  12. Andrey Says:

    KT315 явно конфиг подменился стандартным потому что возникла несовместиомсть с новым ядром

  13. Sergey Says:

    Мужики помогите плиз, при попытке сборке ядра выдает эту ошибку? Из-за чего и в чем проблема?

    "Error: The extended version may only contain
    lowercase alphanumerics and the characters - + .
    The current value is: -someCustomText
    Aborting."

  14. Filosoff Says:

    это у Вас проблема с --append-to-version и его значением. советую его убрать. а в ошибке написано, что там могт быть буквы и цифры. но не тире.

  15. Sergey Says:

    Не подскажите как правильно устанавливать патчи? После запуска патча он выдает Reversed (or previously applied) patch detected! Assume -R? [n] ? Со всем соглашаться?

  16. Filosoff Says:

    смотря по тому, что Вы хотите. из ошабки видно, что Вы применяете патч, который уже был применен.
    очень советую читать то, что написано. и пытаться это понять для начала.

  17. Sergey Says:

    Скажите, в чем может быть проблема
    root@serv:/usr/src/linux# make-kpkg clean
    exec debian/rules DEBIAN_REVISION=5:10.Custom clean
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -lt: unary operator expected
    /bin/sh: line 0: [: -eq: unary operator expected
    /bin/sh: line 0: [: -eq: unary operator expected
    /bin/sh: line 0: [: -gt: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -gt: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected

    ====== making target CLN-common [new prereqs: testdir]======

    ====== making target CLN-common [new prereqs: ]======
    /usr/bin/make -f ./debian/rules real_stamp_clean
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -lt: unary operator expected
    /bin/sh: line 0: [: -eq: unary operator expected
    /bin/sh: line 0: [: -eq: unary operator expected
    /bin/sh: line 0: [: -gt: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -gt: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    /bin/sh: line 0: [: -ge: unary operator expected
    make[1]: Entering directory `/usr/src/linux-2.6.29'
    ====== making target real_stamp_clean [new prereqs: ]======
    running clean
    test ! -f scripts/package/builddeb.kpkg-dist || \
    mv -f scripts/package/builddeb.kpkg-dist scripts/package/builddeb
    test ! -f scripts/package/Makefile.kpkg-dist || \
    mv -f scripts/package/Makefile.kpkg-dist scripts/package/Makefile
    test ! -f .config || cp -pf .config config.precious
    test ! -f Makefile || \
    /usr/bin/make ARCH=xen distclean
    make[2]: Entering directory `/usr/src/linux-2.6.29'
    Makefile:529: /usr/src/linux-2.6.29/arch/xen/Makefile: No such file or directory
    make[2]: *** No rule to make target `/usr/src/linux-2.6.29/arch/xen/Makefile'. Stop.
    make[2]: Leaving directory `/usr/src/linux-2.6.29'
    make[1]: *** [real_stamp_clean] Error 2
    make[1]: Leaving directory `/usr/src/linux-2.6.29'
    make: *** [CLN-common] Error 2

  18. koc Says:

    3 часа ждал, а потом выдало:
    H16TOFW firmware/vicam/firmware.fw
    IHEX firmware/cpia2/stv0672_vp4.bin
    make[1]: Leaving directory `/usr/src/linux-2.6.29.2'
    /usr/bin/make -j5 EXTRAVERSION=.2-koc ARCH=i386 \
    -C Documentation/lguest
    make[1]: Entering directory `/usr/src/linux-2.6.29.2/Documentation/lguest'
    cc -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE lguest.c -lz -o lguest
    lguest.c:34:18: error: zlib.h: Нет такого файла или каталога
    make[1]: *** [lguest] Ошибка 1
    make[1]: Leaving directory `/usr/src/linux-2.6.29.2/Documentation/lguest'
    make: *** [debian/stamp/build/kernel] Ошибка 2
    Подскажите, пожалуйста, в чем может быть проблема...

  19. Filosoff Says:

    Судя по всему Вы включили поддержку чего-то особенного, что не скомпилировалось. Честно говоря, нехватает информации для ответа.

  20. loko9988 Says:

    Спасибо... тока по menuconfig дописал бы.... где мне родить та ncurses-devel

  21. migaro Says:

    А тут вот такие грабли.. Собрал все.. и когда сказал dpkg -i и пакет ядра.. оно выдало:

    dpkg -i ./linux-image-2.6.32.2-optimized_2.6.32.2-optimized-10.00.Custom_i386.deb
    (Reading database ... 202662 files and directories currently installed.)
    Unpacking linux-image-2.6.32.2-optimized (from .../linux-image-2.6.32.2-optimized_2.6.32.2-optimized-10.00.Custom_i386.deb) ...
    Done.
    dpkg: error processing ./linux-image-2.6.32.2-optimized_2.6.32.2-optimized-10.00.Custom_i386.deb (--install):
    trying to overwrite `/lib/firmware/emi26/bitstream.fw', which is also in package linux-image-2.6.29.4
    dpkg-deb: subprocess paste killed by signal (Broken pipe)
    Running postrm hook script /sbin/update-grub.
    Searching for GRUB installation directory ... found: /boot/grub
    Searching for default file ... found: /boot/grub/default
    Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
    Searching for splash image ... found: /boot/grub/splash.xpm.gz
    Found kernel: /boot/vmlinuz-2.6.29.4
    Found kernel: /boot/memtest86+.bin
    Updating /boot/grub/menu.lst ... done

    Errors were encountered while processing:
    ./linux-image-2.6.32.2-optimized_2.6.32.2-optimized-10.00.Custom_i386.deb

    Пока так и не понял в гем грабля.. =(

  22. dexif Says:

    >Спасибо... тока по menuconfig дописал бы.... где мне родить та ncurses-devel

    Поставьте пакет libncurses5-dev

Leave a Reply

code