Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

Компиляция ядра Linux, оптимизированного под процессор

Все действия производились на ubuntu 9.10

Во первых, для чего может понадобиться компиляция ядра в таком совершенном дистрибутиве как ubuntu? (вместо ubuntu подставь свой любимый дистрибутив) Потому что разработчики дистрибутивов ориентируются на широкий спектр процессоров, на котором будет работать ubuntu, поэтому ядро, которое идёт в дистрибутиве имеет индекс i386, то ест должно работать на процессорах от I80386 до самого последнего из данной архитектуры, они же не в курсе, что ты поставил ubuntu на свой core-duo! А я, например хочу выжимать из своего Celeron 3.06G всё что можно! Поэтому мы будем оптимизировать ядро под наш процессор. В идеале оптимизировать нужно все приложения, как это делают в Gentoo, но мы будем оптимизировать наиболее важные, и начнём с ядра.
Итак, поехали.
Для начала закачаем исходники ядра из дистрибутива

aptitude install linux-source-2.6

и заголовочные файлы

aptitude install linux-headers

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

aptitude install build-essential kernel-package libncurses-dev

Полученное ядро нужно распаковать:

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

Затем нужно выставить опции компиляции для gcc c оптимизацией под ваш процессор. Для 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 - это средняя оптимизация кода - компромис между быстродействием и объемом получаемого exe-шника (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-*

Создадим файл конфигурации текущего ядра командой

make oldconfig

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

make menuconfig

С помощью этой утилиты указываем необходимые нам опции.
Обращаю ваше внимание на следующую опцию:
Processor type and features ---> Processor family
Здесь выбираем свой процессор. Остальные опции, которые мы взяли из ядра идущего с дистрибутивом вполне работоспособны для большинства применений, поэтому изменяйте их по своему усмотрению, или оставляйте как есть.
Далее, выполним команду, которая удалит файлы (если они имеются), оставшиеся от предыдущей компиляции:

make-kpkg clean

Далее компилируем ядро командой:

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, которые мы устанавливаем в систему:

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

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


Обновлено 13.03.2011 00:30
Автор: andrewlap

Источник: http://www.comeinadmin.ru/article/compile-kernel-linux.html


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2017 LinuxRSP