Написать пост

Линукс против новичков: разбираемся с драйверами

Рассказываем, почему проблема драйверов в Линуксе — всё ещё актуальная вещь, в какой момент может всё сломаться и что делать, если драйвер в Линуксе не работает.

Старожилы, которые работали с Unix-системами лет 10-15 назад, помнят, как часто на форумах возникали вопросы «как скачать драйвер для linux» или «не работает аудиовыход — как починить». Сейчас, пусть и реже, какой-нибудь драйвер нет-нет, да и отвалится. Основных причин, почему такое возникает, две:

  1. Все драйверы содержатся в ядре системы. Обновляется дистрибутив — ядро пересобирается, обновляются или удаляются старые драйверы, и устройство, прекрасно работающее долгие годы, просто «отваливается».
  2. Политика некоторых дистрибутивов достаточно жесткая: например, в ядре содержатся только драйвера со свободной лицензией. Поэтому с компонентами от AMD и Intel проблем не возникает, а вот для того, чтобы настроить видеокарту от NVidia, нужно заморочиться.

С мышками, клавиатурами и прочими мелочами, как правило, бед не случается. Управление этими устройствами происходит через стандартные интерфейсы. Туда же можно отнести флэш-накопители, устройства NVMe и даже контроллеры USB и SATA — для них нет специфичных Linux драйверов. Что нельзя сказать про wifi-адаптер: для каждого придётся вручную подбирать необходимое ПО.

https://tproger.ru/articles/v-chyom-linux-luchwe-windows 

А это нормально, что ядро Линукса так сильно раздуто драйверами?

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

Для примера, около 380 драйверов будут весить столько же, сколько .txt-файл с первым томом «Войны и мира», или как трехминутный качественный mp3-трек. При этом Unix-системы оставляют возможность перекомпилировать ядро, избавиться от ненужных модулей и сократить его вес почти в 10 раз. Но мы настоятельно не рекомендуем заниматься этим на рабочих машинах, особенно если о такой возможности вы только что узнали.

К тому же, образ Windows тоже содержит огромное количество предустановленных драйверов. Например, для того, чтобы live usb корректно работал на любой машине.

Что не стоит делать в Linux с драйверами

Последнее, к чему советуют прибегать — это скачивать драйверы с сайтов-производителей и вручную запускать их в Unix-системе. На это есть ряд причин, рассмотрим на примере установки драйверов NVidia в Linux:

  •  драйвер может перезаписать библиотеку с графическим интерфейсом Mesa GL, из-за чего перестанет работать открытый драйвер (если вы работаете со встроенной AMD и дискретной NVidia-картой, то система при обновлении не сможет распознать даже AMD);
  • установленный с сайта драйвер не обновится с ядром, его нужно будет переустанавливать вручную;
  • в случае, если у вас отвалятся оба драйвера, придётся накатывать обновления через CLI (терминал).

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

Что делать, если что-то не работает в Линукс?

1. Воспользуйтесь встроенным ПО

В Линуксе нет привычного для Windows-пользователей диспетчера устройств. Но можно воспользоваться аналогами, например, «Additional driver» в Ubunta или менеджером пакетов для GNOME в других дистрибутивах. На крайний случай скачать утилиту Inspector

Посмотрите, какие драйверы уже установлены

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

			$ lscpci
		

Если у вас есть название драйвера — то можно воспользоваться командой grep (она помогает фильтровать вывод по ключевому слову).

			$ lscpci | grep SOME_DRIVER_KEYWORD
		

Например, вы можете ввести lspci | grep NVIDIA, если хотите узнать, установлен ли драйвер NVidia.

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

			$ dmesg
		

или, по аналогии,

			$ dmesg | grep SOME_DRIVER_KEYWORD
		

Если команды dmesg или lscpi вывели нужный вам драйвер, значит, проблема не в нём. А вот если они ничего не дали, значит, драйвер не установлен или не распознаётся. Тут нужно проверить, есть ли драйвер в файловой системе:

			$ /sbin/lsmod
		

и

			$ find /lib/modules
		

Тут тоже можно использовать | grep SOME_DRIVER_KEYWORD. Если драйвер распознается этими командами, но не lscpi или dmesg, это означает, что драйвер находится на диске, но не в ядре. В этом случае загрузите модуль с помощью команды modprobe:

			$ sudo modprobe MODULE_NAME
		

Обратитесь к wiki

Если вам нужны проприетарные драйверы, перейдите в документацию вашего дистрибутива или на специальную wiki и найдите, для чего вам нужны драйверы (например, для "nvidia"). Скорее всего, правильному способу это сделать будет посвящена целая страница. Вот для примера вики по Astra Linux и установке NVidia-драйверов.

https://tproger.ru/books/linux 

Заключение

Проблема с драйверами в Линуксе достаточно масштабная: при очередном обновление ядра устройства могут внезапно выйти из строя, начать греться или наоборот, лучше работать. Хорошая новость заключается в том, что по каждому популярному оборудованию можно найти репозитории с проприетарными драйверами, а также пошаговую инструкцию, как их накатить. Если вы всё же нацелены перейти на Linux и хотите выбрать хороший дистрибутив, то наш материал может помочь.

Следите за новыми постами
Следите за новыми постами по любимым темам
627 открытий5К показов