Зачем устанавливать драйвера, если они поставляются с ядром Linux?

Зачем устанавливать драйвера, если они поставляются с ядром Linux?
Зачем устанавливать драйвера, если они поставляются с ядром Linux? - davidmarcu @ Unsplash

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

Мой второй вопрос: почему установить эти драйверы было так же просто, как запустить команду pacman -S в терминале? Я имею в виду, что поскольку драйверы настолько низкого уровня и загружаются при запуске ОС, я, по крайней мере, ожидаю, что мне придется загружать их с веб-сайта моего производителя и устанавливать вручную. Или, по крайней мере, перезагрузить компьютер.

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

Не все вещи, называемые «драйверами», на самом деле являются драйверами ядра.

Некоторые из них являются просто библиотеками пользовательского пространства, которые работают поверх того, что предоставляет ядро. Например, все OpenGL и Vulkan реализованы в виде библиотек (libGL и т. д.), а в Linux они обычно поступают из проекта Mesa. Драйвер ядра знает, как общаться с вашим AMDGPU, но Mesa знает, что сказать — «драйверы», предоставляемые Mesa, компилируют шейдеры OpenGL в соответствии с инструкциями для конкретного графического процессора, прежде чем загружать их через драйвер ядра в графический процессор.

Так что, если вы устанавливаете что-то вроде vulkan-radeon, это драйвер, а не драйвер ядра. Можно сказать, что это «верхний уровень» драйвера, а часть, находящаяся в ядре, — «нижний уровень».

Кроме того, хотя для каждой системы существует только один тип драйвера ядра, библиотеки (например, библиотеки Mesa) загружаются в каждую отдельную программу и, следовательно, имеют как 64-разрядные, так и 32-разрядные версии. У вас уже есть 64-битный пакет Mesa, но если вы хотите запустить 32-битную игру через Wine, вам также необходимо установить пакет «lib32» тех же библиотек.

В Windows все эти части предоставляются непосредственно AMD, поэтому все они поставляются в одном и том же установочном комплекте — если вы устанавливаете «драйверы AMD», вы получаете как драйверы ядра, так и библиотеки OpenGL/DirectX (как 64-разрядные, так и 32-разрядные). -битные варианты).


Кроме того, как вы заметили, большинство, но не все драйверы GPU поставляются с ядром. NVIDIA — самое большое исключение; они не вносят никакой поддержки графических процессоров в ядро, и для их графических процессоров гораздо сложнее писать неофициальные драйверы. (В отличие, например, от «radeon» для старых ATI, которые были неофициальными, но все же неплохими.) В результате ядро ​​имеет относительно простые, неофициальные драйверы для карт NVIDIA, но вы не получите от них никакой производительности — вам придется установите для этого свои драйверы с закрытым исходным кодом.

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

Эти вещи на самом деле не имеют ничего общего друг с другом. Низкоуровневые компоненты могут распространяться так же, как и высокоуровневые; в конце концов, это просто файлы. На самом деле в Windows вы получаете большинство драйверов через Центр обновления Windows. Только те, которых нет в Центре обновления Windows, вам нужно загрузить с веб-сайта производителя.

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

Драйверы, которые «встроены в ядро ​​Linux», обычно являются драйверами с открытым исходным кодом. Обычно они не обеспечивают наилучшей производительности, поскольку не поставляются непосредственно производителем. Таким образом, для любых действий с интенсивным использованием графики, таких как видеоигры в вашем случае, лучше всего установить проприетарные драйверы, которые не поставляются предустановленными. Вероятно, поэтому Lutris предлагает вам установить их.

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


NevaDev, 24 января 2023 г., 17:06