Пакеты прошивок: что они на самом деле делают?


8

На моем CentOS появляется yum updateследующее:

(6/38): iwl1000-firmware-39.31.5.1-62.el7_39.31.5.1-62.2.el7_5.noarch.drpm                                                                                                                                            
(7/38): iwl105-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                             
(8/38): iwl135-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                             
(9/38): iwl2000-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                            
(10/38): iwl2030-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                           
(11/38): iwl3160-firmware-22.0.7.0-62.el7_22.0.7.0-62.2.el7_5.noarch.drpm                                                                                                                                             

и т.п.

Это так называемые "пакеты прошивки". Например, давайте найдем несколько из них, которые установлены:

rpm --query --all | grep firmware

а затем запросить его информацию:

rpm --query --info iwl105-firmware-18.168.6.1-62.2.el7_5.noarch

и мы получаем:

Summary     : Firmware for Intel(R) Centrino Wireless-N 105 Series Adapters
Description :
This package contains the firmware required by the iwlagn driver
for Linux to support the iwl105 hardware.  Usage of the firmware
is subject to the terms and conditions contained inside the provided
LICENSE file. Please read it carefully.

Ладно, хорошо.

У меня даже нет такого оборудования, так как это виртуальная машина.

Итак, вопрос:

Что на самом деле делают пакеты прошивки?

Являются ли они «однократными» установками, которые запускают непрозрачный исполняемый файл (немедленно? При следующей загрузке?), Который проверяет, существует ли оборудование, накачивает двоичный код во флэш-память оборудования, если оборудование есть (возможно, при запросе пользователя; в Windows в по крайней мере, перепрошивка оборудования всегда чревата всплывающими окнами DOS, EULA, по которым нужно было щелкнуть, и индикаторами выполнения, которые должны быть выполнены), а затем помечает пакет как «установленный».

Они изменяют initramfs так, чтобы двоичный двоичный объект загружался модулем ядра, или что-то происходит при следующей загрузке?


Хороший вопрос, который является отличным дополнением от unix.stackexchange.com/questions/359989/… и unix.stackexchange.com/questions/90727/…
Энтони

В Что такое «прошивка» в терминологии Linux? Стивен Китт пишет: Итак, файлы прошивки не используются ядром, они загружаются ядром на другие части оборудования. Это также делает смутно приемлемым иметь программное обеспечение без исходного кода в системах FLOSS: утверждается, что оно работает не на главном ЦП, а на другом устройстве. Сникер, сникер.
Дэвид Тонхофер

Ответы:


4

Загружаемая прошивка, как правило, не является однократной установкой, которая записана на флэш-память устройства. Микропрограмма загружается в энергозависимую память на устройстве и должна выполняться каждый раз при включении хост-компьютера. Устройство не работает до загрузки прошивки. Микропрограмма может быть записана в ОЗУ на устройстве, в этом случае она содержит код и данные для процессора на устройстве, но это также может быть поток битов, определяющий логику программируемого на месте логического массива (FPGA), или некоторые сочетание обоих.

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

Есть несколько причин, по которым производители хотят использовать оперативную память вместо флэш-памяти. Прежде всего, это позволяет спроектировать одну версию аппаратного обеспечения, но в то же время поставить несколько версий продукта (например, для разных областей рынка). Если предполагается, что продукт будет часто обновляться в полевых условиях, проще будет выполнить обновление микропрограммы таким образом, чем решить проблему создания программы для обновления флэш-памяти на устройстве. Эта программа должна иметь приятный пользовательский интерфейс и быть максимально удобной для пользователя, поскольку обычно она предназначена для запуска конечным пользователем продукта. Некоторые устройства с флеш-памятью все равно часто запускают код из ОЗУ, и они просто копируют содержимое флеш-памяти в ОЗУ при запуске устройства


Если прошивка не загружается в ОЗУ с флэш-памяти, как она загружается в ОЗУ после включения устройства?
Codebling

Если устройство не может автономно загрузить прошивку, хост может сохранить ее в оперативной памяти устройства, используя шину, с которой устройство подключено к хосту. Типичные шины - PCI и USB. Это обязанность драйвера устройства. Устройство не может быть полностью «мертвым» после включения, оно должно содержать логику для облегчения загрузки прошивки.
Йохан Мирен

Я как бы забыл, что мы говорим здесь о периферии, поэтому он всегда будет подключен к шине. Имеет смысл!
Codebling

5

Как упоминает Энтони Геогеган , что такое «прошивка» в терминологии Linux? и почему некоторые драйверы все еще требуют прошивки? предоставить полезный фон.

Пакеты встроенного ПО - это пакеты, которые содержат файлы встроенного ПО, т.е. файлы, содержащие код, предназначенный для запуска на устройствах, подключенных к вашей системе, или подключенных к вашей системе. Типичные примеры включают наборы микросхем Wi-Fi, как в вашем случае. Они не являются однократными установщиками, и им все равно, доступно ли оборудование. Файлы, которые они делают доступными, используются соответствующими драйверами ядра, если имеется соответствующее оборудование: драйверы загружают прошивку в память, подключенную к целевому оборудованию, которая затем запускает прошивку для работы.

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


2

Добавление к уже превосходным ответам.

Файлы встроенного ПО, также известные как двоичные двоичные объекты, загружаются в ваше встроенное ПО по крайней мере во время холодной (повторной) загрузки устройства.

Устройство было разработано таким образом, чтобы получать встроенное ПО в ОЗУ, а не иметь ПЗУ + ОЗУ для сокращения затрат на производство. Например, у вас есть некоторые чипсеты Broadcom wifi и чипсеты внутреннего коммутатора, которые работают таким образом.

Обращаясь к другому вопросу вашего вопроса об использовании файлов прошивки в ВМ.

Поскольку вы имеете дело с виртуальной машиной, вам не нужны файлы прошивки. Они нигде не будут загружены; Гораздо меньше файлов "прошивки" Ethernet или Wi-Fi.

Аналогично, учитывая, что прошивка не требуется в среде виртуальных машин, это большая особенность, связанная с тем, что в Debian есть зависимости от общего пакета файлов прошивки в ядре Linux.


«Это большая идиосинкразия с наличием в Debian зависимостей от стандартного пакета файлов прошивки в ядре Linux» - по крайней мере, прошивка, рекомендованная пакетом ядра, действительно не содержит DFSG ;-). (Но вы правы, обе рекомендации - firmware-linux-freeи irqbalance- в настоящее время бесполезны в большинстве развертываний.)
Стивен Китт

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

1
Вы также можете настроить aptтак, чтобы он не устанавливал рекомендации по умолчанию ...
Стивен Китт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.