Проприетарные драйверы

Материал из База знаний проекта Russian Fedora

Перейти к: навигация, поиск

Содержание

Пропритерные драйверы в Fedora Linux

Вступление

Многие ругаются, что процесс установки проприетарных драйверов устройств труден, сложен, после разных обновлений настройки слетают, Х-ы не запускаются (на nvidia или catalyst).

Процесс установки не так труден, как кажется, все трудности от непонимания тех шагов, которые воспроизводит человек по некоей инструкции. Итак, в Fedora Linux проприетарные драйверы устройств предоставляются в подавляющем большинстве хранилищем и командой rpmfusion.org. Все драйверы носят однотипное название, которое начинается с "kmod-" (Kernel module, модуль ядра). Как пример kmod-nvidia, kmod-catalyst, kmod-wl, kmod-rt2870. Что из себя представляет пакет с модулем ядра? Пакет kmod содержит уже готовые, скомпилированные модули ядра под определенную версию, т.е. с каждым обновлением ядра требуется новый пакет kmod. Были случаи, когда ядро приходило, а обновление пакетов kmod - нет, ребята из rpmfusion сознают, что сей механизм не совершенен, подвержен человеческому фактору и может быть причиной сбоя работы всей системы, поэтому в rpmfusion был разработан механизм, а проще говоря новый вариант пакетов для модулей ядра, который полностью совместим с нативными kmod'ами, пакеты эти начинаются с "akmod-" (Automatic Kernel Module), и содержат исходные коды для модулей ядра, а также зависят от набора утилит akmods. akmods стартует при запуске системы и проверяет наличие kmod-пакетов для текущего ядра, если таковых нет, то самостоятельно требуемый пакет собирает и устанавливает. Таким образом, независимо от обновлений, у нас в руках всегда работающий драйвер.

Минусы и плюсы kmod и akmod

У kmod-пакетов, как я упоминал, минус один, они уже собраны под определенную версию ядра и под другую версию уже не годятся. Но этот данную проблему устраняют akmod-пакеты. Негативная сторона есть и у akmod-пакетов, и проявляется она в том, что требуется доустановить сборочные пакеты, средства разработки для ядра, пакеты файлов для разработчиков. Все пакеты устанавливаются как зависимости к akmods. Все это хозяйство не маленького размера, чем многим и не нравится. Выбор в любом случае за вами.

Собственно при установке kmod-пакетов особых проблем нет, обычно каждый kmod "тащит" за собой по зависимостям несколько пакетов, часто эти пакеты - библиотеки для работы драйвера. Но, поскольку ядро linux развивается семимильными шагами (или сотнями тысяч строк кода), постольку в 80% случаев в ядре уже есть свободный драйвер для устройства, так, например, свободный драйвер для видео-карт ATI/AMD называется radeon, или для wifi-адаптеров Broadcom - b43. Те или иные драйверы работают, кто хуже, кто лучше, но, в любом случае, редко свободный драйвер полностью использует все возможности устройства или же устройство с ним не работает, как требуется, вовсе. Хотя процесс доведения свободных реализаций драйверов также идет достаточно плотно и быстро: примером может служить nouveau (свободный драйвер для видео-карт Nvidia), в Fedora Linux 13 моя nvidia GTS250 работает на драйвере Нуво очень не плохо, мне хватает. :) Я не буду спорить, какие, у кого и как драйверы работают лучше, а какие - хуже, это вопрос для ЛОРа и лоррей. В любом случае, решившись установить проприетарный драйвер, надо отключить свободный, т. е. попросту запретить ядру загружать его. Все встреченные мной kmod-пакеты или пакеты, от которых они зависят несут в себе небольшой конфигурации файл для этих целей, обычно он называется примерно так: blacklist-<modulename>.conf, и после установки располагается в /etc/modprobe.d. Но! и это важно, для того, чтобы этот файлик начал работать, в большинстве случаев требуется пересобрать initrd, о чем, кстати, не всегда упоминает rpmfusion (видимо мейнтейнеры пакетов там достигли некоего уровня "Зубров" или гуру линукс и на мелочи не отвлекаются, однако это важно).

Обновление initrd

Сейчас в текущей 12-ой версии или в грядущей 13-ой существует набор скриптов под названием dracut, многие опытные пользователи Fedora Linux (да и сам rpmfusion) утверждают, что обновлять надо им, это так. Однако в Fedora Linux есть куда более простое средство, которое куда легче запомнить и более того, команда (которую я приведу ниже) обновления ядра работает корректно с 10-ой версии (возможно, что и с более ранней, память у меня короткая). Команда эта выполняется так:

/usr/libexec/plymouth/plymouth-update-initrd

И я думаю, что команда сия будет существовать достаточное время еще, вне зависимости от того, какие средства будут применяться для обновления initrd: dracut, mkinitrd или что-то новое. Рекомендую, после установки пакетов kmod или akmod выполнить команду обновления initrd. В невыполнении данного шага кроется треть ошибок установки пользователем.

Подводные камни akmod

Если Вы решились установить akmod-пакет, дабы избавиться от проблем в будующем, то с вероятностью в 50% они (проблемы) настигнут Вас почти сразу. С недавнего момента в Fedora Linux для 32-х битной архитектуры по-умолчанию устанавливается т.н. PAE-ядро, т.е. ядро с поддержкой расширения адресации памяти PAE. Тут кроется один большой подводный камень, поскольку akmod-пакеты по зависимостям "стаскивают" с хранилищ пакет разработки ядра, для PAE-ядер не предназначенный, а вместе с ним и само generic-ядро, пользователь в неведении перегружается предвкушая увидеть работу "любимого", явно за недешево купленного устройства и, бах, устройство после перезагрузки не работает. А причина в том, что скрипты akmods не смогли найти пакет для разработки PAE-ядра. А теперь главное, советы:

akmods --force

или так:

/usr/sbin/akmods --force

Данная команда сразу скажет Вам, будет ли собран kmod-пакет или нет, ну и соберет его тоже сразу :)

Подводные камни kmod

По собственным наблюдениям, при обновлении ядра kmod-пакеты обновляются при следующем yum update (ну или чем Вы обновляете). Т.е. производя обновление системы и узрев в списке пакетов kernel (или kernel-PAE), после обновления, не поленитесь - запустите процесс обновления снова, ну так, на всякий случай. Часто бывает (судя по не редким призывам к помощи на форуме и fedora@conference.jabber.ru), что человек обновил все пакеты, перезагрузился (поскольку этого потребовала система), а kmod-пакеты не обновились и все, ступор. В таковых случая помогает запустить yum update снова или же попробовать напрямую установить yum install kmod-<module_name>-`uname -r`. Конечно если это не модуль wifi, а wifi не единственный способ связи с внешним миром. Вот именно из-за таких ситуаций мне нравится использовать akmod-пакеты, но я не наставиваю и не вербую в приверженцы своего имхо.

Просто камни, совсем не подводные

Совет всем, кто использует проприетарные драйверы, но не использует для их установки пакеты из rpmfusion. Совет такой - используйте пакеты. Если пакетов нет, то напишите в rpmfusion, если Вы не знаете английского языка - напишите на форум forum.russianfedora.ru или в bugzilla.russianfedora.ru, мы либо переправим Ваш запрос, либо сделаем пакет и разместим в хранилище Russian Fedora Remix. В любом случае Вы гораздо быстрее будете избавлены от проблем. Если Вы уже используете установленный, самомтоятельно или нативным установщиком, драйвер, что делать? Мой совет - перейти всеже к использованию пакета, процесс этот, конечно, не так прост и с большой вероятностью приведет к ошибкам в работе (временным, все можно исправить). Также процесс сей - достаточно индивидуален, поэтому, приняв решение - советую обратиться за помощью на форум, а лучше в jabber-конференцию федоры (адрес я приводил выше).

Частые сбои. Чаще всего сбои происходят в драйверах видео-карт (nvidia, ati/amd). Пользователь обновляет систему, перезагружается и Xы не загружаются. Это может произойти из-за

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