- Драйверы устройств в Linux
- Часть 11: Драйверы USB в Linux
- Обнаружение устройства USB в Linux
- Разбираемся в секции, описывающей устройство USB
- Регистрация драйвера USB для флеш устройства
- Подведем итог
- Linux Mint установка драйвера
- Linux Mint установка видео драйвера Nvidia
- Linux Mint установка видео драйвера Ati (AMD)
- Linux Mint установка видео драйвера Intel
- Linux Mint установка драйвера принтера
- Как установить драйвер Realtek RTL8821CE
- Офлайн установка Realtek RTL8821CE
- Установка драйвера Realtek RTL8821CE в Ubuntu 21.04 и более поздние
- Установка драйвера Realtek RTL8821CE в Ubuntu 20.04
- Как установить драйвер Realtek RTL8821CE в Debian, Ubuntu, Kali Linux, Linux Mint и их производные
- Как установить драйвер Realtek RTL8821CE в Arch Linux, BlackArch и их производные
- Как установить драйвер Realtek RTL8821CE в Gentoo
- Удаление драйвера
- Обновление драйвера
- Возможные проблемы
- Secure Boot
- PCIe Activate State Power Management
- Ноутбуки Lenovo Yoga
Драйверы устройств в Linux
Часть 11: Драйверы USB в Linux
Оригинал: «Device Drivers, Part 11: USB Drivers in Linux»
Автор: Anil Kumar Pugalia
Дата публикации: October 1, 2011
Перевод: Н.Ромоданов
Дата перевода: июнь 2012 г.
Эта статья, которая является частью серии статей о драйверах устройств в Linux, поможет вам начать писать ваш первый драйвер USB в системе Linux.
Флеш устройство Пагса было именно тем устройством, которым Светлана воспользовалась, когда они сели вдвоем за изучение мира драйверов USB в Linux. Самым быстрым способом с ним разобраться был обычный способ Пагса — выбрать устройство USB и написать для него драйвер для того, чтобы с ним поэкспериментировать. Поэтому они выбрали флэш устройство (т.е. USB флешку), которое было под рукой — JetFlash от Transcend, с ID поставщика 0x058f и ID продукта 0x6387 .
Обнаружение устройства USB в Linux
Независимо от того, есть ли драйвер для устройств USB в Linux системе или его нет, допустимое устройство USB всегда будет обнаруживаться в системе Linux в пространстве аппаратных средств и в пространстве ядра, поскольку система создана (и выполняет обнаружение) в соответствии со спецификациями протокола USB. Обнаружение в аппаратном пространстве осуществляется хост контроллером USB — как правило, соответствующем шинным устройством, аналогичным устройству PCI в системах x86. Соответствующий драйвер хост-контроллера обнаруживает устройство и транслирует информацию низкоуровнего физического слоя в конкретную информацию более высокого уровня протокола USB. Затем информация протокола USB, касающаяся устройства и, имеющая специальный формат, заносится в общий слой ядра USB (драйвер usbcore) в пространстве ядра, что позволяет обнаруживать устройства USB в пространстве ядра даже в том случае, когда отсутствует драйвер конкретного устройства.
Дальше — дело различных драйверов, интерфейсов и приложений (которые различны в различных дистрибутивах Linux) отображать обнаруженные устройства в пользовательском пространстве. На рис.1 показана иерархия подсистемы USB в Linux.
Рис.1: Подсистема USB в Linux
Краткий список всех обнаруженных устройств USB можно получить с помощью команды lsusb , которую следует запустить в роли пользователя root. На рис.2 приведен такой список как для случая с флэш устройством, так и без него. Параметр -v в команде lsusb позволяет получить более подробную информацию.
Рис.2: Информация, выдаваемая командой lsusb
Во многих дистрибутивах Linux, таких как Mandriva, Fedora, . , драйвер usbfs сконфигурирован так, что он загружается по умолчанию. В результате можно с помощью команды cat /proc/bus/usb/devices из директория /proc извлечь конкретную информации об обнаруженном USB-устройстве, представленную в удобном виде. На рис.3 показан типичный пример такой информации, которая находится в специальной секции, описывающей флэш-устройство. В списке обычно присутствует по одному такому разделу для каждого допустимого устройства USB, обнаруженного в системе.
Рис.3: Фрагмент информации из proc, касающейся USB
Разбираемся в секции, описывающей устройство USB
Чтобы дальше разбираться с этими секциями, нужно в первую очередь понять, что такое допустимое устройство USB. Для всех допустимых устройств USB есть одна или несколько конфигураций. Конфигурация устройства USB похожа на профиль, причем в качестве конфигурации, используемой по умолчанию, обычно используется первая конфигурация. Таким образом, в Linux для каждого устройства по умолчанию поддерживается только одна конфигурация. Для каждой конфигурации в устройстве может быть один или несколько интерфейсов. Интерфейс соответствует функции, предоставляемой устройством.
Интерфейсов может быть столько, сколько есть функций, предоставляемых устройством. Так, скажем, устройство МФУ USB-принтер (многофункциональное устройство) может выполнять печать, сканирование и отправку факсов, и, скорее всего, для него будет, по крайней мере, три интерфейса, по одному для каждой из функций. Таким образом, в отличие от других драйверов устройств, драйвер USB устройства, как правило, связывается / пишется отдельно для каждого интерфейса, а не для устройства в целом — это значит, что для устройства USB может быть несколько драйверов устройств, причем для интерфейсов различных устройств может использоваться один и тот же драйвер, — хотя, конечно, для одного интерфейса не может быть более одного драйвера.
Вполне нормальной и достаточно обычной является ситуация, когда для всех интерфейсов устройства USB используется один и тот же драйвер USB. В записи Driver=. для директория proc (рис. 3) показано, что в драйвер отсутствует отображение интерфейса ( none ).
Для каждого интерфейса есть один или несколько источников / приемников данных. Источник / приемник данных (endpoint) похож на конвейер (pipe), используемый для передачи информации в зависимости от функции либо в интерфейс, либо из интерфейса устройства. В зависимости от типа информации, источники / приемники данных могут быть четырех типов: Control, Interrupt, Bulk и Isochronous.
Прим.пер.: Подробное описание указанных четырех типов источников / приемников данных будет приведено в следующей статье данной серии статей.
Согласно спецификациям протокола USB во всех допустимых устройствах USB должен быть неявно используемый источник / приемник данных с номером 0 (end-point zero) — единственный двунаправленный источник / приемник данных. На рис.4 приведена полная наглядная схема допустимого устройства USB, соответствующее приведенному выше объяснению.
Рис.4: Общий взгляд на устройство USB
Вернемся обратно к секциям устройств USB (рис. 3) — первая буква в каждой строке соответствует различным частям спецификации устройства USB. Например, D — устройству, C — конфигурации, I — интерфейсу, E — источнику / приемнику данных (endpoint) и т.д. Подробнее об этом и о многом другом смотрите в исходном коде ядра в файле Documentation/usb/proc_usb_info.txt .
Регистрация драйвера USB для флеш устройства
«Похоже, для того, чтобы можно было самостоятельно написать первый драйвер USB, потребуется узнать много всего о протоколе USB, — конфигурацию устройства, интерфейсы, конвейеры передачи данных, четыре типа передачи данных, а также многие другие обозначения, например, T, B, S, …, которые есть в спецификации устройств USB» — вздохнула Светлана.
«Да, но ты не беспокойся — со всем этим можно будет разобраться подробнее позже. Давай со всем этим разбираться последовательно — возьмем интерфейс флеш устройства, связанного с драйвером нашего USB-устройства ( pen_register.ko )» — утешил Пагс.
Как и в любом другом Linux-драйвере, здесь также требуется конструктор и деструктор — используется тот же самый шаблон драйвера, который использовался для всех драйверов. Но содержимое будет другим, поскольку это драйвер слоя аппаратного протокола, т.е. горизонтальный драйвер в отличие от символьного драйвера, который был одним из вертикальных драйверов, рассмотренных ранее. Разница лишь в том, что вместо регистрации и отмены регистрации в VFS, здесь это должно выполняться на уровне соответствующего протокола — в данном случае — в ядре USB; вместо того, чтобы предоставлять интерфейс пользовательского пространства, например, файл устройства, он должен подключиться к реальному устройству в пространстве аппаратных средств.
Интерфейсы API для ядра USB выглядят следующим образом (прототип в
):
В структуре usb_driver в соответствующих полях должны быть указаны имя устройства, идентификационная таблица, используемая для автообнаружения конкретного устройства, и две функции обратного вызова, которые вызываются ядром USB при горячем подключении и отключении устройства, соответственно.
Собираем все вместе в файл pen_register.c , который будет выглядеть следующим образом:
Затем можно повторить обычные шаги, выполняемые для любого Linux драйвера:
- Собираем драйвер (файл .ko ) с помощью запуска команды make .
- Загружаем драйвер с помощью команды insmod .
- Выдаем список загруженных модулей с помощью команды lsmod .
- Выгружаем драйвер с помощью команды rmmod .
Но, что удивительно, результат не будет таким, как ожидалось. Используйте команду dmesg и загляните в директорий proc для просмотра различных журналов и прочих подробностей. Это связано не с тем, что драйвер USB отличается от символьного драйвера, — здесь есть одна проблема. На рис.3 показано, что у флэш-устройства есть один интерфейс (с номером 0), который уже связан с обычным драйвером usb-storage.
Теперь, для того, чтобы связать наш драйвер с этим интерфейсом, нам нужно выгрузить драйвер usb-storage (т. е. выполнить команду rmmod usb-storage ) и переподключить флэш-накопитель. Как только это будет сделано, результаты станут такими, как ожидалось. На рис.5 показан фрагмент информации из журналов и из директория proc . Снова подключите и отключите (в горячем режиме) флеш устройство и пронаблюдайте, как действуют вызовы probe и disconnect.
Рис.5: Флеш устройство в действии
Подведем итог
«Наконец-то! Что-то действует!» — облегченно сказала Светлана. «Но мне кажется, что для того, чтобы собрать полный драйвер устройства USB, здесь есть еще много того, с чем следует разбираться (например, с идентификационной таблицей, обратными вызовами probe и disconnect и т. д.)».
«Да, ты права. Давай разбираться со всем по порядку и с перерывами » — ответил Пагс, прервав самого себя.
Источник
Linux Mint установка драйвера
Когда вы скачали Linux Mint и установили его на компьютер, то у вас возникает вопрос о том, какие нужно устанавливать драйвера и как это сделать. Данная инструкция ориентированна на начинающих пользователей, поэтому мы постараемся разобрать данный вопрос наиболее подробно.
Когда вы производили установку Linux Mint, у вас автоматически установилось большинство драйверов. Исключением является драйвер видеокарты, принтера и другого специфического оборудования. Если вы настраиваете свой компьютер, то вы хорошо знаете модели вашего оборудования, но что делать, если вы в гостях или купили компьютер с рук? В подобных случаях нам поможет аналог программы Aida для Linux Mint. Название этой утилиты — SysInfo и вы можете скачать ее с нашего сайта. Распакуйте архив, зайдите в папку sysinfo и кликните правой кнопкой мыши по файлу sysinfo. В меню выберите «свойства» и перейдите во вкладку «права». Установите галочку «позволять выполнение файла как программы» и нажмите «ок». Теперь запустите ее двойным нажатием левой кнопки мыши.
Вы может увидеть здесь всю необходимую информацию о вашем железе и вопросов стало намного меньше.
Linux Mint установка видео драйвера Nvidia
Владельцы видеокарт компании Nvidia могут установить драйвер достаточно просто. Перейдите в меню-администрирование-менеджер драйверов (это необходимо делать с подключенным интернетом).
Перед вами откроется окно, в котором вам нужно выбрать рекомендуемый драйвер с названием nvidia. После этого, нажмите «применить изменения» (Apply Changes), дождитесь окончания установки и перезагрузите ваш компьютер.
Linux Mint установка видео драйвера Ati (AMD)
Владельцы видеокарт Ati (AMD) перейти в меню-администрирование-менеджер драйверов (это необходимо делать с подключенным интернетом).
Найдите строку с названием fglrx и установите соотвествующую галочку. После этого, нажмите «применить изменения» (Apply Changes), дождитесь окончания установки и перезагрузите ваш компьютер.
Помимо этого способа, вы можете установить драйвер из терминала следующими командами:
sudo apt-get install fglrx
sudo aticonfig —initial
Linux Mint установка видео драйвера Intel
Если у вас на ноутбуке или компьютере используется видеокарта Intel, то вам необходимо перейти на страницу загрузки драйвера. Найдите строку «Intel Graphics Installer for Linux*» и скачайте установщик. Он будет в виде deb файла, который можно легко установить двойным кликом.
Можно воспользоваться более простым способом и просто добавить репозиторий. Откройте терминал и введите команды
sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt-get update
sudo apt-get dist-upgrade
Теперь у вас самая последняя версия драйвера и просто перезагрузите компьютер.
Linux Mint установка драйвера принтера
Подключите ваш принтер к компьютеру и включите его. Перейдите в меню-центр управления и найдите там раздел оборудование.
Нажмите на кнопку Printers и перед вами появится вот такое окно:
Нажмите на кнопку «добавить» и вы увидите название вашего принтера в списке
Нажмите кнопку «вперед» и программа начнет поиск драйвера. В следующем окне выберите производителя принтера и нажмите «вперед».
Если вашей модели не будет в списке производителя, то проверьте его наличие на официальном сайте.
Обладатели принтеров Canon могут добавить репозиторий с помощью команды в терминале:
sudo add-apt-repository ppa:michael-gruz/canon-trunk
sudo apt-get update
sudo apt-get install cnijfilter-ip100series
В последней команде вам нужно заменить ip100series на вашу модель.
Как видите, ничего сложного нет, но если у вас остались вопросы, то задавайте их на нашем форуме и мы постараемся помочь вам.
Источник
Как установить драйвер Realtek RTL8821CE
Обычно, когда мы устанавливаем дистрибутив Linux на ноутбук, то зачастую поддержка Wi-Fi присутствует полностью или частично для большинства моделей. Драйверы интегрированы в ядро Linux и в результате всё «просто работает» из коробки. Но проблемы начинаются если драйвер для вашего Wi-Fi отсутствует. Вам нужно его найти и установить вручную.
С такой проблемой могут столкнуться, например, владельце ноутбуков HP CM-0078AU.
Если у вас Wi-Fi адаптер на основе чипсета Realtek RTL8821CE, то в Linux по умолчанию отсутствует драйвер для него. В результате ОС не видит устройство, и в панели рядом с часами вовсе отсутствует значок Wi-Fi.
Для исправления данной проблемы достаточно установить необходимый драйвер.
Этот драйвер работает на ядре Linux > 4.14 (все современные дистрибутивы удовлетворяют этому требованию). Этот драйвер тестировался на Debian, Ubuntu, Linux Mint, Arch Linux, Gentoo и должен работать на всех производных дистрибутивах.
Этот драйвер может быть установлен с использованием DKMS. Эта система, которая автоматически перекомпилирует и устанавливает модули ядра когда в результате обновления устанавливается новое ядро. Для использования DKMS, установите пакет dkms.
Чтобы проверить, какой именно у вас интегрированный Wi-Fi адаптер, выполните команду:
Если у вас вывод содержит строку RTL8821CE, значит эта инструкция вам поможет:
Офлайн установка Realtek RTL8821CE
Если на компьютере, на который вы хотите установить драйвер, отсутствует Интернет-подключение, то вы можете скачать установочный файл из репозиториев Ubuntu, перенести его на флешке на компьютер без Интернета и попробовать установить его вручную. Этот способ может не сработать по той причине, что для установки драйвера требуются зависимости (например, заголовки ядра), которые смогли бы установиться будь у компьютера Интернет-подключение, но если компьютер офлайн, то приходится надеяться, что все нужные файлы присутствуют по умолчанию.
Скачайте установочный файл драйвера:
Если ссылка на драйвер перестала работать, то для поиска актуальной ссылки перейдите на страницу: https://pkgs.org/search/?q=rtl8821ce-dkms
Перенесите скаченный файл на компьютер, где его нужно установить, перейдите в директорию с драйвером и запустите установку следующей командой:
Установка драйвера Realtek RTL8821CE в Ubuntu 21.04 и более поздние
Драйвер помещён в стандартный репозиторий, поэтому достаточно выполнить команду:
Установка драйвера Realtek RTL8821CE в Ubuntu 20.04
Начиная с Ubuntu 20.04, этот драйвер имеется в Дополнительном ПО (Additional Drivers (Software & Updates)). Откройте настройки дополнительного ПО и поставьте галочку “Using DKMS source for the Realtek 8821C …” (использовать DKMS источник для Realtek 8821C) и затем перезагрузитесь. После перезагрузки всё будет работать.
Как установить драйвер Realtek RTL8821CE в Debian, Ubuntu, Kali Linux, Linux Mint и их производные
Выполните следующие команды:
Затем перезагрузите компьютер — всё должно работать.
Как установить драйвер Realtek RTL8821CE в Arch Linux, BlackArch и их производные
Установите pikaur, как это показано в статье «Автоматическая установка и обновление пакетов AUR», а затем просто выполните команду:
Как установить драйвер Realtek RTL8821CE в Gentoo
Выполните с правами root команды:
Удаление драйвера
Откройте терминал и используйте git clone для клонирования репозитория на локальный диск:
Затем выполните скрипт для деинсталяции:
Обновление драйвера
Убедитесь, что у вас последняя версия репозитория на диске:
Удалите все несвежие бинарные файлы:
Возможные проблемы
Secure Boot
Если ваша система использует безопасную загрузку, отключите её в настройках BIOS, иначе ядро не будет принимать пользовательские модули.
PCIe Activate State Power Management
Ваш дистрибутив может поставляться с включённым по умолчанию управлением питанием активного состояния PCIe (PCIe Activate State Power Management). Это может конфликтовать с этим драйвером. Чтобы отключить:
Добавьте pci=noaer в конец GRUB_CMDLINE_LINUX_DEFAULT. Строка должна выглядеть примерно так:
Затем обновите вашу конфигурацию GRUB:
Ноутбуки Lenovo Yoga
Некоторые новые ноутбуки Yoga (например, Yoga 530) поставляются с rtl8821ce в качестве чипа Wi-Fi/Bluetooth. Но модуль ideapad-laptop, который может входить в ваш дистрибутив, может конфликтовать с этим драйвером. Чтобы отключить его:
Источник