Російський корабель йди нах*й!

Ніякі послуги не надаються але ви можете вибрати мову!!!

Компиляция ядра linux 3.18.1 на ubuntu 14.10 gnome 3.14

Предисловие перед компиляцией ядра linux

Компиляция ядра linux ubuntu (и других debian linux систем) часто интересующий юзеров вопрос, которым надоело просто пользоваться ubuntu, kubuntu и других debian linux с коробки, захотелось добиться выше скоростей работы и сократить потребление памяти компьютера путем выбрасывания всего ненужного с ядра линукс, на подобии как надоели свое время частые установки windows скорее всего и это подвигло их перейти на ubuntu linux или другую debian сборку, в интернете масса статей как выполняется компиляция ядра linux, но большинство из них были написаны для старых версий ядер и дистрибутивов, что часто заводит неопытных пользователей в тупик, приходится долго искать что-то толковое и экспериментировать. На момент написания статьи самой новой была версия ubuntu 14.10, которую я сразу загрузил с графической оболочкой gnome 3.14 которая тоже на момент написания была самой новой версией, уж больно она мне нравится. Все вышеперечисленное можно было проделать и на виртуальной машине, но итак пришло уже время апгрейдиться потому все посносил кроме по соседству установленного Windows 7 и раздела /home и теперь пишу, что делаю. Данное ядро будет собираться на ноутбуке Acer Aspire E1-531G и рассчитано на максимальную производительность ноутбука, которой удастся добиться, в дальнейшем будет собрано еще одно для минимального энергопотребления, но это уже следующая статья. Сразу хочу уточнить, что после установки дистрибутива были удалены все игрушки и прочий хлам, которым я никогда не пользуюсь и установлены ряд полезных программ, но они отношения к компиляции ядра linux не имеют, потому перечислять не буду, принтеров и сканеров у меня тоже нет, потому они будут выкидываться с ядра linux, по сути данный ноутбук должен быстро работать в интернете, поддерживать по работе много флешек USB и под картридер, а также работать с файловыми системами NTFS и Fat32 и Fat16, также на нем будет запущен виртуальный сервер для разработки сайтов.

Установка Windows 7, 8, 8.1, 10, xp, linux в Киеве, Вишневом, Броварах, Борисполе, Бортничах.

Компиляции ядра linux!

Прежде чем приступить к компиляции ядра linux, необходимо скачать само ядро linux на сайте kernel.org. На момент сборки последнее стабильное ядро linux 3.18.1, но как показывает практика можно брать не стабильные, в бета версиях никаких проблем, после компиляции ядра linux тоже не наблюдалось. Пока ядро linux качается зайдем в центр приложений ubuntu и установим менеджер пакетов Synaptic и программу Terminator в которой удобнее работать чем в терминале, есть возможность запуска нескольких терминалов в одном окне, что иногда упрощает работу.

Еще заходим в источники приложений, вводим пароль суперпользователя и выставляем сервер «Основной сервер» и по желанию по других вкладках тоже можете поменять настройки. Дальше до компиляции ядра linux обновляем систему выполнив в терминале:

sudo apt-get update
sudo apt-get upgrade

Для компиляции ядра linux нам потребуются дополнительные пакеты которые установим тоже, если они отсутствуют выполнив:

sudo apt-get install install libgtk2.0-dev libglib2.0-dev libglade2-dev libncurses5-dev gcc g++ kernel-package

Запускаем Synaptic вбиваем в поиск qt и отмечаем пакеты qt4-dev-tools и libqt4-qt3support, и все которые они за собой подтянут сами, без них не запускается конфигурация ядра линукс и следовательно ни о какой дальнейшей его компиляции ядра linux не может быть и речи, если при запуске одного из редакторов конфигурационного файла все-же появится ошибка и будет что-то написано про QT3 или QT4, вернитесь и доустановите пакеты с соответствующими частями имени (на практике в разных версиях linux ubuntu и kubuntu дистрибутивов иногда появлялись ошибки при попытке сконфигурировать ядро linux, решение которых как правило описано в тексте ошибки, часто это отсутствие необходимого пакета, установка или изменение версии которого решает все проблемы).
На данном этапе выполним перезагрузку после всех обновлений.
Переходим в папку со скачанным ядром linux командой:

cd /home/user_name/Загрузки

или в другое место, куда мы скачали архив и копируем его (хоть не обязательно, можно собирать ядра linux и в домашней папке)

sudo cp /linux-3.18.1.tar.xz /usr/src

Переходим в каталог с архивом и распаковываем его (можно было сначала распаковать архив ядра linux в домашней папке, без участия терминала и скопировать в папку назначения)

sudo cd /usr/src
sudo tar -xvf linux-3.18.1.tar.xz

Создадим символическую ссылку на папку

sudo ln -s linux-3.18.1 linux

Перейдем в нее

sudo cd linux

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

sudo make oldconfig

На этом этапе терминал начнет спрашивать нас, что делать с новыми пунктами появившимися в новом ядре linux и отсутствующими в конфиге старого, я на этом этапе просто пропускаю их зажимая кнопку Enter, чтоб в дальнейшем не читать по второму кругу, но Вы можете и отвечать пол часа отмечая каждый вопрос ;)
Вообще для моих целей можно было бы воспользоваться командами localmodconfig и localyesconfig и затем просто включить то, чем планирую пользоваться в будущем, но как показала практика, через какое-то время это создает проблему, можно упустить, что-то важное и посути подходит только для конфигурации ядра linux серверов, в которых на момент компиляции ядра linux, уже все что будет в будущем использоваться запущено и все устройства работают в данный момент, на обычных компьютерах это приводит к невозможности подключения различных флеш носителей, телефонов, запуска виртуальных машин, некоторых приложений и многих других.

Я предпочитаю использовать xconfig - графический (X) интерфейс ручной конфигурации ядра linux, хоть можно сделать тоже и через gconfig и menuconfig, запускаем команду:

sudo make xconfig

Дальше можем спокойно выбирать мышкой, что мы хотим включить в наше будущее ядро linux, а что нет, данный этап описывать подробно не буду, там ОЧЕНЬ много пунктов и в каждой версии ядра появляется, что-то новое, но дам несколько советов, которые помогают повысить производительность, первым делом можно выбрать правильный тип процессора в списке и отключить практически все, что относится к другим производителям процессоров, большинство из этих вещей включаются не модульно, а грузятся с ядром при старте ПК (скажем если у Вас стоит процессор от Intel, то нечего в ядре делать драйверам на AMD и другие процессоры). Затем можно указать в каком режиме нужно работать, я указываю всегда performance, не люблю смотреть как ноутбук тупит, замедляет жесткий диск для экономии энергии и тд. Дальше открываем новый терминал и вводим команду:

lspci

которая выведет все работающие устройства ноутбука и исходя из этих данных можно поотключать поддержку лишних видео и аудиокарт, сетевых проводных и беспроводных карт, если не используете также можете отключить ТВ приставки, джойстики, акселерометры, магнитометры, наборы драйверов на ноутбуки других производителей и прочий хлам который уверены, что не будете использовать. Я предпочитаю убирать лишние устройства не за один раз, если отключить их несколько сотен и затем скомпилировать ядро linux и загрузиться с него, иногда оказывается, что что-то не работает и приходится долго искать по пунктах, что-же лишнее отключили или не включили, потому обычно сначала выполняю более черновую компиляцию ядра linux, в котором точно уверен, что отключил только ненужные устройства и выставил поддержку своего процессора и многое другое, а затем уже загрузившись с него и проверив все устройства копирую его конфигурационный файл и продолжаю искать и отключать дальше ненужное, при этом процесс компиляции ядра linux также проходит быстрее. Даже такая черновая сборка собственного ядра linux дает снижение расходуемой оперативной памяти порядка 200Мб.

После того как все сделано, можно нажимать на дискетку для сохранения конфигурацинного файла ядра и запускать его компиляцию, но сперва проводим очистку от предыдущих компиляций ядер linux

sudo make-kpkg clean

приступаем к компиляции ядра linux, выполним команду которая сильно ускорит весь процесс (3-это количество ядер +1, то есть процессор в данном случае двух ядерный, custom1-название будущего ядра, которое в дальнейшем поможет выделить его среди других)

fakeroot make-kpkg -j 3 --initrd --append-to-version=-custom1 kernel_image kernel_headers

и просто ждем, если нигде не натупили в конфигурационном файле, ядро linux должно собрать без ошибок, если нет-выдаст ошибку в процессе и остановит процесс компиляции, у меня процесс сборки ядра занял порядка 3-х часов. Когда ядро собралось в папке /usr/src должны появиться 2 файла image и headers с расширениями .deb, которые нужно установить в указанном порядке вернувшись в этот каталог:

cd /usr/src
dpkg -i linux-image-3.18.1-custom2_3.18.1-custom2-10.00.Custom_amd64.deb
dpkg -i linux-headers-3.18.1-custom2_3.18.1-custom2-10.00.Custom_amd64.deb

Выполним перезагрузку и проверим работоспособность ядра linux, если что-то не работает перезапускаемся и выбираем пункт Advanced options и выбираем рабочее ядро linux. Ждем запуска и в менеджере пакетов Synaptic вбиваем в поиск linux-image, а затем linux-headers и ищем наши два пакета с надписями custom1 или что Вы там указали и отмечаем для удаления.
Проверить какая в данный момент запущена версия ядра можно командой:

uname -r

Для эксперимента до и после сборки ядра linux была замерена загрузка оперативной памяти, сборка кастомного ядра дала выигрыш в 200мб, при том, что производительность системы в целом значительно возросла, без потери функциональности, дальше для эксперимента была выполнена еще одна конфигурация ядра linux посредством команды localyesconfig которая дала дополнительный выигрыш в оперативной памяти лишь 10-20мб и привела к возникновению проблем с дальнейшим запуском виртуальной машины, с флеш накопителями и многим другим, что говорит о нецелесообразности дальнейшего совершенствования собранного первого ядра и траты многих часов времени на это.
Кстати забыл уточнить, что большинство параметров в ядре отмечаются галочкой и тогда они будут загружаться в оперативную память при запуске linux, либо при установлении напротив них буквы М их загрузка будет проходить модульно, в тот момент когда они нужны не потребляя оперативную память, при снятии и галочки и М данная функция ядра становится недоступной в дальнейшем, также иногда приходится указывать числовое значение или выбирать из списка пункт который будет использоваться вместо выставленного по умолчанию, будьте осторожны при полном отключении некоторых драйверов, автоматически могут отключиться и скрыться пункты которые вы не планировали отключать, если не уверены, лучше оставить модульную загрузку, стоит обращать внимание отключаете ли вы устройство какого-то производителя или чип, они как правило находятся в тех-же списках и скажем зная производителя своей видеокарты, начинаешь отключать все в списке где нет ее названия, а потом после установки ядра linux оказывается, что вы отключили, нужное и возникают проблемы с оборудованием.

На этом все.