Как в linux собирать программы из исходников

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

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

Получение исходников ядра

Самое первое что нужно сделать — это скачать исходники ядра. Исходники лучшие брать с сайта вашего дистрибутива, если они там есть или официального сайта ядра: kernel.org. Мы рассмотрим загрузку исходников с kernel.org.

Сборка из исходников OBS на Manjaro Linux

Перед тем как скачивать исходники нам нужно определиться с версией ядра которую будем собирать. Есть две основных версии релизов — стабильные (stable) и кандидаты в релизы (rc), есть, конечно, еще стабильные с длительным периодом поддержки (longterm) но важно сейчас разобраться с первыми двумя. Стабильные это, как правило, не самые новые, но зато уже хорошо протестированные ядра с минимальным количеством багов. Тестовые — наоборот, самые новые, но могут содержать различные ошибки.

Итак когда определились с версией заходим на kernel.org и скачиваем нужные исходники в формате tar.xz:

kernel6

В этой статье будет использована самая новая на данный момент нестабильная версия 4.4.rc7.

Получить исходники ядра Linux можно также с помощью утилиты git. Сначала создадим папку для исходников:

# mkdir kernel_sources

Для загрузки самой последней версии наберите:

# git clone https://github.com/torvalds/linux

Распаковка исходников ядра

Теперь у нас есть сохраненные исходники. Переходим в папку с исходниками:

# cd linux_sources

Или если загружали ядро linux с помощью браузера, то сначала создадим эту папку и скопируем в нее архив:

# mkdir linux_sources
# cp ~/Downloads/linux* ~/linux_sources

Распаковываем архив с помощью утилиты tar:

# tar xf linux*

И переходим в папку с распакованным ядром, у меня это:

# cd linux-4.4-rc7/

Автоматическая настройка сборки ядра Linux

Перед тем как начнется сборка ядра linux, нам придется его настроить. Как я и говорил, сначала рассмотрим автоматический вариант настройки сборки ядра. В вашей системе уже есть собранное, настроенное производителем дистрибутива, и полностью рабочее ядро.

5 причин научиться собирать софт из исходников

Если вы не хотите разбираться с тонкостями конфигурации ядра, можно просто извлечь уже готовые настройки старого ядра и сгенерировать на их основе настройки для нового. Нам придется лишь указать значения для новых параметров. Учитывая, что в последних версиях не было и не намечается серьезных изменений можно отвечать на все эти параметры как предлагает скрипт настройки.

Параметры используемого ядра хранятся в архиве по адресу /proc/config.gz. Распакуем конфиг и поместим его в нашу папку утилитой zcat:

# zcat /proc/config.gz > .config

А дальше запускаем скрипт адаптации настроек:

# make oldconfig

В процессе его работы нужно будет ответить на несколько вопросов. Это новые параметры, которые изменились или были добавлены в новое ядро и поддержка нового оборудования, в большинстве случаев можно выбирать вариант по умолчанию. Обычно есть три варианта y — включить, n — не включать, m — включить в качестве модуля. Рекомендованный вариант написан с большой буквы, для его выбора просто нажмите Enter.

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

Ручная настройка ядра Linux

Ручная настройка — сложный и трудоемкий процесс, но зато она позволяет понять как работает ваша система, какие функции используются и создать ядро с минимально нужным набором функций под свои потребности. Мы рассмотрим только главные шаги, которые нужно выполнить чтобы ядро собралось и заработало. Со всем остальным вам придется разбираться самому опираясь на документацию ядра. Благо в утилите настройки для каждого параметра есть обширная документация которая поможет вам понять какие еще настройки нужно включить.

Читайте также:
С помощью какой опции запускается выполнение программы open run

Начнем. Для запуска меню настроек ядра linux наберите:

# make menuconfig

Откроется вот утилита с интерфейсом ncurses:

kernel5

Как видите, некоторые обязательные опции уже включены, чтобы облегчить вам процесс настройки. Начнем с самых основных настроек. Чтобы включить параметр нажмите y, чтобы включить модулем — m, для перемещения используйте клавиши стрелок и Enter, возвратиться на уровень вверх можно кнопкой Exit Откройте пункт General Setup.

Здесь устанавливаем такие параметры:

Local Version — локальная версия ядра, будет увеличиваться при каждой сборке на единицу, чтобы новые ядра при установке не заменяли собой старые, устанавливаем значение 1.

kernel1

Automatically append version information to the version string — добавлять версию в название файла ядра.

Kernel Compression Mode — режим сжатия образа ядра, самый эффективный lzma.

Default Hostname — имя компьютера, отображаемое в приглашении ввода

POSIX Message Queues — поддержка очередей POSTIX

Support for paging of anonymous memory — включаем поддержку swap

Control Group support — поддержка механизма распределения ресурсов между группами процессов

Kernel .config support и Enable access to .config through /proc/config.gz — включаем возможность извлечь конфигурацию ядра через /proc/config.gz

Здесь все, возвращаемся на уровень вверх и включаем Enable loadable module support, эта функция разрешает загрузку внешних модулей, дальше открываем его меню и включаем:

kernel3

Module unloading — поддержка отключения модулей

Forced module unloading — принудительное отключение модулей

Опять возвращаемся назад и открываем Processor type and features:

Processor family (Opteron/Athlon64/Hammer/K8) — выбираем свой тип процессора.

Опять возвращаемся и переходим в раздел File systems, тут установите все нужные галочки.

kernel4

Обязательно включите The Extended 3 (ext3) filesystem и The Extended 4 (ext4) filesystem — для поддержки стандартных ext3 и ext4 файловых систем

Возвращаемся и идем в Kernel hacking.

Здесь включаем Magic SysRq key — поддержка магических функций SysRq, вещь не первой необходимости, но временами полезная.

Остался еще один пункт, самый сложный, потому что вам его придется пройти самому. Device Drivers — нужно пройтись по разделам и повключать драйвера для своего оборудования. Под оборудованием я подразумеваю нестандартные жесткие диски, мышки, USB устройства, веб-камеры, Bluetooth, WIFI адаптеры, принтеры и т д.

Посмотреть какое оборудование подключено к вашей системе можно командой:

# lspci

После выполнения всех действий ядро готово к сборке, но вам, скорее всего, предстоит разобраться с очень многим.

Чтобы сохранить настройки переместите указатель с помощью стрелок вправо-влево, з позиции Select в позицию Save и нажмите Enter, потом еще раз подтвердите сохранение:

kernel

Чтобы выйти нажмите пару раз кнопку Exit.

Сборка ядра Linux

После завершения всех приготовлений может быть выполнена сборка ядра linux. Для начала процесса сборки выполните:

# make make modules

Теперь можете идти пить кофе или гулять, потому что процесс сборки длинный и займет около получаса.

Установка нового ядра

Когда ядро и модули будут собраны новое ядро можно устанавливать. Можно вручную скопировать файл ядра в папку загрузчика:

# cp arch/x86_64/boot/bzImage /boot/vmlinuz

А можно просто выполнить установочный скрипт, сразу установив заодно и модули:

# sudo make install sudo make modules_install

После установки не забудьте обновить конфигурацию загрузчика Grub:

# grub-mkconfig -o /boot/grub/grub.cfg

И перезагружаем компьютер чтобы увидеть новое ядро в работе:

# sudo reboot

Выводы

Вот и все. В этой статье мы подробно рассмотрели как собрать ядро Linux из исходников. Это будет полезно всем желающим лучшие понять свою систему, и тем, кто хочет получить самую новую версию ядра в своей системе.

Если остались вопросы, задавайте комментарии!

Источник: housecomputer.ru

Записки программиста

Если помните, не так давно мы научились собирать из исходников ядро FreeBSD. Спрашивается, почему бы не научиться делать то же самое и с ядром Linux? Причины собирать ядро Linux из исходников, в общем то, те же — получение самой свежей версии ядра, срочное применение security-патчей, оптимизация под конкретные задачи и конкретное железо, а также желание принятие участие в разработке ядра.

Важно! Следование инструкциям из этого поста может привести к потере ваших данных. Делайте бэкапы и помните, что делаете вы все исключительно на свой страх и риск. Все описанное ниже было проверено на Ubuntu 14.04 LTS. Но на других версиях Ubuntu, а также других дистрибутивах Linux, отличия должны быть минимальными.

Настраиваем загрузчик

Правим /etc/default/grub примерно таким образом:

GRUB_DEFAULT = 0
# GRUB_HIDDEN_TIMEOUT=10
# GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT = 10
GRUB_DISTRIBUTOR = ` lsb_release -i -s 2 > / dev / null || echo Debian `
GRUB_CMDLINE_LINUX_DEFAULT = «quiet splash»
GRUB_CMDLINE_LINUX = «»

После правки говорим:

sudo update-grub

В результате перед загрузкой системы в течение 10 секунд будет предлагаться выбрать ядро, с которым вы хотите загрузиться. Очень удобно, если вы что-то напутали с конфигурацией ядра и хотите загрузиться с предыдущей версией!

Ставим зависимости

Нам понадобятся как минимум следующие пакеты:

Читайте также:
Какие значения примут переменные c и d в результате выполнения программы program vvv2 var a

sudo apt-get install git gcc make bc fakeroot dpkg-dev
libncurses5-dev libssl-dev

На многих системах все они, впрочем, уже будут присутствовать.

Получаем исходники

Исходники ядра можно скачать по ссылке на главной странице kernel.org. На момент написания этих строк последней стабильной версией ядра была 4.6.4:

wget https: // www.kernel.org / pub / linux / kernel / v4.x / linux-4.6.4.tar.xz
tar —xz -xvf linux-4.6.4.tar.xz
cd linux-4.6.4

Или, если вам нужен самый-самый свежак, можно взять исходники прямо из Git:

# Mirror: https://github.com/torvalds/linux
git clone ‘git://git.kernel.org/pub/scm/linux/kernel/git/’
‘torvalds/linux.git’
cd linux

Судя по тому, что тэга v4.6.4 в Git’е мне найти не удалось, релизы ядра Linux оформляются исключительно в форме сжатых tar-архивов.

Если же вместо ванильного ядра вы хотели бы собрать ядро с патчами от компании Canonical:

git clone git: // kernel.ubuntu.com / ubuntu / ubuntu-trusty.git
cd ubuntu-trusty
git tag | less
git checkout Ubuntu-lts-4.4.0- 31.50 _14.04.1

По своему опыту скажу, что если вы пользуетесь Ubuntu, то можете смело использовать ванильное ядро. Вряд ли у вас возникнут с ним какие-то проблемы.

Примечание: Интересно, что из существующих сравнительно популярных дистрибутивов Linux ядро без собственных патчей, похоже, используют только Gentoo, Slackware и Arch Linux.

Так или иначе, теперь у вас есть исходники.

Собираем и устанавливаем ядро

Выбираем опции, с которыми будет собрано ядро:

make menuconfig

В случае необходимости меняем настройки, жмем Save, затем Exit. В результате будет создан файл .config , содержащий выбранные нами параметры.

При обновлении ядра (вы же по-любому уже используете какое-то ядро?) удобно взять конфиг текущего ядра, и выставить новым опциям значения по умолчанию:

zcat / proc / config.gz > . / .config
make olddefconfig
make -j4 bindeb-pkg LOCALVERSION =-custom

Собирается ядро довольно долго. На моем ноутбуке сборка заняла 1 час 15 минут. Однако из этого времени большая часть тратится на сборку гигантского пакета ядра с отладочными символами. Сборку этого пакета можно отключить, закомментировав в конфиге параметр CONFIG_DEBUG_INFO. Только учтите, что этот пакет требуется SystemTap и другим полезным инструментам.

Помимо самого ядра также можно собрать и документацию:

# еще есть `make pdfdocs` и другие, см `make help`
make htmldocs
chromium-browser Documentation / DocBook / index.html

По окончании сборки в дочернем каталоге видим что-то вроде:

linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

Ставим все deb-пакеты кроме dbg-версии ядра обычным sudo dpkg -i и перезагружаемся. После перезагрузки смотрим на вывод команды uname -a . Убеждаемся, что действительно загрузились с новым ядром. Если с новым ядром что-то не так, в загрузчике просто выбираем то, с которым система загружалась до этого. После загрузки со старым ядром поскорее удаляем пакеты нового ядра, и вуаля — система вернулась к прежнему состоянию.

Дополнительно после загрузки нового ядра можно прогнать на нем тесты:

sudo make kselftest
sudo make kselftest-clean

Поздравляю, теперь вы умеете собирать ядро Linux!

Материалы по внутреннему устройству ядра Linux:

А собираете ли вы ядро из исходников, и если да, то зачем? 🙂

Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.

Источник: eax.me

Как собрать и установить последнее ядро ​​Linux из исходников

Я только что закончил свое первое задание на курс по продвинутым операционным системам. И я решил задокументировать свой подход к сборке ядра Linux из исходников и реализации собственного системного вызова.

Существует ряд блогов, в которых уже рассказывается, как это сделать, но некоторые из них устарели, а некоторые кажутся излишне сложными. Моя цель — представить простой подход к этому, который, надеюсь, поможет вам сэкономить много времени.

Компиляция ядра Linux из исходников может показаться сложной задачей даже для тех, кто в целом хорошо разбирается в компьютерах. Это также может сильно раздражать, если вы не следуете правильным инструкциям.

Итак, вот руководство, которое поможет вам в процессе сборки ядра из исходных текстов, и оно работает! Вам не придется беспокоиться о том, чтобы испортить вашу систему или зря тратить время.

Зачем собирать ядро ​​из исходников?

Если вы планируете работать с внутренними компонентами ядра Linux или изменить его поведение, вам потребуется перекомпилировать ядро ​​в вашей системе.

Вот несколько конкретных случаев, когда вам нужно знать, как работать с исходным кодом ядра:

  1. Вы хотите написать действительно классную программу «Hello world». (Каждый раз, когда вы реализуете свой собственный системный вызов или изменяете исходный код ядра, вам необходимо перекомпилировать ядро ​​для реализации изменений)
  2. Вы хотите включить экспериментальные функции в ядре, которые не включены по умолчанию (или отключить функции по умолчанию, которые вам не нужны)
  3. Вы хотите отладить исходный код ядра, включить поддержку нового оборудования или внести изменения в его существующие конфигурации.
  4. Вы изучаете курс по продвинутым операционным системам, и у вас нет другого выбора, кроме как сделать это!
Читайте также:
Как найти папку программы на маке

В каждой из вышеперечисленных ситуаций может пригодиться изучение того, как собрать ядро ​​из исходных текстов.

Что вам понадобится

Операционная система на основе Linux (я пробовал это на Ubuntu 14.04 LTS, и инструкции, написанные здесь, предназначены для того же).

Вам нужно будет установить несколько пакетов, прежде чем вы сможете начать. Для этого используйте следующие команды.

sudo apt-get update sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc

Вам также потребуется не менее 12 ГБ свободного места на диске, подключение к Интернету для загрузки исходного кода и много времени (от 45 до 90 минут).

Скачивание и извлечение последней версии исходного кода ядра

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

uname -r

Зайдите на kernel.org и скачайте последнюю стабильную версию. На момент написания этой статьи последней стабильной версией ядра была 4.7.1, и я буду ссылаться на нее в этой статье. (Примечание: старайтесь не загружать исходники с других сайтов)

Перейдите в каталог, в который был загружен файл, и извлеките его, используя:

tar xf linux-4.7.1.tar.xz

Перейдите в извлеченный каталог linux-4.7.1.

cd linux-4.7.1

Он должен содержать папки с названиями arch, fs, crypto и т. Д.

Настройка и компиляция:

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

Есть много способов сделать это.

Простой и понятный способ сделать это — сначала скопировать существующий файл конфигурации ядра, а затем использовать «menuconfig» для внесения изменений (при необходимости). Это самый быстрый способ сделать это и, вероятно, самый безопасный.

cp /boot/config-$(uname -r) .config make menuconfig

Это та часть, где вы можете в конечном итоге удалить поддержку драйвера устройства или сделать что-то подобное, что в конечном итоге приведет к поломке ядра. Если вы не уверены, что вносите изменения, просто сохраните и выйдите.

Примечание. Одной из альтернатив menuconfig является интерактивный интерфейс командной строки, доступный с помощью команды «make config». Это поможет вам настроить все с нуля. Не используйте это. Вам будет задано более тысячи вопросов типа «да / нет» о включении или отключении модулей, что, я обещаю, совсем не увлекательно.

Я попробовал это однажды, и каким-то образом мне удалось испортить конфигурации драйвера дисплея.

gconfig и xconfig — альтернативные инструменты настройки на основе графического интерфейса, которые вы можете использовать. Я сам их не пробовал. Для этого вам нужно будет использовать make gconfig (или make xconfig) вместо make menuconfig.

Теперь все готово!

Для компиляции ядра и его модулей мы используем команду make.

Затем следует использовать команду make modules_install для установки модулей ядра.

Наконец, мы используем make install, чтобы скопировать ядро ​​и файл .config в папку / boot и сгенерировать файл system.map (который представляет собой таблицу символов, используемую ядром).

Эти три шага, вместе взятые, обычно занимают много времени. Используйте следующую команду для выполнения вышеуказанных задач:

sudo make -j 4 sudo make modules_install -j 4 sudo make install -j 4

Примечание. Я использовал параметр -j, чтобы указать количество используемых ядер. Это значительно ускоряет процесс. Вы можете использовать nproc, чтобы проверить количество доступных процессоров.

В моем случае это было 4 ядра.

В идеале вам не нужны привилегии sudo, но у меня возникли проблемы, когда я не запустил его с привилегиями sudo.

Заключительные шаги

После того, как ядро ​​и его модули скомпилированы и установлены, мы хотим использовать новое ядро ​​при следующей загрузке.

Для этого нам нужно использовать следующую команду:

update-initramfs -c -k 4.7.1

Затем используйте следующую команду, которая автоматически ищет ядра, присутствующие в папке / boot, и добавляет их в файл конфигурации grub.

update-grub

Теперь перезапустите систему, и вы увидите, что новое ядро ​​добавлено в записи загрузчика.

Следуя инструкциям, при условии, что на диске достаточно места и текущая конфигурация ядра работает нормально, у вас не должно возникнуть никаких проблем. Обратите внимание, что вы всегда можете использовать старую версию ядра в случае каких-либо проблем и попробовать все это снова!

Команда uname -r теперь должна отображать текущую используемую версию ядра.

Важное примечание

Вышеупомянутые шаги необходимы для первой сборки ядра из исходных текстов. Как только это делается хотя бы один раз, и новый образ ядра готов, вносить изменения и писать собственные модули очень просто. Вы будете использовать только шаги, перечисленные в разделе Настройка и компиляция, каждый раз, когда что-то новое будет реализовано или настроено по-другому.

Имея в виду, просто запомните следующее:

cp /boot/config-$(uname -r) .config make menuconfig sudo make -j 4 sudo make modules_install -j 4 sudo make install -j 4

Я должен отдать должное следующим ценным ресурсам — они очень помогли с этой задачей: Ramkitech.com, askubuntu.com, kernel.org и cyberciti.biz

Источник: digitrain.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru