Вопрос или проблема
Согласно https://wiki.gentoo.org/wiki/Linux_firmware,
Прошивка Linux — это пакет, распространяемый вместе с ядром Linux, который содержит бинарные блобы прошивки, необходимые для частичной или полной функциональности определенных аппаратных устройств. Эти бинарные блобы обычно являются проприетарными, поскольку некоторые производители оборудования не размещают исходный код, необходимый для сборки самой прошивки.
Например, моему устройству Bluetooth PCIe требуется linux-firmware/qca/htbtfw20.tlv
. Это драйвер ядра? Почему формат .tlv
, а некоторые — .bin
? В общем, драйверы ядра — это исполняемые файлы ELF.
Многие производители аппаратного обеспечения скрывают, как работает их оборудование. Вот почему они прячут некоторые функции своих устройств в закрытые блобы. Они распространяют блобы с своими драйверами.
Эти блобы не исполняются операционной системой, но загружаются в оборудование. После загрузки блоба ОС может управлять устройством, используя какой-либо драйвер.
В случае Bluetooth для большинства устройств используется универсальный модуль Linux, например, btusb
или hci_qca
в вашем случае. Модуль обнаруживает устройство, загружает прошивку, а затем может использовать устройство, как любое другое.
На самом деле не имеет значения, как называется файл. Он выбирается производителем.
Прошивка не является именно драйвером. Это некоторый код, исполняемый устройством, который позволяет ему взаимодействовать с драйвером.
Содержатели Linux получают прошивку от производителей или их драйверов и собирают блобы в linux-firmware git.
Содержатели дистрибутивов, такие как Canonical, упаковывают эту прошивку в пакеты. В случае Ubuntu это удивительно пакет linux-firmware
. Он создается на основе git-репозитория linux-firmware и обновляется время от времени.
интерессные блобы. Это “Эти блобы не исполняются операционной системой, но загружаются в оборудование. После загрузки блоба ОС может управлять устройством, используя какой-либо драйвер.” кажется неверным? Как может что-то загружаться в память и исполняться, но ОС об этом не знает? Есть ли выделенный участок оперативной памяти для этих блобов?
Ответ или решение
Фирменные блобы (firmware blobs) — это двоичные файлы, содержащие встроенное программное обеспечение, необходимое для работы аппаратных устройств в системе Linux. Эти блобы часто поставляются вместе с ядром Linux и могут быть жизненно важными для обеспечения полной или частичной функциональности различных устройств. Многие производители аппаратного обеспечения не публикуют исходный код для своего программного обеспечения, что делает блобы закрытыми и проприетарными.
Например, ваше Bluetooth PCIe устройство требует файл под названием linux-firmware/qca/htbtfw20.tlv
. Эти файлы не являются драйверами в традиционном смысле. Драйверы, как правило, являются исполняемыми файлами формата ELF, которые работают в пространстве ядра операционной системы и взаимодействуют с аппаратным обеспечением. В отличие от драйверов, блобы Firmware загружаются непосредственно в устройство. После загрузки блоба операционная система может взаимодействовать с устройством через соответствующий драйвер, такие как btusb
или hci_qca
для Bluetooth.
Что касается форматов файлов, таких как .tlv
и .bin
, различия в названиях файлов зависят от производителей и их предпочтений. Формат .tlv
может означать, что файл содержит определенные теги и значения, в то время как .bin
— это более общий формат для бинарных данных. Оба формата содержат данные, которые загружаются в аппаратное устройство, но специфика их структурирования может отличаться.
Теперь, что касается вашей озабоченности по поводу управления памятью. Действительно, блобы загружаются в память устройства и, следовательно, операционная система должна быть в состоянии управлять этим процессом. Когда блоб загружается в устройство, он загружен в память этого устройства и может исполняться непосредственно на его аппаратуре, что не требует выполнения операционной системой. Однако сама ОС должна загружать блоб через драйвер, который передает его в соответствующую память устройства.
Фирменные блобы являются важной частью работы многих аппаратных устройств в Linux, и они аккумулируются в репозиториях, таких как linux-firmware
на Git, откуда дистрибутивы Linux, такие как Ubuntu, извлекают и упаковывают их в свои пакеты, чтобы обеспечить оптимальную работу оборудования.
Подводя итог, блобы Firmare не являются драйверами, но они необходимы для правильной работы драйверов и, следовательно, устройств. Они загружаются в память устройства и запускаются на нем, в то время как ОС управляет взаимодействием через драйверы.