LINUX.ORG.RU

вопрос по драйверам

 , ,


0

1

приветствую тебя All.

возможно очень нубский вопрос, но не гуглится. насколько мне известно, стандартным драйвером в linux является модуль вида *.so, однако, я часто вижу драйвера которые зовутся firmware, например для сетевых карт.

также помнится древний слух что имея firmware сетевой карты можно её подключить как устройство (без драйвера?)… может это про bsd? хотя ирак иран, какая разница, по крайней мере на уровне драйверов..

firmware предполагается что это копия флеши устройства, но какое отношение оно имеет к драйверу? подскажите пожалуйста как понимать эти понятия, и в чём тут уличная магия.

ведь это же не bios shadow, зачем драйверу копия прошивы устройства)

Фига каша в голове, на целый взвод хватит.

anonymous
()

стандартным драйвером в linux является модуль вида *.so

Мальчик, ты дурак? Иди в школу.

anonymous
()

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

snizovtsev ★★★★★
()

Смотря про что ты говоришь.

Драйвер, в общем случае, это код, который предоставляет интерфейс для доступа операционной системы и программ к оборудованию.

Есть код, который работает в пространстве ядра, в Linux этот код может быть собран как монолитно в самом ядре, либо модулем.

При монолитной сборке в ядре этот код находится сразу в ядре, при модульной сборке модуль нужно подгружать, модули находятся в директории /lib/modules/версия_ядра/, расширение эти файлов может быть как .ko, так и другое, если модули ещё к тому же и сжаты.

Как правило для работы самого оборудования только кода в пространстве ядра не достаточно, нужен ещё код, который загружается в само устройство, это уже firmware. Это код, который работает на чипе самого устройства. Это закрытый код.

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

Если говорить о видео картах, то помимо кода, работающего в пространстве ядра, firmware, которые загружаются в устройство (видео карту), есть ещё файлы, библиотеки, которые нужны графическому серверу (xorg-server, wayland) для общения с кодом в пространстве ядра. К примеру для карт radeon в Debian есть пакет с названием примеру xserver-xorg-video-radeon.

В его составе есть файл /usr/lib/xorg/modules/drivers/radeon_drv.so и вот уже этот файл является интерфейсом, посредством которого xorg-server обращается к коду (драйверу) в пространстве ядра. И да, вот здесь уже расширение.so.

Так что всё несколько сложнее, чем ты представляешь.

anonymous
()
Ответ на: комментарий от anonymous

весьма благодарствую за развёрнутый ответ.

то есть этот firmware не тот который шьётся, а тот, который льётся в ram девайса по типу загрузчика как при прошивке роутеров и вёдер из кирпича.

значит между голым x11 и каким-нибудь xorg-x11-drv-nouveau драйвером или даже xorg-x11-drv-vesa живёт ещё одна прослойка..

feiteng
() автор топика
Ответ на: комментарий от feiteng

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

:) а может и не одна прослойка….
современная погромисткая культура любит «простой код» взамен эффективного. в ближнем будущем обещают возможность писать драйвера на джаваскрипте…

pfg ★★★★★
()
Ответ на: комментарий от feiteng

значит между голым x11 и каким-нибудь xorg-x11-drv-nouveau драйвером или даже xorg-x11-drv-vesa живёт ещё одна прослойка..

Вам же уже ответили, что firmware - это код, который исполняется на аппаратных средствах периферийного устройства. Как он может быть прослойкой между двумя кусками кода, исполняющегося на центральном процессоре компьютера?

zloy_starper ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.