Как скомпилировать в Linux

Обновлено: 21.11.2024

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

Мы выполнили шаги и команды, упомянутые в этой статье, в системе Ubuntu 20.04 LTS, но они будут работать и в других версиях, таких как Ubuntu 18.04, или дистрибутивах, таких как Debian 10, точно так же.

Мы будем использовать инструмент командной строки Linux, Терминал, для компиляции простой программы на C. Чтобы открыть Терминал, вы можете использовать Ubuntu Dash или сочетание клавиш Ctrl+Alt+T.

Шаг 1. Установите необходимые для сборки пакеты

Чтобы скомпилировать и выполнить программу C, в вашей системе должны быть установлены необходимые пакеты. Введите следующую команду от имени пользователя root в терминале Linux:

Вас попросят ввести пароль для root; после этого начнется процесс установки. Убедитесь, что вы подключены к Интернету.

Шаг 2. Напишите простую программу на C

После установки необходимых пакетов давайте напишем простую программу на C.

Откройте графический текстовый редактор Ubuntu и напишите или скопируйте в него следующий пример программы:

Затем сохраните файл с расширением .c. В этом примере я называю свою программу на C как sampleProgram.c

В качестве альтернативы вы можете написать программу C через Терминал в gedit следующим образом:

Это создаст файл .c, в котором вы сможете написать и сохранить программу.

Шаг 3. Скомпилируйте программу C с помощью компилятора gcc

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

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

Шаг 4. Запустите программу

Последний шаг — запустить скомпилированную программу на C. Для этого используйте следующий синтаксис:

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

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

Похожие сообщения:

Карим Буздар

Об авторе: Карим Буздар имеет степень инженера в области телекоммуникаций и несколько сертификатов системного администратора. Как ИТ-инженер и технический автор, он пишет для различных веб-сайтов. Вы можете связаться с Каримом в LinkedIn

Одним из самых сложных изменений для пользователей, переходящих с Windows на Linux, является мысль о том, что не каждое программное обеспечение, которое вы хотите установить, готово для вас. В отличие от пользователей Windows, которые (в большинстве случаев) получают программное обеспечение, предварительно упакованное в установщик EXE или ZIP-файл, пользователям Linux часто приходится компилировать свои собственные пакеты программного обеспечения.

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

Скачивание исходных файлов

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

Однако более вероятно, что вы пытаетесь скомпилировать программный пакет для Linux от другого разработчика. Популярные сайты обмена кодом, такие как Github, позволяют просматривать и загружать исходный код пакетов, который затем можно скомпилировать. Вы можете использовать GIT, популярную систему контроля версий, для загрузки исходных файлов на свой компьютер.

Вы также можете напрямую загрузить исходный код из проектов с открытым исходным кодом, таких как VLC. Обычно они поставляются в сжатом формате файла, таком как TAR.GZ, который вы можете извлечь на терминале с помощью команды tar. Например, запуск команды tar -xzvf source.tar.gz приведет к извлечению tar-файла с именем source.tar.gz.

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

Установка Build-Essential в Linux

Инструменты и программное обеспечение, содержащиеся в пакете build-essential, необходимы для компиляции любого программного обеспечения в операционных системах Linux, независимо от языка программирования вашего исходного кода.

Важнейший пакет build-essential (или пакеты с аналогичными названиями) должен быть доступен в репозитории программного обеспечения для вашего дистрибутива Linux. Эквивалент build-essential в дистрибутивах на базе Arch Linux называется base-devel и включает многие из тех же инструментов.

Инструкции по установке build-essential также различаются в зависимости от вашего дистрибутива Linux. Например, в операционных системах на основе Ubuntu и Debian вы можете установить build-essential, открыв окно терминала и введя sudo apt install build-essential.

При установке build-essential также будут установлены его зависимости, например пакет g++. После завершения этого процесса вы можете перейти к настройке исходного кода Linux перед его компиляцией.

Выполнить команду настройки

Исходный код основных пакетов обычно содержит сценарий настройки. Запуск этого скрипта проверит ваш дистрибутив Linux на наличие необходимых пакетов, которые ваш исходный код должен правильно компилировать.

Чтобы запустить скрипт configure, введите папку для извлеченного исходного кода с помощью команды cd. Оттуда введите ./configure в терминал, нажав Enter, чтобы запустить его.

Если скрипт configure обнаружит отсутствующий пакет, он сообщит вам, что делать в конце скрипта. Например, перед компиляцией медиаплеера VLC запущенный выше скрипт configure обнаружил, что язык программирования Lua не установлен.

В некоторых случаях вы по-прежнему можете компилировать и настраивать пакеты программного обеспечения, даже если скрипт configure обнаружил отсутствующий пакет или функцию. Сценарий configure для VLC (показан выше) предложил решение для отсутствующих пакетов языка программирования Lua, предложив вам запустить его снова с флагом –disable-lua, чтобы обойти его.

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

Если скрипт configure завершился без ошибок (или с незначительными ошибками), будет создан настроенный make-файл для вашего пакета. Это создает инструкции для компиляции вашего пакета, позволяя вам перейти к заключительному этапу компиляции программного обеспечения.

Установите отсутствующие пакеты зависимостей

Сценарий configure помогает определить любые пакеты, которые необходимы вашему дистрибутиву Linux для корректной компиляции и установки нового программного пакета.

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

Как только вы узнаете, что это за отсутствующий пакет, используйте установщик пакетов для вашего дистрибутива Linux, чтобы установить его. Например, в операционных системах на основе Ubuntu и Debian запуск sudo apt install имя_пакета приведет к установке пакета.

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

Как компилировать в Linux

Пакет build-essential содержит make, автоматический инструмент, используемый для начала компиляции вашего исходного кода в программное обеспечение, которое вы можете запустить на своем ПК. Он использует файл makefile, сконфигурированный и созданный предыдущей командой configure, который содержит конкретные инструкции, необходимые для компиляции вашего пакета.

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

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

Для этого введите sudo make install в терминале. Пакет будет установлен на вашем ПК с Linux, готовый к открытию и использованию, как и любое другое программное обеспечение.

Установка нового программного обеспечения в Linux

Знание того, как компилировать пакеты программного обеспечения в Linux, поможет вам установить менее распространенное программное обеспечение. Основные операционные системы, такие как Ubuntu и Devian, имеют большие репозитории программного обеспечения, доступные пользователям, поэтому, если вы не хотите компилировать свое программное обеспечение, попробуйте вместо этого найти и установить новое программное обеспечение с помощью диспетчера пакетов.

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

Бен Стоктон (Ben Stockton) – внештатный писатель-технолог из Великобритании. В прошлой жизни Бен был преподавателем колледжа в Великобритании, обучая подростков и взрослых. Покинув класс, Бен воспользовался своим педагогическим опытом и применил его к написанию технических практических руководств и учебных пособий, специализирующихся на Linux, Windows и Android. Он имеет степень в области истории и аспирантуру в области вычислительной техники. Прочитать полную биографию Бена

Понравился ли вам этот совет? Если это так, загляните на наш канал YouTube на нашем родственном сайте Online Tech Tips. Мы охватываем Windows, Mac, программное обеспечение и приложения, а также предлагаем множество советов по устранению неполадок и обучающих видеороликов. Нажмите кнопку ниже, чтобы подписаться!

Когда-то мысль об обновлении ядра Linux вселяла страх в сердца многих пользователей. Тогда процесс обновления ядра требовал много шагов и еще больше времени. Теперь установка нового ядра может быть легко выполнена с помощью менеджеров пакетов, таких как apt. С добавлением определенных репозиториев вы даже можете легко установить экспериментальные или специальные ядра (например, ядра реального времени для производства аудио), не заморачиваясь.

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

Вы просто хотите знать, как это делается.

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

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

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

Вы студент, и это задание.

Независимо от того, почему, знание того, как скомпилировать ядро ​​​​Linux, очень полезно и даже может рассматриваться как право прохода. Когда я впервые скомпилировал новое ядро ​​Linux (давным-давно) и смог загрузиться с указанного ядра, я почувствовал некий трепет, проходящий через мою систему (которая была быстро раздавлена ​​при следующей моей попытке, но потерпела неудачу).
С учетом сказанного давайте рассмотрим процесс компиляции ядра Linux. Я буду демонстрировать на Ubuntu 16.04 Server. После стандартного обновления sudo apt установлено ядро ​​4.4.0-121. Я хочу перейти на ядро ​​4.17. Давайте позаботимся об этом.

Предупреждение: я настоятельно рекомендую вам попрактиковаться в этой процедуре на виртуальной машине. Работая с виртуальной машиной, вы всегда можете создать моментальный снимок и с легкостью устранить любые проблемы. НЕ обновляйте ядро ​​таким образом на производственной машине... пока не поймете, что делаете.

Загрузка ядра

Пока этот файл загружается, нужно позаботиться о нескольких битах.

Требования к установке

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

Обратите внимание: вам потребуется не менее 12 ГБ свободного места на локальном диске, чтобы выполнить процесс компиляции ядра. Поэтому убедитесь, что у вас достаточно места.

Извлечение исходного кода

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

Перейдите во вновь созданный каталог с помощью команды cd linux-4.17-rc2 .

Настройка ядра

Прежде чем мы на самом деле скомпилируем ядро, мы должны сначала настроить, какие модули включать. На самом деле есть очень простой способ сделать это. С помощью одной команды вы можете скопировать текущий файл конфигурации ядра, а затем использовать проверенную и надежную команду menuconfig для внесения любых необходимых изменений. Для этого введите команду:

Теперь, когда у вас есть файл конфигурации, введите команду make menuconfig .Эта команда откроет инструмент настройки (рис. 1), который позволит вам просмотреть каждый доступный модуль и включить или отключить то, что вам нужно или не нужно.

Рисунок 1: make menuconfig в действии.

Вполне возможно, что вы отключите критическую часть ядра, поэтому внимательно пройдитесь по menuconfig. Если вы не уверены в выборе, оставьте его в покое. Или, что еще лучше, придерживайтесь конфигурации, которую мы только что скопировали из работающего ядра (поскольку мы знаем, что она работает). Когда вы просмотрите весь список (он довольно длинный), вы готовы к компиляции!

Компиляция и установка

Теперь пришло время собственно скомпилировать ядро. Первым шагом является компиляция с помощью команды make. Итак, выдайте make, а затем ответьте на необходимые вопросы (Рисунок 2). Задаваемые вопросы будут определяться тем, с какого ядра вы обновляетесь и до какого ядра вы обновляетесь. Поверьте мне, когда я говорю, что есть масса вопросов, на которые нужно ответить, поэтому уделите этому достаточно времени.

Рисунок 2. Ответы на вопросы команды make.

Ответив на множество вопросов, вы можете установить модули, которые вы включили, с помощью команды:

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

Теперь устанавливаем ядро ​​командой:

Опять же, еще одна команда, которая займет значительное количество времени. Фактически, команда make install займет даже больше времени, чем команда make modules_install. Идите пообедайте, настройте роутер, установите Linux на несколько серверов или вздремните.

Включить загрузку ядра

После выполнения команды make install самое время разрешить загрузку ядра. Для этого введите команду:

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

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

Поздравляем!

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

Узнайте больше о Linux из бесплатного курса «Введение в Linux» от The Linux Foundation и edX.

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

Вы хотите исправить ошибку в программном пакете или просто изменить пакет в соответствии со своими потребностями? Linux поможет вам.

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

Давайте рассмотрим, как скомпилировать и установить пакет из исходного кода в Linux.

Шаг 1. Установка необходимых инструментов

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

Большинство программного обеспечения для Linux написано на языках программирования C или C++, поэтому вам потребуется компилятор C или C++. Например, Коллекция компиляторов GNU (GCC) и CMake для сборки вашего пакета.

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

В дистрибутивах на основе Debian, таких как Ubuntu:

В Arch Linux и его производных:

В дистрибутивах на основе RPM, таких как Fedora, RHEL и т. д.:

Шаг 2. Загрузка исходного кода пакета

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

Большинство пакетов, которые вы можете скомпилировать, можно найти на официальном сайте соответствующего пакета. Вы можете загрузить файлы исходного кода с помощью инструмента командной строки curl. Кроме того, вы можете использовать wget или графический интерфейс.

Загрузите исходный код в папку «Загрузки» на своем ПК, затем перейдите в папку «Загрузки» с помощью команды cd.

После того, как вы окажетесь в папке «Загрузки», вы можете загрузить исходный код Git с помощью curl следующим образом. В этом руководстве мы загрузим Git версии 2.26.2, но вы можете выбрать любую версию.

Команда curl указывает, что исходный код следует поместить в заархивированный файл с именем git.tar.gz.

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

Чтобы извлечь содержимое заархивированного файла, вы можете использовать команду tar.

Шаг 3. Компиляция исходного кода

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

Всегда полезно взглянуть на файлы README.md или INSTALL, поскольку они содержат ценную информацию о том, как скомпилировать и установить пакет. Эти файлы обычно находятся в корневой папке исходного кода.

Другим важным файлом является скрипт configure. Он проверяет программные зависимости для пакета, который вы хотите скомпилировать, и вы увидите сообщение об ошибке, если скрипт обнаружит отсутствующие зависимости.

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

Шаг 4. Сборка программного пакета

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

Команда make использует файл Makefile, содержащий необходимые инструкции по сборке программного пакета.

Процесс компиляции займет некоторое время в зависимости от вычислительной мощности вашего компьютера и размера пакета.

Шаг 5. Установка программного пакета

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

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

Проверьте версию Git, которую вы только что установили, с помощью команды:

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

Альтернативные методы установки программного обеспечения в Linux

В этом руководстве рассматривается, как компилировать и создавать программное обеспечение из исходного кода в Linux с использованием Git в качестве учебного примера. Установка программного обеспечения из исходного кода дает вам столько свободы в настройке программного обеспечения по своему вкусу, что просто замечательно.

Большинство дистрибутивов Linux предоставляют множество вариантов установки программного обеспечения. Например, в Arch Linux вы можете использовать менеджеры пакетов Pacman и Yay.

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

Однако поиск аппаратной поддержки продолжается, потому что чем больше аппаратного обеспечения выпускается, тем больше элементов ядро ​​должно внедрить в свой код, чтобы аппаратное обеспечение работало должным образом. Трудно получить точные цифры, но ядро ​​Linux, безусловно, входит в число лучших ядер по аппаратной совместимости. Linux работает с бесчисленными компьютерами и мобильными телефонами, встроенными системами на кристалле (SoC) для любительского и промышленного использования, картами RAID, швейными машинами и многим другим.

Ещё в 20 веке (и даже в первые годы 21 века) пользователю Linux было вполне разумно ожидать, что при покупке совершенно нового оборудования ему нужно будет загрузить самое последнее ядро. исходный код, скомпилируйте его и установите, чтобы они могли получить поддержку устройства. Однако в последнее время вам будет трудно найти пользователя Linux, который компилирует свое собственное ядро, кроме как для развлечения или получения прибыли за счет узкоспециализированного пользовательского оборудования. В наши дни обычно не требуется самостоятельно компилировать ядро ​​Linux.

Вот почему, а также краткое руководство о том, как скомпилировать ядро, когда вам нужно.

Обновите существующее ядро

Независимо от того, есть ли у вас совершенно новый ноутбук с модной новой видеокартой или набором микросхем WiFi, или вы только что принесли домой новый принтер, ваша операционная система (называемая либо GNU+Linux, либо просто Linux, что также ядра) нужен драйвер для открытия каналов связи с этим новым компонентом (видеокартой, микросхемой Wi-Fi, принтером или чем-то еще). Иногда это может быть обманчиво, когда вы подключаете новое устройство, а ваш компьютер кажется распознающим его. Но не позволяйте этому обмануть вас. Иногда этого достаточно, а иногда ваша ОС просто использует общие протоколы для проверки подключенного устройства.

Например, ваш компьютер может идентифицировать ваш новый сетевой принтер, но иногда это происходит только потому, что сетевая карта в принтере запрограммирована на идентификацию себя в сети, чтобы получить DHCP-адрес. Это не обязательно означает, что ваш компьютер знает, какие инструкции нужно отправить на принтер для печати страницы с текстом. На самом деле вы можете возразить, что компьютер даже на самом деле не «знает», что устройство является принтером; он может отображать только то, что по определенному адресу в сети есть устройство, и устройство идентифицирует себя серией символов p-r-i-n-t-e-r. Условности человеческого языка бессмысленны для компьютера; ему нужен драйвер.

Разработчики ядра, производители оборудования, специалисты службы поддержки и любители знают, что постоянно выпускается новое оборудование. Многие из них предоставляют драйверы, отправленные непосредственно команде разработчиков ядра для включения в Linux. Например, драйверы графических карт Nvidia часто записываются в модуль ядра Nouveau, и, поскольку карты Nvidia распространены, код обычно включается в любое ядро, распространяемое для общего использования (например, ядро, которое вы получаете при загрузке Fedora или Ubuntu). Nvidia встречается реже, например, во встроенных системах модуль Nouveau обычно исключается. Аналогичные модули существуют для многих других устройств: принтеры выигрывают от Foomatic и CUPS, беспроводные карты имеют модули b43, ath9k, wl и т. д.

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

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

Как правило, это делается с помощью диспетчера пакетов. Например, в RHEL, CentOS и Fedora:

В Debian и Ubuntu сначала получите текущую версию ядра:

Поиск новых версий:

Установите последнюю найденную версию. В этом примере последней доступной версией является 5.2.4:

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

Установите модуль ядра

Иногда дистрибутив не предполагает, что его пользователи будут часто использовать устройство (или, по крайней мере, недостаточно того, что драйвер устройства должен находиться в ядре Linux). Linux использует модульный подход к драйверам, поэтому дистрибутивы могут поставлять отдельные пакеты драйверов, которые могут быть загружены ядром, даже если драйвер не компилируется в само ядро. Это полезно, хотя может усложниться, когда драйвер не включен в ядро, но необходим во время загрузки, или когда ядро ​​обновляется из-под модульного драйвера. Первая проблема решается с помощью initrd (начальный RAM-диск) и выходит за рамки этой статьи, а вторая решается с помощью системы kmod.

Однако, если вы устанавливаете драйверы Nvidia в виде пакета kmod, обновление ядра также приводит к обновлению драйвера Nvidia. В Fedora и связанных с ней:

О Debian и связанных с ним:

Это всего лишь пример, но если вы устанавливаете драйверы Nvidia в реальной жизни, вы также должны занести в черный список драйвер Nouveau. Лучшие шаги смотрите в документации к вашему дистрибутиву.

Скачать и установить драйвер

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

Двумя распространенными примерами являются принтеры HP и графические планшеты Wacom. Если вы приобрели принтер HP, у вас, вероятно, есть универсальные драйверы, которые могут взаимодействовать с вашим принтером. Возможно, вы даже сможете распечатать. Но общий драйвер может не предоставлять специализированные параметры, специфичные для вашей модели, такие как двусторонняя печать, сортировка, выбор лотка для бумаги и т. д. HPLIP (система обработки изображений и печати HP Linux) предоставляет возможности для управления заданиями, настройки параметров печати, выбора лотков для бумаги, где это применимо, и т. д.

HPLIP обычно входит в состав менеджеров пакетов; просто найдите "hplip".

Точно так же драйверы для планшетов Wacom, ведущего графического планшета для цифровых художников, обычно включаются в ваше ядро, но параметры точной настройки, такие как чувствительность к давлению и функциональность кнопок, доступны только через встроенную графическую панель управления. по умолчанию с GNOME, но его можно установить как дополнительный пакет kde-config-tablet в KDE.

Вероятно, существуют крайние случаи, когда драйверы в ядре отсутствуют, но предлагаются kmod-версии модулей драйверов в виде RPM- или DEB-файла, который можно загрузить и установить с помощью диспетчера пакетов.

Исправление и компиляция собственного ядра

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

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

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

Официально для каждого дистрибутива существуют настройки того, как вам следует компилировать ядро, чтобы ваш менеджер пакетов участвовал в обновлении такой жизненно важной части вашей системы. Существует слишком много менеджеров пакетов, чтобы охватить каждый; например, вот что происходит за кулисами, когда вы используете такие инструменты, как rpmdev в Fedora или build-essential и devscripts в Debian.

Сначала, как обычно, узнайте, какую версию ядра вы используете:

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

Традиционно, по крайней мере, когда люди регулярно компилировали свои собственные ядра, было принято размещать исходный код и исправления в /usr/src/linux.

При необходимости разархивируйте исходный код ядра и файлы исправлений:

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

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

Команда make oldconfig служит двум целям: она наследует текущую конфигурацию вашего ядра и позволяет настраивать новые параметры, введенные патчем.

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

Далее скомпилируйте ядро ​​и его модули:

В результате у вас остается файл с именем vmlinuz, представляющий собой сжатую версию загружаемого ядра. Сохраните старую версию и поместите новую в каталог /boot:

На данный момент вы исправили и собрали ядро ​​и его модули, вы установили ядро, но не установили никаких модулей. Это последний шаг сборки:

Новое ядро ​​установлено, и его модули установлены.

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

Реальная компиляция

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

Ядра

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

Читайте также: