Generic driver что это
Цель данной статьи — показать принцип реализации драйверов устройств в системе Linux, на примере простого символьного драйвера.
Для меня же, главной целью является подвести итог и сформировать базовые знания для написания будущих модулей ядра, а также получить опыт изложения технической литературы для публики, т.к. через полгода я буду выступать со своим дипломным проектом (да я студент).
Это моя первая статья, пожалуйста не судите строго!
Получилось слишком много букв, поэтому я принял решение разделить статью на три части:
Часть 1 — Введение, инициализация и очистка модуля ядра.
Часть 2 — Функции open, read, write и trim.
Часть 3 — Пишем Makefile и тестируем устройство.
Перед вступлением, хочу сказать, что здесь будут изложены базовые вещи, более подробная информация будет изложена во второй и последней части данной статьи.
Подготовительные работы
Спасибо Kolyuchkin за уточнения.
Символьный драйвер (Char driver) — это, драйвер, который работает с символьными устройствами.
Символьные устройства — это устройства, к которым можно обращаться как к потоку байтов.
Пример символьного устройства — /dev/ttyS0, /dev/tty1.
К вопросу про проверсию ядра:
Драйвер представляет каждое символьное устройство структурой scull_dev, а также предостовляет интерфейс cdev к ядру.
Устройство будет представлять связный список указателей, каждый из которых указывает на структуру scull_qset.
Для наглядности посмотрите на картинку.
Для регистрации устройства, нужно задать специальные номера, а именно:
MAJOR — старший номер (является уникальным в системе).
MINOR — младший номер (не является уникальным в системе).
В ядре есть механизм, который позволяет регистрировать специализированные номера вручную, но такой подход нежелателен и лучше вежливо попросить ядро динамически выделить их для нас. Пример кода будет ниже.
После того как мы определили номера для нашего устройства, мы должны установить связь между этими номерами и операциями драйвера. Это можно сделать используя структуру file_operations.
В ядре есть специальные макросы module_init/module_exit, которые указывают путь к функциям инициализации/удаления модуля. Без этих определений функции инициализации/удаления никогда не будут вызваны.
Здесь будем хранить базовую информацию об устройстве.
Последним этапом подготовительной работы будет подключение заголовочных файлов.
Краткое описание приведено ниже, но если вы хотите копнуть поглубже, то добро пожаловать на прекрасный сайт: lxr
Инициализация
Теперь давайте посмотрим на функцию инициализации устройства.
Первым делом, вызывая alloc_chrdev_region мы регистрируем диапазон символьных номеров устройств и указываем имя устройства. После вызовом MAJOR(dev) мы получаем старший номер.
Далее проверяется вернувшееся значение, если оно является кодом ошибки, то выходим из функции. Стоит отметить, что при разработке реального драйвера устройства следует всегда проверять возвращаемые значения, а также указатели на любые элементы (NULL?).
Если вернувшееся значение не является кодом ошибки, продолжаем выполнять инициализацию.
Выделяем память, делая вызов функции kmalloc и обязательно проверяем указатель на NULL.
Стоит упомянуть, что вместо вызова двух функций kmalloc и memset, можно использовать один вызов kzalloc, который выделят область памяти и инициализирует ее нулями.
Продолжаем инициализацию. Главная здесь функция — это scull_setup_cdev, о ней мы поговорим чуть ниже. MKDEV служит для хранения старший и младших номеров устройств.
Возвращаем значение или обрабатываем ошибку и удаляем устройство.
Выше были представлены структуры scull_dev и cdev, которые реализуют интерфейс между нашим устройством и ядром. Функция scull_setup_cdev выполняет инициализацию и добавление структуры в систему.
Удаление
Функция scull_cleanup_module вызывается при удалении модуля устройства из ядра.
Обратный процесс инициализации, удаляем структуры устройств, освобождаем память и удаляем выделенные ядром младшие и старшие номера.
С удовольствием выслушаю конструктивную критику и буду ждать feedback'a.
Если вы нашли ошибки или я не правильно изложил материал, пожалуйста, укажите мне на это.
Для более быстрой реакции пишите в ЛС.
Почитав в интернете, пришел к таким мыслям:
По поводу ручного обновления драйвера
Итак, смотрите. Сперва запускаете диспетчер устройств:
Вот иконка диспетчера в панели управления:
Далее откроется диспетчер устройств. Находим там устройство Generic PnP Monitor, нажимаем по нему правой кнопкой и выбираем пункт Обновить (следующая картинка просто пример):
Далее откроется мастер обновления, нажимаете Выполнить поиск драйверов на этом компе:
Потом вы просто нажимаете Далее. Если драйвер подойдет, то проблем не будет, сможете установить его вручную без проблем.
Потом у вас будет окошко, там будет список дров:
Ну и последний шаг, если все будет окей и вы сможете установить, тогда нужно будет перезагрузить компьютер:
Некоторые мысли вслух
Вообще ситуация двоякая: некоторым мониторам нужен официальный фирменный драйвер, а некоторым достаточно и базового от винды. Здесь легко руководствоваться так: если у моника есть дрова, значит зачем-то их придумали? Тогда стоит их установить)) Я лично никогда не ставил дрова ни на какие мониторы (правда их было не так уж и много).
Заключение
Ну и конечно в теории могут помочь специальные утилиты обновления дров, я как уже выше писал, советую одну это DevID Agent (она бесплатная).
Часто возникают случаи, когда ПК не может определить или увидеть USB-накопитель Generic. Что можно предпринять в таком случае, и какие существуют методы восстановления флешек? Есть несколько способов – восстановление при помощи специальных программ, установка драйверов или глубокое форматирование.
Программы для восстановления USB-накопителей Generic
Это самый простой метод восстановления карт памяти. Принцип действия этих программ заключается в базовом форматировании устройства. На данный момент разработчиками предлагается большое количество утилит. Скачивать стоит ту, у которой достаточно большой функционал.
Hetman Partition Recovery
Одна из наиболее популярных программ у пользователей. Восстанавливает не только само устройство, но и материалы, хранящиеся на нем. Кроме того, при помощи этой утилиты возможно восстановить фото и видео с отформатированной флешки.
Хетман Рекавери работает с большим количеством форматов, можно сохранить полученные файлы на жестком диске, CD-диске или, создав виртуальный образ. Восстановить поврежденные файлы можно все сразу или, выбрав только необходимые.
JetFlash Recovery Tool
Эта программа также неплохо работает с флешками Generic. Интерфейс утилиты понятен даже неопытным пользователям. Процесс заключается в полном форматировании, которое удаляет все файлы, хранящиеся на флешке. Достоинством Рекавери Тул является возможность использования утилиты на различных операционных системах, а также высокая скорость работы и понятное меню.
D-Soft Flash Doctor
Бесплатное приложение, с помощью которого можно восстановить USB-накопитель. Флэш Доктор используется для глубокого форматирования полностью нерабочих карт памяти, после чего утилита переходит к восстановлению внутренней системы. Достоинствами программы является быстрота восстановления, простота, надежность. Флэш Доктор, в отличии от большинства подобных программ, не снижает объем флешки.
Flash Memory Toolkit
Флэш Мемори – еще одна программа, позволяющая не только провести глубокое форматирование устройства, но и вытащить утраченные ранее данные. Рекомендуется использовать программу для попытки восстановления файлов, если таковые имелись до выхода карты памяти из строя, а затем уже перейти к процессу восстановления USB-устройства.
Форматирование USB-флешки Generic
Еще один вариант восстановления карты памяти – это полное форматирование низкого уровня. Процесс немного сложнее, чем восстановление при помощи утилиты, но тоже понятен и доступен для простого пользователя.
- Первое, что требуется сделать – определить контроллер флешки. Это можно сделать двумя способами – вскрыв корпус устройства и посмотрев надпись на контроллере, или при помощи ПК.
Для определения PID и VID контроллера нужно использовать специальную программу. Самая простая – USB Drive Info. После распаковки архива и установки утилиты необходимо установить флешку в порт, зайти в программу и просмотреть интересующие сведения.
- После получения требуемых данных необходимо найти программу, которую можно использовать для прошивки контроллера устройства. Для этого рекомендуется прибегнуть к одному из многочисленных сервисов, например, iFlash. Следующий этап – скачивание утилиты. Сделать это можно в том же самом приложении iFlash.
- После скачивания и установки происходит запуск программы и проверка – определяет ли она USB-устройство. Затем необходимо нажать F5 или кнопку «Сканировать USB». В большинстве случаев после этого флешка появляется в программе.
- Далее необходимо нажать кнопку Старт. Понять, что форматирование произведено можно по появлению зеленой кнопки «ОК».
Установка драйверов
Одна из причин, по которой компьютер не распознает флешку, это конфликт драйверов. Они могут работать некорректно ввиду их повреждения или отсутствия своевременного обновления. Если USB-устройство значится как неопознанное, необходимо зайти в меню управления и обновить драйвера до последней поддерживаемой версии.
Если обновление не помогло, необходимо удалить старые драйвера через диспетчер устройств, скачать на официальном сайте Microsoft новые и выполнить их установку. Если проблема заключалась в драйверах, то после перезапуска компьютера флешка будет определяться.
Причин, которые приводят к выходу из работы USB-накопителя Generic, очень много. К сожалению, не все флешки возможно вернуть к жизни. Если все вышеперечисленные способы не сработали, высока вероятность того, что устройство не подлежит восстановлению.
Я хочу поделиться с вами простым способом установки ADB драйвера под Windows. Эта статья понадобится тем, у кого этот драйвер или не устанавливается вовсе, или устанавливается, но adb все равно в упор не видит устройство(как было у меня), или вы вообще этот драйвер не нашли. Так что всех, у кого есть/были похожие проблемы, или кому просто интересно, прошу под кат.
Начну с предыстории. Решил я купить себе недорогой планшетик на Android для чтения книг(DJVU/PDF), и выбор пал на устройство российского конечно же китайского производства TeXet TM-7025. Жаба давила покупать что-то дорогое, а для простого чтения книг каких-то сверх-характеристик не требуется. Позже я обнаружил что на нем неплохо идут большинство игрушек, удобно полазить в инете пока ты сидишь in da kabin и т. д. А поскольку передо мной маячило изучение Android, я решил, что будет весьма удобно пользоваться для этого железным девайсом вместо мучений с эмуляторами.
И вот тут меня ждал неприятный сюрприз — то ли родной драйвер оказался кривым, то ли винда, то ли провод… вообщем драйвер то встал, диспетчер устройств Windows рапортовал о полной работоспособности девайса, но на запрос adb devices в консоли я получал пустой список и, естественно, тестировать приложение на планшете не удавалось.
Я написал запрос в службу поддержки TeXeT, мне даже ответили ссылкой на сам драйвер, который, как я уже убедился, не работал. Я начал искать ответ в интернете и нашел кучу разных сборок этого драйвера и мануалов, но все равно ни один из них не завелся как надо, и даже родной драйвер из SDK вообще никак не становился, что повергло меня в уныние… но не отчаяние.
Вот тут я решил попробовать свои силы в написании драйверов старом добром методе научного тыка и открыл inf-файл драйвера. Надежду мне давало понимание, что софтверная часть adb интерфейса со стороны планшета должна быть идентичной для всех устройств, а USB и так работал. И вот, после нескольких неудачных проб ручной правки inf-файла я нашел рецепт лечения приправы inf-файла так, чтобы оно поставилось и, главное, работало.
Шаг 3. Правим inf-файл. В папочке открываем файл android_winusb.inf и ищем там строки такого вот вида:
Делаем копию этих строк, заменяем Google Nexus One на %имя_вашего_девайса% для идентификации в будущем и… открываем диспетчер устройств Windows. Ищем там наше устройство(Android, Android Composite ADB Interface или что-то в этом стиле). Открываем свойства устройства, вкладка «Сведения», в списке выбираем пункт «ИД оборудования» и видим такую вот картину.
Копируем строчку, которая больше всего похожа на ту, что показана на рисунке(Она, по идее просто немного короче), и вставляем ее в наш inf-файл.
В %SingleAdbInterface% мы конец строки удаляем, как видно, в %CompositeAdbInterface% вставляем целиком. Повторять два раза все, наверное, не надо, но у меня уже все стоит и мне лень экспериментировать :)
Сохраняемся(будьте внимательны — в некоторых случаях для этого нужно запускать блокнот с правами администратора, т. к. в пользовательском режиме вам не дадут перезаписать inf-файл).
Шаг 4. Установка драйвера. Теперь, когда все подготовлено, возвращаемся в диспетчер устройств и удаляем все ранее установленные adb драйверы(если были). Обновляем список устройств и видим наш девайс без драйверов. Открываем его свойства и выбираем «обновить драйверы», выбираем установку из папки, указываем папку с поправленым inf-ом и запускаем установку — наш драйвер моментально находится, но при установке он может ругаться о несовместимости с вопросом «продолжать ли, насяльнека?». Продолжаем. Все, драйвер установлен.
Шаг 5. Финал. Для точности делаем вынь-всунь USB-порта, ждем пока все обнаруживается, открываем консоль(Win+R, вводим cmd) и пишем adb devices. Если все прошло хорошо — видим заветный пункт списка, обозначающий, что adb теперь видит наш девайс.
С этого момента можно спокойно запускать eclipse и строить программы, наслаждаясь удобной автоматической сборкой, установкой и возможностью дебага прямо на нашем устройстве.
Если команда adb у вас вообще не работает. Компьютер -> Свойства -> Переменные среды. Ищем переменную Path и в конце дописываем(ни в коем случае не перезаписываем) в конце точку с запятой, а после адрес папки, где живет adb(обычно %android-sdk%\platform-tools\). После перезагрузки должно заработать.
Иногда adb не запускается автоматически при старте системы. Запустите вручную.
Что это было?
На самом деле все просто. В силу неких причин(винда мастдай/у прогеров кривые руки/гугловский инф-файл писался только для родных гугловских девайсов/в вашем компьютере все испортили бозоны Хиггса) винда не хочет кушать гугловский драйвер для негугловских девайсов, не записанніх в inf-файл. Видимо, там все как раз завязано на этих ИД-оборудования. Но ведь софтверная часть на подавляющем большинстве андроид-устройств в части дебаггер-коннектора к ПК идентична, потому драйвер должен нормально общаться с любым Андроид-устройством. Наша задача — обмануть Windows и заставить ее принять девайс за «драйверо-подходящий», что мы и сделали путем дописывания его ИД в inf-файл драйвера.
Надеюсь, кому-то данный мануал поможет завести свой китайский или другой девайс, для которого при сборке системы забыли сделать нормальный драйвер adb, или тем, кого задалбывает качать официальный драйвер от производителя устройства(это бывает настолько гемморно, что быстрей сделать все вышеописанное — у меня так было с драйвером для телефона LG E510).
Решить, является ли угроза вредоносной или нет, жизненно важно. Большинство пользователей сообщали об этой проблеме, возникающей при использовании антивирусного программного обеспечения AVG и Avast. Хотя это не исключено, что вы получите это предупреждение от других программ, это маловероятно. Вот что вам нужно знать о idp.generic и о том, безопасно ли его удалять из вашей системы.
Окончание .generic означает, что угроза была обнаружена из универсального файла. Когда ваша антивирусная программа обнаруживает такую угрозу, ее первым шагом обычно является изоляция и удаление файла.
Хотя вы всегда должны обращать внимание на предупреждения вашей антивирусной программы, подавляющее большинство предупреждений idp.generic являются ложными срабатываниями. Тем не менее, вам следует дважды проверить, запустив сканирование с помощью другой антивирусной программы, чтобы убедиться, что это не замаскированный вредоносный файл.
Что вызывает предупреждения idp.generic?
Если вы получали это предупреждение, обязательно обновите антивирусное программное обеспечение до последней версии. И Avast, и AVG получили обновления, устраняющие эту проблему, но если вы не обновились, вы все равно можете получить предупреждение.
Если это не сработает, обновите Java. Для этого откройте Панель управления> Программы> Java и перейдите на вкладку «Обновление». Внизу нажмите «Обновить сейчас».
Чтобы обновить Avast, щелкните значок меню в правом верхнем углу, выберите «Обновить», а затем выберите «Проверить наличие обновлений» в обоих вариантах. Это гарантирует, что ваше программное обеспечение и описания вирусов будут полностью обновлены.
Когда idp.generic не является ложным срабатыванием?
Никогда нельзя быть на 100 процентов уверенным, что idp.generic не является ложным срабатыванием. Когда вы получаете предупреждение, вы всегда должны запускать второе сканирование, чтобы быть уверенным. Тем не менее, есть несколько признаков того, что предупреждение может быть больше, чем ложным срабатыванием.
Также обратите внимание на имя файла. Если имя файла явно вредоносное или не принадлежит ему, то угроза, скорее всего, реальна.
Как удалить idp.generic в Windows 10?
Если вы получили предупреждение idp.generic, у вас может возникнуть соблазн немедленно удалить его из вашей системы. Если файл не прикреплен ни к чему важному, во что бы то ни стало позвольте вашему антивирусу делать свою работу.
Если есть вероятность, что это ложное срабатывание вашего антивируса, не торопитесь, чтобы обновить Java и ваше антивирусное программное обеспечение. После того, как вы загрузили обновление, перезагрузите компьютер и снова запустите сканирование.
Если антивирусное программное обеспечение по-прежнему обнаруживает idp.generic, загрузите такую программу, как Malwarebytes или Kaspersky, и запустите вторичное сканирование. Вы хотите использовать программу, отличную от AVG или Avast, на случай, если проблема по-прежнему связана с самим антивирусным программным обеспечением.
Если угроза обнаружена, разрешите антивирусному программному обеспечению удалить угрозу, удалив ее или поместив в карантин. Хотя его можно удалить из вашей системы самостоятельно, это может быть сложный процесс. Антивирусное программное обеспечение удалит все зараженные файлы, связанные с исходной угрозой.
Как я могу предотвратить угрозы idp.generic?
Эти угрозы обычно связаны с устаревшим программным обеспечением. Включите автоматические обновления для вашего антивирусного программного обеспечения, чтобы оно всегда оставалось актуальным, и сделайте то же самое для Java. Это предотвратит ложные срабатывания предупреждений от AVG и Avast, поэтому всякий раз, когда появляется угроза idp.generic, вы будете знать, что нужно относиться к ней более серьезно.
Что касается предотвращения других угроз в Интернете, будьте осторожны, открывая любое письмо от неизвестного отправителя. Избегайте веб-сайтов и загрузок из источников, которым вы не доверяете. Между немного осведомленность и надежное антивирусное ПО, вы можете избежать большинства угроз вашему компьютеру и личным данным.
Читайте также: