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

Сегодня я прочитал статью, в которой говорилось: «Разные дистрибутивы упаковывают разные драйверы в свои установщики, что означает, что в зависимости от того, какой дистрибутив вы используете, вы обнаружите, что разные аппаратные средства могут работать или не работать из коробки».

Что мне не хватает? Как разные дистрибутивы упаковывают разные драйверы? Как это возможно, если драйверы упакованы внутри ядра?

3 ответа3

3

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

DKMS просто добавляет некоторые приятные вещи, такие как автоматическая перекомпиляция модулей при обновлении ядра.

2

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

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

Тем не менее, существует также большая группа проприетарных драйверов, которые по понятным причинам могут не попасть в дерево ядра. Или есть драйверы, которые требуют проприетарной прошивки, которые не обязательно устанавливаются автоматически, в зависимости от того, насколько строго разработчики дистрибутивов придерживаются принципов FOSS (Free Open Source Software). Для обоих этих типов драйверов степень поддержки (не говоря уже об их технической адекватности) их законными владельцами не постоянна во времени, как в случае драйверов Wi-Fi Broadcom; отсюда необходимость разработки альтернатив FOSS. Известный случай, кроме Broadcom, - это драйверы OpenSource NVidia. Когда альтернативы с открытым исходным кодом не существует, вы можете обнаружить, что некоторые диски совместимы со старыми версиями ядра, но не с более новыми; в некоторых случаях компиляция с современными заголовками Linux не возможна, просто потому, что они могут ссылаться на системные вызовы, которые больше не существуют.

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

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

0

Попробуйте скачать исходники ядра и запустить make menuconfig . Вы увидите огромное количество опций, многие из которых являются модулями ядра, в которые можно скомпилировать (они становятся частью сгенерированного образа ядра), скомпилировать как модули (их можно загрузить с диска, когда ядро уже загружено) или не компилируется вообще.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .