Paket firmware: Apa yang sebenarnya mereka lakukan?


8

Di CentOS saya, a yum updatemenampilkan yang berikut:

(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                                                                                                                                             

dll.

Ini disebut "paket firmware". Misalnya, mari kita temukan beberapa di antaranya yang diinstal:

rpm --query --all | grep firmware

dan kemudian menanyakan informasinya:

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

dan kami mendapatkan:

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.

Baiklah.

Saya bahkan tidak memiliki perangkat keras seperti itu, karena ini adalah VM.

Jadi, pertanyaan:

Apa yang sebenarnya dilakukan paket firmware?

Apakah mereka "one-shot" menginstal yang menjalankan executable buram (segera? Pada boot berikutnya?) Yang memeriksa apakah perangkat keras itu ada, memompa kode biner ke dalam flash perangkat keras jika perangkat keras itu ada (mungkin saat meminta pengguna; pada Windows di paling tidak, perangkat keras yang berkedip selalu penuh dengan jendela DOS yang muncul, EULA yang harus diklik, dan progress bar yang harus ditahan), dan kemudian menandai paket sebagai "diinstal".

Apakah mereka memodifikasi initramfs sehingga gumpalan biner dimuat oleh modul kernel atau sesuatu terjadi pada boot berikutnya?


Pertanyaan bagus yang membuat tindak lanjut yang hebat dari unix.stackexchange.com/questions/359989/… dan unix.stackexchange.com/questions/90727/…
Anthony Geoghegan

Dalam Apa itu "firmware" dalam terminologi Linux? , Stephen Kitt menulis: Jadi file firmware tidak digunakan oleh kernel, mereka dimuat oleh kernel ke perangkat keras lain. Ini juga yang membuatnya samar-samar dapat diterima untuk memiliki perangkat lunak tanpa kode sumber dalam sistem FLOSS: argumennya bahwa itu tidak berjalan pada CPU utama tetapi pada perangkat lain. Snicker, Snicker.
David Tonhofer

Jawaban:


4

Firmware yang dapat dimuat biasanya bukan pemasangan "satu-shot" yang ditulis untuk mem-flash perangkat. Firmware dimuat ke penyimpanan volatile pada perangkat dan perlu dilakukan setiap kali komputer host dihidupkan. Perangkat tidak berfungsi sebelum firmware dimuat. Firmware dapat ditulis ke RAM pada perangkat, dalam hal ini berisi kode dan data untuk prosesor pada perangkat, tetapi juga dapat berupa bit stream yang mendefinisikan logika array logika program-programmable (FPGA), atau beberapa kombinasi keduanya.

Di sisi lain, firmware dalam memori flash biasanya diprogram pada perangkat, dan hanya perlu ditulis ulang jika ada pembaruan ke firmware dari pabrikan. Ini biasanya dilakukan melalui mekanisme lain, seperti executable terpisah yang dijalankan oleh pengguna.

Ada beberapa alasan mengapa produsen ingin menggunakan RAM alih-alih memori flash. Pertama-tama, memungkinkan untuk mendesain satu versi perangkat keras, tetapi pada saat yang sama menghadirkan beberapa versi produk (untuk area pasar yang berbeda, misalnya). Jika produk ini diharapkan sering ditingkatkan lapangan, mungkin lebih mudah untuk menangani peningkatan firmware dengan cara ini daripada harus melalui masalah membuat program untuk meningkatkan memori flash pada perangkat. Program ini harus memiliki antarmuka pengguna yang bagus dan dirancang agar semudah mungkin digunakan oleh pengguna, karena biasanya ditujukan untuk dijalankan oleh pengguna akhir produk. Beberapa perangkat dengan penyimpanan flash sering menjalankan kode dari RAM, dan mereka hanya menyalin isi flash ke RAM ketika perangkat dimulai,


Jika firmware tidak dimuat ke dalam RAM dari flash, bagaimana cara firmware dimuat ke dalam RAM setelah perangkat menyala?
Codebling

Jika perangkat tidak dapat memuat firmware secara otonom, host dapat menyimpannya ke dalam RAM perangkat, menggunakan bus yang terhubung dengan perangkat tersebut ke host. Bus umum adalah PCI dan USB. Merupakan tanggung jawab driver perangkat untuk melakukan itu. Perangkat tidak bisa sepenuhnya "mati" setelah dihidupkan, perangkat harus mengandung logika untuk memfasilitasi pemuatan firmware.
Johan Myréen

Saya agak lupa bahwa kami berbicara tentang peripheral di sini, jadi itu akan selalu melekat pada bus. Masuk akal!
Codebling

5

Seperti Anthony Geoghegan menyebutkan , Apa itu "firmware" dalam terminologi Linux? dan mengapa beberapa driver masih memerlukan firmware? memberikan latar belakang yang bermanfaat.

Paket firmware adalah paket yang berisi file firmware, yaitu file yang berisi kode yang dimaksudkan untuk dijalankan pada perangkat di atau terhubung ke sistem Anda - contoh umum termasuk chipset wifi, seperti dalam kasus Anda. Mereka bukan installer sekali pakai, dan mereka tidak peduli apakah perangkat keras itu tersedia. File yang mereka sediakan digunakan oleh driver kernel yang sesuai, jika ada perangkat keras yang relevan: driver memuat firmware ke dalam memori yang terpasang pada perangkat keras target, yang kemudian menjalankan firmware untuk beroperasi.

Paket-paket firmware ini tidak terkait dengan penginstal firmware yang Anda pikirkan, yang memuat pembaruan firmware ke dalam memori flash (yang hanya perlu dilakukan ketika pembaruan diperlukan). Proses itu memang panjang, seringkali rumit, dan tampaknya penuh dengan bahaya (setidaknya, jika Anda mendasarkan kesan Anda pada peringatan pabrikan). Paket firmware yang termasuk dalam distribusi Linux berisi firmware yang diperlukan setiap kali sistem melakukan boot, karena ia dimuat ke memori yang mudah menguap.


2

Menambahkan ke jawaban yang sudah sangat baik.

File firmware, alias gumpalan biner eksklusif, dimuat ke dalam firmware Anda setidaknya pada saat booting dingin perangkat.

Perangkat itu dirancang untuk mendapatkan firmware dalam RAM alih-alih memiliki ROM + RAM untuk mengurangi biaya produksi. Sebagai contoh, Anda memiliki beberapa chipset wifi Broadcom dan chipset sakelar internal yang berfungsi seperti itu.

Mengatasi poin lain dari pertanyaan Anda tentang menggunakan file firmware di VM.

Saat Anda berurusan dengan VM, Anda tidak perlu file firmware. Mereka tidak akan dimuat di mana pun; apalagi ethernet atau wifi "firmware" file.

Demikian juga, mengingat firmware tidak diperlukan dalam lingkungan VM, itu adalah keistimewaan besar karena di Debian ketergantungan pada paket file firmware generik di kernel Linux.


“Ini adalah keanehan besar karena di Debian ketergantungan pada paket file firmware generik di kernel Linux” - setidaknya firmware yang direkomendasikan oleh paket kernel benar-benar bebas DFSG ;-). (Tapi Anda benar, kedua rekomendasi - firmware-linux-freedan irqbalance- tidak berguna di sebagian besar penyebaran saat ini.)
Stephen Kitt

Saya selalu menjalankan buku pedoman untuk mencopot pemasangan cruft itu setelah serangkaian peningkatan kernel
Rui F Ribeiro

1
Anda juga dapat mengonfigurasi aptsehingga tidak menginstal rekomendasi secara default ...
Stephen Kitt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.