27 июля 2011

Компиляция ядра Linux

Собирая ядро операционной системы Linux под конкретную аппаратную архитектуру, мы выигрываем в производительности, что особенно заметно на нетбуках, к тому-же тем самым уменьшаем размер ядра, что так-же необходимо для повышения стабильности и производительности. Компиляция иногда бывает необходима, чтобы включить в ядро дополнительные опции (патчи) которых нет в дефолтной конфигурации. Пересборка ядра важна ещё и из соображений безопасности. Дело в том, что в эксплойтах (программы использующие дыры в системе для несанкционированного доступа) жёстко прописаны адреса кода и переменных, а когда мы пересобираем ядро, мы меняем его размер и соответственно меняется адресная структура. После компиляции с большой долей вероятности на нашей системе эксплоит просто не будет работать.
Финальная цель в сборке ядра - монолитное ядро.
Скачайте полный архив исходного кода ядра Linux нужной вам версии с официального сайта https://www.kernel.org/ нажав справа на ссылку [Full Source] и переместите скачанный архив исходного кода ядра в вашу домашнюю папку.

Так-как все дальнейшие действия будут проходить в домашней папке, для удобства получения информации о названиях её содержимого (архивов, папок, пакетов и т.д которые вам будут часто требоваться) вводите команду в терминале:

ls -l


*( терминал можно открыть с помощью комбинации клавиш Ctrl+Alt+T )

Распакуйте в вашу домашнюю папку полученный архив (в дальнейшем вместо x.y указывайте версию полученного архива, либо deb пакета, либо ядра смотря, что требуется) командой:
cd ~/
tar -xjf linux-2.6.x.y.tar.bz2

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

sudo apt-get install build-essential kernel-package libncurses-dev

Установите пакеты необходимы для запуска GUI конфигуратора ядра xconfig:

sudo apt-get install qt3-dev-tools libqt3-mt-dev


Конфигурирование ядра Linux перед сборкой.

Переходим в домашнюю папку с распакованными сорцами ядра:
cd ~/linux-2.6.x.y

Получаем файл текущей (рабочей) конфигурации ядра, в директории с сорцами появится файл .config, мы будем на нём основываться:
sudo make oldconfig

Запускаем GUI (графический) конфигуратор ядра xconfig:
sudo make xconfig

Конфигурируем ядро согласно аппаратной архитектуре компьютера.

В конфигураторе в общих чертах (на английском) даётся описание к редактируемым параметрам.




С помощью комбинации клавиш Ctrl+F найдите и отключите лишнее, типа разновидности драйверов для ноутбуков, видео карт, типы процессоров и прочего, что не связанно с названиями архитектуры компьютера для которого вы оптимизируете ядро.

Например:

Ноутбуки: MSI, Apple, Samsung, Sony, Toshiba, BenQ, Panasonic, Asus, Dell, Compaq, Toshiba, Acer, Fujitsu, Siemens

Процессоры: AMD, CELERON, INTEL, Intel Core 2

Видео карты: NVIDIA, GeForce, Zotac, Radeon

Заранее выясните следующие интересующие вас параметры (этот список не полный):

процессор(ы)

оперативная память
чипсет материнской платы
видеокарта
сетевая карта(ы)
звуковая карта и прочее мультимедийное оборудование
жесткие диски и CD/DVD приводы
устройства ввода/вывода (клавиатура, мышь, планшеты и т.д.)
файловые системы
параметры сети (протоколы разных уровней)
системы и алгоритмы шифрования
usb-устройства и т.д.

Узнать некоторую информацию об аппаратной архитектуре можно с помощью графических утилит и команд в терминале:

Команды для получения системной информации:
arch : архитектура компьютера

uname -m : архитектура компьютера (2)

dmidecode -q : аппаратные системные компоненты - (SMBIOS / DMI)

hdparm -i /dev/hda : характеристики жесткого диска

cat /proc/cpuinfo : информация о процессоре

cat /proc/net/dev : показать сетевые интерфейсы и статистику по ним

lspci -tv : показать в виде дерева PCI устройства

lsusb -tv : показать в виде дерева USB устройства
lspci - выводит список PCI устройств: чипсет, контроллеры видео, сетевые конроллеры и т.д.
lsusb - список USB устройств: клавиатуры, мышки, вэб-камеры и т.д.
Обе эти команды можно использовать с ключом -v для получения более подробной информации об устройствах.
dmesg - получение сведений об устройстве или группе устройств, например подробные сведения о процессоре можно получить так:
dmesg | grep CPU

Отключая параметры вы должны быть точно уверенны в том, что делаете если в чём-то сомневаетесь оставьте, как есть в противном случае операционная система будет не рабочей либо частично, либо полностью.

После оптимизации и сохранения конфигурационного файла ядра Linux, преступаем к компиляции ядра, (сборка ядра может занять от 20 минут до нескольких часов в зависимости от конфигурации ядра и технических характеристик компьютера, custom это особое название для вашего будущего ядра, его вы можете заменить своим) выполним команду:

fakeroot make-kpkg --append-to-version=-custom kernel_image kernel_headers

После успешной компиляции ядра Linux, в вашей домашней папке появятся два deb-пакета. Устанавливаем их командой:
cd ~/
sudo dpkg -i linux-headers-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb
sudo dpkg -i linux-image-2.6.x.y-custom_2.6.x.y-custom-10.00.Custom_arc.deb

Для корректной работы, Ubuntu требует наличие образа начального RAM-диска. Чтобы его создать, выполните команду (где 2.6.x.y это версия собранного ядра):
sudo update-initramfs -c -k 2.6.x.y-custom

Проинформируем загрузчик Grub о собранной версии вашего ядра Linux для того, чтобы ваше ядро было выбрано при загрузке:
sudo update-grub

Все этапы компиляции ядра Linux завершены, перезагрузите компьютер.

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

uname -r

Если смена на новое ядро не произошла автоматически, а ОС загрузилась с прежним ядром (такое может быть), то измените порядок загрузки ядра сами используя к примеру графическую утилиту StartUp Manager

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

sudo apt-get install startupmanager


После проделанной сборки ядра Linux, можно удалить из домашней папки оставшиеся deb пакеты, скачанный архив и разархивированный каталог. Так-же если вы не планируете повторную компиляцию ядра, удалите ранее установленные пакеты для компиляции и конфигурации.

Для удаления всех пакетов вводим:
sudo apt-get autoremove build-essential kernel-package libncurses-dev qt3-dev-tools libqt3-mt-dev

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

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