Перенос драйверов с windows на linux

Обновлено: 04.07.2024

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

Если вы планируете перейти на новый ПК Windows или настроить текущее устройство с нуля, то неплохо бы иметь под рукой уже проверенные драйверы.

Совет: вы можете вывести список всех сторонних драйверов в Windows с помощью таких инструментов, как DriverView, InstalledDriversList или Driver Store Explorer.

Экспортируем драйверы Windows в DISM

Для экспорта драйверов в DISM потребуется воспользоваться всего одной командной. Разберем, как именно это делается:

  • Откройте меню «Пуск».
  • Введите cmd.exe. Можно использовать Windows Terminal.
  • Кликните правой кнопкой мыши по предложенному варианту «Командная строка» и выберите опцию «Запуск от имени администратора».
  • Запустите команду
  • Замените [путь] на целевое расположение для сохранения экспортируемых драйверов, например D:\Drivers
  • Убедитесь, что данная папка существует, иначе будет выведена ошибка.

Данная команда экспортирует все сторонние драйвера в целевую папку. Обратите внимание, что вы также можете использовать DISM для экспорта драйверов из автономного образа с помощью следующей команды (запускается из консольной оболочки PowerShell с повышенными привилегиями):

Посетите сайт Microsoft Docs, чтобы ознакомиться с полным списком доступных параметров.

Для завершения выполнения процедуры потребуется некоторое время. На тестовом устройстве Surface Go экспорт 101 драйвера продолжался несколько минут.

Экспортированные драйверы размещаются в специальных директориях — каждый драйвер в своей собственной папке. Названия папок не очень информативны, но вы можете открыть INF-файл в текстовом редакторе для поиска дополнительной информации.

Как импортировать экспортированные драйверы

Вы можете импортировать отдельные драйверы или все драйверы сразу.

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


Для рекурсивного импорта всех экспортированных драйверов потребуется инструмент pnputil.exe. Выполните следующую команду в окне командной строки с повышенными привилегиями:

Замените [путь] на полный путь к папке экспортированных драйверов.

Таким образом, для экспорта всех сторонних драйверов в системы Windows требуется всего одна команда. Используйте ее перед настройкой новой системы или переходом на новую систему, если у вас нет доступа к определенным установкам драйверов.

Возможен ли в Linux перенос драйверов? (Есть ли возможность взять рабочий драйвер из другой системы?)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Возможен ли в Linux перенос драйверов?

Несколько дней назад установил Mandriva 2009. При этом очень удивило крайне низкое качество видео (карточка - NVidia GF6200). То есть видео фактически нет, при открытии видеофайла любого формата звук идет, а картинка виснет. При запуске 3D игры (из дистрибутива) - тоже дикие тормоза, из чего сделал вывод, что виноват универсальный драйвер видеокарты. Кроме Мандривы есть live-CD ASP-linux, Knoppix, Geexbox linux - во всех трех видео отличное.
Ну и вопрос у меня в том, можно ли "вытащить" нужные модули из одного из этих дистрибутивов? В Windows такое сделать просто, может и в Линуксе возможно? (На сайте NVidia видел драйвера под Linux, но размер был чуть ли не 20 мБ - скачивать такие большие файлы нет возможности, интернет очень дохлый). У Мандривы и ASP версии ядра вроде бы одинаковые.
Ещё хорошо бы, если бы кто-нибудь обьяснил простым языком, как определять, какой модуль (драйвер) обслуживает какое-либо конкретное устройство (и обслуживает ли?).
Пытался читать рекомендованные в "шапке" статьи, но как-то все сложно, понял только что в linux драйвер устройства может входить в состав ядра, а может быть в виде отдельных подгружаемых файлов. Как это определить? Ещё хорошо бы, если бы кто-нибудь обьяснил простым языком, как определять, какой модуль (драйвер) обслуживает какое-либо конкретное устройство (и обслуживает ли?).

Да очень просто. От рута командуем lspci -v , ищем там свою видюшку и смотрим, что написано после Kernel modules: и Kernel driver in use:

Пытался читать рекомендованные в "шапке" статьи, но как-то все сложно, понял только что в linux драйвер устройства может входить в состав ядра, а может быть в виде отдельных подгружаемых файлов. Как это определить?
Касаемо нвидии - вам нужен закрытый драйвер. В ядро он входить не может. Вам надо подключить репозитории и поставить дрова оттуда. Возможно, (не знаю как там в мандривах у вас), вам придется скачать намного меньше.
Покурите раздел мандривы - Mandriva Linux, Mandrake Linux Ну а всё-таки как насчёт того, чтобы "вытащить" драйвера из другой системы? Возможно ли это в принципе?

ЗЫ: Второй способ наиболее универсален!

Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.

ЗЫ: Второй способ наиболее универсален!

Да я уже смотрел эту статью! Проблема в том, что нечего устанавливать. Меня то интересует, можно ли с Live-CD как-то взять драйвера.

Просто так взять и использовать сторонний драйвер скорее всего не позволит ядро. Тем более от другого дистрибутива.
Если уж очень дохлый дома интернет - найдите возможность скачать драйвер в другом месте.
И, кстати для этой карты нужен не самый свежий драйвер(если мне не изменяет память).

А вот такой вопрос (не хочется создавать новую тему): когда-то я использовал дистрибутив SuSE Linux 10.3 86x64 так вот в YaST была какая-то функция называлась (если память не изменяет мне с рассудком) "Использование установленного драйвера Winows", как я понял если на компьютере установленн линукс и виндовс, то можно заюзать для некой железяки дровишки из установленой винды возможно ли это или я что-то перепутал или не так понял?
Эта функция попадалсь мне на глаза, но использовать смысла небыло.

Может имеет смысл задать этот вопрос в разделе посвященном SuSE?

А вот такой вопрос (не хочется создавать новую тему): когда-то я использовал дистрибутив SuSE Linux 10.3 86x64 так вот в YaST была какая-то функция называлась (если память не изменяет мне с рассудком) "Использование установленного драйвера Winows", как я понял если на компьютере установленн линукс и виндовс, то можно заюзать для некой железяки дровишки из установленой винды возможно ли это или я что-то перепутал или не так понял?
Эта функция попадалсь мне на глаза, но использовать смысла небыло.

Может имеет смысл задать этот вопрос в разделе посвященном SuSE?



Предположу что это про ndiswrapper.
К драйверу Nvidia это точно неприменимо. Предположу что это про ndiswrapper.
К драйверу Nvidia это точно неприменимо.
Аааа, похоже на то, вспомнил: это когда я на ноут драйвер для песпроводной сети ставил видел эту приблуду, спасибо ))))))) А куда и какие файлы кладет nvidia после компиляции и установки?
В /var/lib ?

Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

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

В Linux, драйвера тоже необходимы, но ситуация состоит с ними немного по-другому. Здесь все свободные драйвера Linux встроены в ядро и если ваше оборудование будет работать с этой операционной системой, то, скорее всего, оно будет работать из коробки. Свободные драйвера разрабатываются производителями оборудования или же независимыми разработчиками. Также производители могут не открывать код своих драйверов, тогда они считаются проприетарными и не включаются в ядро, а доустанавливаются вручную.

Давайте рассмотрим подробнее работу с драйверами linux и Windows.

Как драйвера устройств работают в Windows

После установки Windows вам необходимо установить драйвера устройств, предоставляемые производителями - драйверы материнской платы, набора микросхем, драйверы видеокарты, звука, сети, wifi и многое другое.

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

Как работают драйвера Linux

В Linux ситуация с драйверами очень сильно отличается. Большинство драйверов для вашего оборудования распространяются в виде открытого программного обеспечения и интегрированы в дистрибутив Linux. Эти драйверы linux, как правило, являются частью ядра Linux, но здесь есть исключение - драйверы видеокарты являются частью программного обеспечения Xorg, а драйверы принтера включены в набор CUPS (система печати).

Это значит, что большинство доступных для linux драйверов уже установлены на вашем компьютере, включены вместе с ядром, в виде модулей ядра или вместе с графическим сервером или сервером печати. Установка драйверов Linux почти не нужна. Драйвера в Linux разработаны, в основном, энтузиастами, но иногда их выпускают сами производители оборудования, которые вносят свой вклад в развитие ядра Linux и других проектов, например, это Intel, AMD, а также другие, более мелкие производители.

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

Установка проприетарных драйверов Linux

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

Чаще всего нам приходится сталкиваться с проприетарными драйверами для видеокарт, например, для NVIDIA, которые обеспечивают лучшую производительность в играх на Linux. Конечно, есть драйверы ядра Linux с открытым исходным кодом, которые заставят вашу видеокарту работать, но они не могут обеспечить достаточный уровень производительности в 3D играх. Некоторые драйвера wifi по прежнему закрыты, поэтому ваше оборудование не будет работать пока вы их не установите.

Установка драйверов в Linux зависит от вашего дистрибутива. В Ubuntu и основанных на ней дистрибутивах есть специальный инструмент - Дополнительные драйверы.


Программа определит, какие проприетраные драйверы устройств Linux можно установить и предложит скачать и установить их. В Linux Mint тоже есть инструмент менеджер драйверов, он работает аналогично инструменту в Ubuntu. Fedora - против проприетарных драйверов Linux и здесь нет никакого способа их установить. Во многих дистрибутивах проприетарные драйверы устройств linux можно найти в неофициальных репозиториях. Каждый дистрибутив решает эту проблему по-разному.

Установка прошивок в Linux

Не все могут делать драйвера с открытым кодом или проприетарные драйвера. Некоторым драйверам необходимы прошивки, чтобы правильно работать с устройствами. Например, прошивки нужны для работы некоторых модулей wifi или сетевых интерфейсов.

Чтобы установить прошивки в Linux необходимо скачать и установить пакет linux-firmware, это можно сделать с помощью следующей команды в Ubuntu:

sudo apt install linux-firmware

А в RPM дистрибутивах:

sudo yum install linux-firmware

Также возможно придется установить другие прошивки. Чтобы посмотреть подробнее, что нужно, и как установить, посмотрите лог ядра dmesg.

Как установить драйверы для принтера в Linux

Возможно, вам понадобится поставить драйвера linux для принтера. Однако при использовании инструмента для конфигурации принтеров - CUPS вы можете выбрать нужный драйвер из баз данных. Как правило, программа определяет производителя вашего принтера, а в списке вы можете выбрать точную модель принтера.

Вы также можете попытаться определить принтер по описанию PostScript или PPD файла. Эти файлы часто входят в состав драйвера принтера для Windows и вы можете найти PPD файл, который сделает работу вашего принтера лучше. Файл PPD можно выбрать в процессе работы CUPS.

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

Как заставить работать другое программное обеспечение

Иногда вам может понадобиться поставить драйвера linux для другого оборудования, которые не предоставляются автоматически. Например, NVIDIA предоставляет собственный инсталлятор для своего драйвера. Но тем не менее лучше использовать драйвера упакованные для вашего дистрибутива, они будут работать лучше.

В общем, если в Linux что-то не работает из коробки, и если оно все еще не работает после установки драйвера или прошивки, то, скорее всего, оно уже не будет работать вообще. Если вы используете старую версию Linux, может помочь обновление до самой новой версии. Это обеспечит лучшую аппаратную поддержку и обновления. Но если что-то все еще не работает, то , скорее всего, оно уже работать не будет.

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

Выводы

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

Вы можете устанавливать и драйвера linux, размещенные на официальных сайтах производителей, но проприетарные драйвера могут работать не настолько хорошо, как подготовленные для вашей системы.

Скажем запилил свою ОСь и хочу добавить поддержку ethernet карты на 200 Гбит/с. Если я обнаружил драйвер для линукса, то могу его перенести в свою ОСь? Или там (с 95% вероятностью) будет блоб завязанный на внутреннее API ядра? Ну, а MESA возможно перенести? Я просто нуб в драйверах, хотел вот прояснить ситуацию.


Посмотри на Embox.

запилил свою ОСь … Я просто нуб в драйверах

Где то кто то сбойнул?

Если ты сделаешь свое API для драйверов совместимым с линуксовым - можно. Или если ты сделаешь свое API несовместимым, но зато сделаешь очень умную программу-транслятор, которая трансформирует код драйвера таким образом, чтоб он после этого был приспособлен к твоему драйверному API. Или есть еще вариант - сделать какую-то прослойку для совместимости, как вот NDISwrapper

SZT ★★★★★ ( 29.05.20 21:47:01 )
Последнее исправление: SZT 29.05.20 21:47:58 (всего исправлений: 1)


Я понимаю как работает драйвер клавиатуры и прочих мышек. Но мне не совсем понятно как запилены драйверы более сложных устройств как GPU или передовые Ethernet-ы с аппаратным шифрованием пакетов и прочими крутыми фишками типа скорости в 200 Гбит/с.

Понятно, что нужно порыться в коде ядра, но пока нет на это времени, поэтому чисто теоретически интересуюсь, если кто знает.

foror ★★★★ ( 29.05.20 21:49:56 )
Последнее исправление: foror 29.05.20 21:50:06 (всего исправлений: 1)

Чисто теоретически, драйвер работает с аппаратурой не напрямую, а через некоторое API, которое есть в ядре ОС. Если у тебя это API совпадает с линуксовым - проблем быть не должно. Если у тебя есть способ конвертировать как-нибудь код драйвера из Linux в своё API - проблем быть не должно. Если ты делаешь прослойку типа NDISwrapper - могут быть проблемы с производительностью, из-за дополнительного слоя абстракции. И возможны баги в самой этой прослойке. NDISwrapper вообще работает с бинарными виндовыми дровами для wifi, позволяя их использовать на Linux, так что там даже исходники самих дров не нужны.



Просто посмотри заголовочные файлы любого драйвера. Тебе надо все это скопировать в свое ядро. Проще собрать минимальное ядро Linux.


Если я обнаружил драйвер для линукса, то могу его перенести в свою ОСь?

Очевидно, ответ зависит от того, насколько интерфейсы твоей ОСи похожи на линукс.

Судя по проблемам других ОС, это не такая простая задача.

Ну в общем, подробный ответ уже написал SZT .

(Интересно, что ж за ОС у тебя такая.)

hobbit ★★★★★ ( 29.05.20 22:00:27 )
Последнее исправление: hobbit 29.05.20 22:02:04 (всего исправлений: 1)



Интересно, что ж за ОС у тебя такая

Пока никакая, но чисто теоретически думаю об unikernel системе на новом ЯП. А там может замахнусь и на UI.

foror ★★★★ ( 29.05.20 22:07:06 )
Последнее исправление: foror 29.05.20 22:07:13 (всего исправлений: 1)


А примитивы синхронизации, списки, управление памятью т. д в самом модуле реализованы?


У меня тоже была навязчивая идея своей ОС. А потом я послушал доклад про Embox и понял, что мою идею уже реализовали. И слава богу.

В следующий раз, когда будет чесаться, начну со сборки LFS. :)


У меня тоже была навязчивая идея своей ОС. А потом я послушал доклад про Embox и понял, что мою идею уже реализовали. И слава богу.

К сожалению мою не реализовали ) Я хочу ОС на ЯП, которого еще нет ) Но возможно всё встанет на ЯП, если я не увижу преимуществ перед джавой или ржавым.

В следующий раз, когда будет чесаться, начну со сборки LFS. :)

Я это всё обязательно изучу и попробую, параллельно или перед тем как ринусь в бой ) Сейчас пока собираю ссылки и занимаюсь вообще другим делом в области механики )

foror ★★★★ ( 29.05.20 22:34:54 )
Последнее исправление: foror 29.05.20 22:37:59 (всего исправлений: 1)


Вы только посмотрите на этого наркомана.


А примитивы синхронизации, списки, управление памятью т. д в самом модуле реализованы?

Без понятия, я незнаком с ядром линукса, чтобы по названиям функций определять их принадлежность к ядру или блобу.

драйвер работает с аппаратурой не напрямую, а через некоторое API, которое есть в ядре ОС

Вроде наоборот должно быть!? Драйвер должен работать с аппаратурой напрямую, а для ядра предоставлять некоторое API.


Можно запустить маленький линупс в юзерспейсе и дать ему доступ к железу. Какой-нибудь L4Linux так и работает.


Зависит от архитектуры. В микроядерной драйвера крутятся в пространстве пользователя, и для них есть специальные системные вызовы, чтобы через них работать с железом. Ядро проверяет выход за границы пространства адресов как памяти, так и портов. Вроде бы в третьем Миниксе так сделано, но я лично не проверял.


а как ты запилишь свою ОС, если ты нуб в API драйверов?


Также как научился пилить прикладное ПО - по чтению документации и интернет статьям.

foror ★★★★ ( 31.05.20 05:44:14 )
Последнее исправление: foror 31.05.20 05:44:29 (всего исправлений: 1)

иногда натурально с нуля что-то несложное проще написать, чем разобраться в здоровенной энтерпрайзной куче кода


Проблемы в отсутствии сорцов этого крутого драйвера начнутся гораздо раньше — ТС-у надо будет о бинарной совместимости с Linux-ом позаботиться. Хотя бы для тех компонентов, которые связаны с драйвером.


Не осилишь. В одно рыло то ты даже на вебе попробуй слепить аналог Jira, а это всяко легче чем реальную ОС.


Я тут аж проснулся от такого. У меня башка квадратная от простых СУБД + обмазывания JS-ом, который я не трогал с шараги. А этот и ЯП и ОС запилить хочет. ЯП то фиг запилишь, а вместе с ОС, это вообще тю.

peregrine ★★★★★ ( 31.05.20 05:59:56 )
Последнее исправление: peregrine 31.05.20 06:00:37 (всего исправлений: 1)


Чувак, я тут посмотрел по хабре, ты старше меня, круче как разраб с кучей практики, если не врёшь в профиле (хотя может ты с веба только смотришь на мир, а я с ассемблера начинал и C, чтобы сейчас в веб сунуться легонько), но блин, с моей колокольни мне очевидно, что даже разработка ЯП + компилятор в одно рыло это большая боль (даже если обёртку вокруг clang-а llvm писать) и по сути пет-проект который съест всё время, а в случае успеха и полноценно может заменить работу. А тут боль в квадрате. Ты неужели такой производительный и опытный, что сможешь? Или просто времени у тебя очень-очень много?

peregrine ★★★★★ ( 31.05.20 06:08:20 )
Последнее исправление: peregrine 31.05.20 06:09:24 (всего исправлений: 1)


В одно рыло то ты даже на вебе попробуй слепить аналог Jira, а это всяко легче чем реальную ОС

А что там ОС-ях сложного? Все технологии давно отработаны, масса документации, статей и открытого кода. Вы просто мыслите неверными категориями. Зачем мне реализовать полный аналог Jira/Linux, когда мне просто нужно unikernel ядро, на моём ЯП под конкретное железо. Я не собираюсь удовлетворить 100500 пользователей и их 100500 нонейм железок.


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

Опять же вы мыслите не теми категориями, вы думаете я вам сразу проект уровень OpenJDK выдам? Нет, такие вещи начинаются с небольшой концепции. Я хочу попробовать сделать ЯП без GC, но с гибридным режимом управления памятью. Фактически этот ЯП будет также завязан на IDE, которая будет следить за памятью и другими ресурсами.

Но, что касается ЯП, думаю для начала выложить спецификацию в паблик и с заинтересованными лицами доработать её, чтобы ничего не упустить. Здесь да, я один не справлюсь, могу что-то и упустить.


ты с веба только смотришь на мир

Я интересуюсь и низкоуровневым программированием, но чисто теоретически.

Я не собираюсь разрабатывать компилятор и отранслирую в си код, чтобы проверить концепцию.

Или просто времени у тебя очень-очень много?

Да, есть время, я не обременён ипотеками, женами и детьми.

я не обременён ипотеками, женами и детьми.

Жена - это класс, а ипотека и дети - это свойства класса.


Не вижу смысла работать с задротами, интеллект которых застопорился на сях/крестах. Тем более поддерживать копроэкономику, на которую впахивают эти задроты.

Понятно, я могу переоценивать себя, но я сравниваю, анализирую и думаю смогу сделать лучше.

поэтому он решил выпендриться и написать свой язык

Мне нахрен не упало пилить ЯП, у меня масса других идей. Но я 15 лет впахивал в ИТ, а воз и ныне там - задроты наперевес с си/крестами. Я последние годы ждал чуда, что создадут ЯП 21 века, но увидел только жалкие высеры копрэкономики.

Так что вынужден пилить сам.

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

Если человек делает, то не заморачивается на бесполезные мечты и непонятной абстракции вопросы. Как возникнет проблема, тогда и надо ее решать.

Тут же ни проектирования, ни прототипа, а дурацкий вопрос по принципу «garbage in, garbage out».

Читайте также: