Пример компиляции ядра в таких дистрибутивах как Debian и Ubuntu с целью задействования всех возможных оптимизаций для текущего процессора (core-duo). Все произведённые действия подойдут для ubuntu 9.10 - 10.10Для начала загрузим исходные тексты ядра и заголовочные файлы:
sudo aptitude install linux-source-2.6 linux-headers
Установим утилиты для компиляции ядра
sudo aptitude install build-essential kernel-package libncurses-dev
Полученное ядро нужно распаковать:
cd /usr/src/
sudo tar -xjf linux-source-*
Затем нужно выставить опции компиляции для gcc c оптимизацией под нужный процессор. Для Intel-процессоров опции можно найти на [[http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel данной странице]]. Так же начиная с GCC версии 4.2 можно указать опцию "-march=native", тогда GCC автоматически определит оптимальные настройки для вашего процессора. Так давайте же и мы воспользуемся этой замечательной возможностью. Так же рекомендуется добавлять опции "-pipe -fomit-frame-pointer".
В итоге вот какие опции у нас получаются:
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
"CFLAGS" - опции для С программ
"CXXFLAGS" - опции для C++ программ
"-march" - архитектура процессора (в нашем случае определяется автоматически)
"-O2" - это средняя оптимизация кода - компромис между быстродействием и объемом получаемого исполняемого файла (00, 01 - отсутствие оптимизации и маленькая оптимизация, маленький размер исполняемого файла, 03 - жёсткая оптимизация, большой размер исполняемого файла) Вообще не факт, что с оптимизацией 03 везде будет работать быстрее, большой размер получаемой в итоге программы ставит повышенные требования к быстродействию подсистемы памяти.
Это переменные окружения, и что бы они сохранились в системе после перезагрузки надо их поместить в .bashrc файл пользователя, который будет компилировать. Я помещаю их в .bashrc своего пользователя и root, на случай если мне вздумается компилировать от рута. В конец .bashrc этих пользователей добавляем:
export CHOST="i686-pc-linux-gnu"
export CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer"
export CXXFLAGS="${CFLAGS}"
Для вступления в силу изменений надо заново зайти пользователем, так как компиляция будет происходить в консоли, и в GUI нам эти параметры не нужны, достаточно просто открыть новую консоль.
Теперь все программы, которые мы будем компилировать, будут оптимизированы согласно этим опциям. Теперь можно переходить непосредственно к компиляции ядра.
Все операции с ядром производятся в корне директории с исходными текстами ядра, поэтому недолго думая переходим туда:
cd /usr/src/linux-source-*
Создадим файл конфигурации текущего ядра командой
sudo make oldconfig
Эта команда создаст файл .config, где будут указаны опции ядра, используемого в данной системе. Эти настройки будут основой для наших настроек. Приступим к конфигурации ядра:
sudo make menuconfig
С помощью этой утилиты указываем необходимые нам опции.
Обращаю ваше внимание на следующую опцию:
Processor type and features ---> Processor family
Здесь выбираем свой процессор. Остальные опции, которые мы взяли из ядра идущего с дистрибутивом вполне работоспособны для большинства применений, поэтому изменяйте их по своему усмотрению, или оставляйте как есть.
Далее, выполним команду, которая удалит файлы (если они имеются), оставшиеся от предыдущей компиляции:
sudo make-kpkg clean
Далее компилируем ядро командой:
sudo nice -n 19 make-kpkg --initrd --append-to-version=-mykernel kernel_image kernel_headers
"nice -n 19" понизит приоритет компиляции на 19 пунктов
Ключ "-append-to-version" используется, чтобы добавить к имени файла образа ядра, который мы получим после компиляции, строку "-mykernel", чтобы было проще идентифицировать свое ядро.
И, через несколько минут/часов или может у кого то и дней, мы получим оптимизированное для нашей архитектуры ядро. На Celeron 3.06GHz это заняло два с половиной часа.
Если всё пройдёт удачно, в итоге в /usr/src/ получим два deb-пакета linux-headers-*.deb и linux-image-*.deb, которые следует установить в систему:
sudo dpkg -i linux-headers-*.deb linux-image-*.deb
Установщик так же обновит конфигурацию grub и поставит новое ядро во главе списка. Теперь можно перезагрузить в систему с новым ядром!
URL: http://www.comeinadmin.ru/article/compile-kernel-linux.html
Обсуждается: http://www.opennet.ru/tips/info/2549.shtml