Здесь я опишу пример компиляции ядра 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 и поставит новое ядро во главе
списка. Теперь можно перезагрузить в систему с новым ядром!
Комментариев нет:
Отправить комментарий