12 дек. 2012 г.

Компилируем ядро Linux Ubuntu


Здесь я опишу пример компиляции ядра Linux Ubuntu на основе старого ядра. Необходимость компиляции нового ядра появилась в связи с тем, что  мой Ubuntu 10.10 обновился до 12.04, а количество видимых им ядер так и осталось равным 8, в то время как у меня их 12. Поэтому этот пример являет более или менее наглядным примером по задействованию части из всех возможных оптимизаций для текущего процессора.
Для начала нужно загрузить исходные тексты ядра и заголовочные файлы. Делаем это с помощью команды:

sudo aptitude install linux-source linux-headers

Далее устанавливаем утилиты для компиляции ядра:

sudo aptitude install build-essential kernel-package libncurses-dev



Заходим в директорию и распаковываем ядро:

cd /usr/src/
sudo tar -xjf linux-source-*

Т.к. мы будем собирать ядро, то нудно перейти в директорию с исходниками:

cd /usr/src/linux-source-*

Теперь создаем файл конфигурации текущего ядра:

sudo make oldconfig

Эта команда создаст файл .config, где будут указаны опции текущего ядра, которое мы будем использовать в качестве основы для нового. Конфигурацию выполняем следующим образом:

sudo make menuconfig

С помощью этой утилиты можно указать любые необходимые опции для нового ядра.
Конкретно нам, для увеличения максимального количества видимых ядер нужна следующая опция:

Processor type and features  ---> Processor family

Здесь выбираем свой процессор и ставим максимальное количество видимых ядер на 12.
Затем выполняем команду, которая удалит файлы, оставшиеся от предыдущей компиляции, если таковые имеются:

sudo make-kpkg clean

Ну и, собственно, команда компиляции ядра:

sudo make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers

Ключ "-append-to-version" используется, чтобы добавить к имени файла образа
ядра, строку "-mynewkernel", чтобы было проще его идентифицировать.

Следует отметить, что в процессе компиляции у меня вылезла следующая ошибка:


  OBJCOPY arch/x86/boot/vmlinux.bin
  HOSTCC  arch/x86/boot/tools/build
  BUILD   arch/x86/boot/bzImage
Setup is 16800 bytes (padded to 16896 bytes).
System is 4599 kB
CRC f77d64c0
Kernel: arch/x86/boot/bzImage is ready  (#1)
  Building modules, stage 2.
  MODPOST 3268 modules
ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko] undefined!
WARNING: modpost: Found 4 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2

Эта ошибка связана с модулем rts5139, который отвечает за Card Reader. Вот эта команда помогла мне решить проблему

sed -i s/CONFIG_RTS5139=m/CONFIG_RTS5139=n/ .config


После устранения всех ошибок и запуска повторной сборки через несколько часов получаем ядро. На Core i7 3.4GHz это заняло полтора часа.
В итоге в /usr/src/ получим два deb-пакета linux-headers-*.deb и linux-image-*.deb, которые следует установить в систему:

sudo dpkg -i linux-headers-*.deb linux-image-*.deb

Установщик также обновит конфигурацию grub и поставит новое ядро во главе
списка. Теперь можно перезагрузить в систему с новым ядром!

Комментариев нет:

Отправить комментарий