Как работает firmware? (обращение к устройству через usb)

Выбор и настройка HardWare

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Как работает firmware?

Сообщение Stauffenberg »

Всем привет.

Не пойму как именно ОС через firmware обращается к устройству (в моем случае wireless адаптер, через USB).

Читаю о firmware: это прошивка, которую устанавливают в само устройство. Но неужели при установки firmware каждый раз мой GNU/Linux или OpenBSD перезаписывают (перепрошивают) устройство? Т.е. после установки пакета с firmware (набор бинарников) и использовании этого устройства, мы имеем "другое устройство", т.е. перепрошитое? :blush:
Я явно чего-то не допопнимаю и хотел бы разобраться с этим вопросом.

С модулями ядра все понятно - функционал подключается к ядру (в случае модулей), я вижу этот модуль через lsmod (в GNU/Linux), а он, в свою очередь, знает как работать с устройством. Есть модуль - есть интерфейс, нет модуля - мы не знаем об устройсве и о том, как с ним работать. А как работает firmware, и как ядро узнает о его наличии, а точнее - о необходимости его использования для общения с устройством? Я сейчас в OpenBSD, было бы здорово, если бы кто-то хотя бы навел на мысль и показал на примере как ПО взаимодействует с устройством именно через firmware в этой ОС.

Заранее спасибо.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Как работает firmware?

Сообщение serzh-z »

Stauffenberg писал(а):
28.02.2014 14:51
Читаю о firmware: это прошивка, которую устанавливают в само устройство.
Не обязательно. У прошивки может быть две части - одна в устройстве, которая запускается на собственном SoC, другая часть - в драйвере системы, это просто кусок кода, который преобразует вызовы какого-нибудь API в проприетарные сообщения для внутренней части прошивки.

Т.е. это примерно как использование, скажем, клиентской библиотеки типа libmysql (firmware, которое загружает ядерный модуль устройства), который переправляет команды ядру MySQL (внутренней прошивке).
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Как работает firmware?

Сообщение Stauffenberg »

Получается, что драйвер в системе все же есть, но он не знает как работать с устройством. Он определяет лишь id-устройства и на основании этой информации знает какой firmware ему нужен. Если оно есть в системе (должно находиться только в определенном месте), то драйвер передает этот firmware устройству, и на его CPU запускается этот самый firmware (бинарник).

Значит на самом устройстве мы ничего не меняем, ничего на нем не перезаписываем. Firmware для каждой ОС, получается, должен быть свой, несмотря на то, что работает он на другом железе, чем сама ОС.

Чувствую, что придется все же поиграться с отладчиком и с исходниками полудрайвера (:
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Как работает firmware?

Сообщение serzh-z »

Stauffenberg писал(а):
28.02.2014 16:55
Значит на самом устройстве мы ничего не меняем, ничего на нем не перезаписываем. Firmware для каждой ОС, получается, должен быть свой, несмотря на то, что работает он на другом железе, чем сама ОС.
Думаю, что это зависит от железки. В некоторые железки можно/нужно заливать прошивку после каждого включения (например в тех самых ужасных принтерах HP 10xx). Как я понимаю, это сделано по тем же соображениям, по которым некоторые ядерные модули подгружают _в себя_ чужое проприетарное firmware. В случае с принтерами HP, вероятно, требуется, чтобы в его прошивку ещё и подгрузили блок постороннего проприетарного лицензированного кода ZJS.

В случае с видеокартами ATI/AMD требовалась загрузка в драйвер блоба, который, как понимаю, не удалось раскодировать или который нельзя включать по-умолчанию по соображениям лицензии.
Спасибо сказали:
Аватара пользователя
holrude
Сообщения: 2
Контактная информация:

Re: Как работает firmware?

Сообщение holrude »

serzh-z писал(а):
28.02.2014 17:21
В случае с видеокартами ATI/AMD требовалась загрузка в драйвер блоба, который, как понимаю, не удалось раскодировать или который нельзя включать по-умолчанию по соображениям лицензии.

О... спасибо. Сам ёще нуб в линуксе, но хочу асик-майнеры попробовать запустить через USB
Видеокарты для заработка
Спасибо сказали:
Ответить