Spass beim Linux-Kernel-Upgrade oder der „non-free firmware removal process“

Eigentlich sollte ein Kernel-Upgrade in der Regel eine undramatische Sache sein, wenn man nicht gerade die aller-neuste-bleeding-edge Hardware besitzt. Die Treiberunterstützung aktueller Stock-Kernel von Distributionen wie Debian ist recht breit gefächert, so das 1 bis 10 Jahre alte Hardware ad hoc booten sollte .. die Betonung liegt auf sollte.

Gäbe es da nicht so etwas wie den „non-free firmware removal process“ bei dem sich die Hardliner unter den Debian-Entwickler durchsetzten und mit der Zeit jeden noch so kleinen Binary-Blob aus den Quellcodes der Linux-Treiber verbannen wollen. Hintergrund ist das einige Treiber schon seit recht langer Zeit kleine Fragment binärer Codes enthalten die ähnlich einer Firmware geladen werden. Allerdings standen viele davon unter einem rechtlich ungeklärten Status [1], wobei deren Verwendung stillschweigend von den Hardwareherstellern geduldet wurde.

Mindestens ebenso lang wie diese binären Fragmente gibt es auch schon Bestrebungen eine pure reine Opensource Linux Distribution zu produzieren, der auf 100% Quellcode ohne „Closed Source“-Abschnitte, seien sie auch nochso klein, besteht. Mit Kernel 2.6.29 beginnend scheinen diese Bestrebungen nun realisiert zu werden. Die binären Fragmente wurden herausgetrennt und in Form von Firmware-Dateien einheitlich in /lib/firmware abgelegt.

W: Possible missing firmware /lib/firmware/tigon/tg3.bin for module tg3

Die Konsequenz davon ist, wenn man versehentlich die obige Meldung bei der Installation eines neuen Kernels-Paketes übersieht, sehr schnell mit einem System ohne funktionierende Netzwerkkarte dasteht. Da von dieser Sache sehr viele Netzwerkkarten-Treiber betroffen sind.

Einen Teil der benötigten Firmware-Dateien kann man unter Debian-Linux über zwei Pakete via apt (als Benutzer root) installieren.


apt-get install firmware-linux-free firmware-linux-nonfree

In den Paketen sind die Firmware-Dateien für folgende Hardware enthalten.


3Com Typhoon firmware, version 03.001.008 (3com/typhoon.bin)
AdvanSys ASC-3550 firmware (advansys/3550.bin)
AdvanSys ASC-38C0800 firmware (advansys/38C0800.bin)
AdvanSys ASC-38C1600 firmware (advansys/38C1600.bin)
AdvanSys SCSI controller microcode (advansys/mcode.bin)
Agere/Prism/Symbol Orinoco firmware (AP mode), version 9.48 Hermes I (agere_ap_fw.bin)
Agere/Prism/Symbol Orinoco firmware (STA mode), version 9.48 Hermes I (agere_sta_fw.bin)
Chelsio T3 optical EDC firmware (AEL2005 PHY) (cxgb3/ael2005_opt_edc.bin)
Chelsio T3 twinax EDC firmware (AEL2005 PHY) (cxgb3/ael2005_twx_edc.bin)
Chelsio T3 twinax EDC firmware (AEL2020 PHY) (cxgb3/ael2020_twx_edc.bin)
Chelsio T3B protocol engine firmware, version 1.1.0 (cxgb3/t3b_psram-1.1.0.bin)
Chelsio T3C protocol engine firmware, version 1.1.0 (cxgb3/t3c_psram-1.1.0.bin)
Chelsio T3 main firmware, version 7.4.0 (cxgb3/t3fw-7.4.0.bin)
DAB-USB FPGA bitfile (dabusb/bitstream.bin)
DAB-USB firmware (dabusb/firmware.fw)
Xceive 5000 tuner firmware, version 1.6.114 (dvb-fe-xc5000-1.6.114.fw)
DiBcom dib0700 USB DVB bridge firmware, version 1.20 (dvb-usb-dib0700-1.20.fw)
Intel 82559 D101M microcode (e100/d101m_ucode.bin)
Intel 82559 D101S microcode (e100/d101s_ucode.bin)
Intel 82551-F and 82551-10 microcode (e100/d102e_ucode.bin)
kaweth/new_code.bin
kaweth/new_code_fix.bin
kaweth/trigger_code.bin
kaweth/trigger_code_fix.bin
Matrox G200 WARP engine microcode (matrox/g200_warp.fw)
Matrox G400/G550 WARP engine microcode (matrox/g400_warp.fw)
Rage 128 CCE microcode (r128/r128_cce.bin)
Radeon R100-family CP microcode (radeon/R100_cp.bin)
Radeon R200-family CP microcode (radeon/R200_cp.bin)
Radeon R300-family CP microcode (radeon/R300_cp.bin)
Radeon R400-family CP microcode (radeon/R420_cp.bin)
Radeon R500-family CP microcode (radeon/R520_cp.bin)
Radeon R600 ME microcode (radeon/R600_me.bin)
Radeon R600 PFP microcode (radeon/R600_pfp.bin)
Radeon RS600 CP microcode (radeon/RS600_cp.bin)
Radeon RS690 CP microcode (radeon/RS690_cp.bin)
Radeon RS780 ME microcode (radeon/RS780_me.bin)
Radeon RS780 PFP microcode (radeon/RS780_pfp.bin)
Radeon RV610 ME microcode (radeon/RV610_me.bin)
Radeon RV610 PFP microcode (radeon/RV610_pfp.bin)
Radeon RV620 ME microcode (radeon/RV620_me.bin)
Radeon RV620 PFP microcode (radeon/RV620_pfp.bin)
Radeon RV630 ME microcode (radeon/RV630_me.bin)
Radeon RV630 PFP microcode (radeon/RV630_pfp.bin)
Radeon RV635 ME microcode (radeon/RV635_me.bin)
Radeon RV635 PFP microcode (radeon/RV635_pfp.bin)
Radeon RV670 ME microcode (radeon/RV670_me.bin)
Radeon RV670 PFP microcode (radeon/RV670_pfp.bin)
Radeon RV710 ME microcode (radeon/RV710_me.bin)
Radeon RV710 PFP microcode (radeon/RV710_pfp.bin)
Radeon RV730 ME microcode (radeon/RV730_me.bin)
Radeon RV730 PFP microcode (radeon/RV730_pfp.bin)
Radeon RV770 ME microcode (radeon/RV770_me.bin)
Radeon RV770 PFP microcode (radeon/RV770_pfp.bin)
Tehuti network card firmware (tehuti/bdx.bin)
Broadcom BCM5703/BCM5704 TSO firmware (tigon/tg3_tso.bin)
Broadcom BCM5701A0 firmware (tigon/tg3.bin)
Broadcom BCM5705 TSO firmware (tigon/tg3_tso5.bin)


Sollten einige fehlenden Dateien noch nicht in die Pakete aufgenommen worden sein finden sie sich im aktuellen Kernel-Repository, diese muss man dann manuell downloaden und nach /lib/firmware befördern.

Hinweis

Falls apt-get das package firmware-linux nicht finden kann, es liegt im „non-free“ Bereich des Debian-Repositories. Die Konfiguration von apt kann man wiefolgt überprüfen und gegebenfalls anpassen.


#> nano /etc/apt/sources.list
deb http://ftp.de.debian.org/debian testing main contrib non-free
deb-src http://ftp.de.debian.org/debian testing main contrib non-free

 

Links

http://lwn.net/Articles/304925/

http://www.gnu.org/distros/free-system-distribution-guidelines.html

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=firmware;hb=HEAD

http://blogs.koolwal.net/2009/05/11/tip-debian-linux-kernel-firmware-issues-ethernet-drivers-missing/

http://blog.antiblau.de/2009/04/27/debian-und-ausgelagerte-firmware-in-linux-2629

10 Kommentare.

  1. Einfach eine zweite Netzwerkkarte (welche man in einem Server ohnehin haben sollte), und schon ist das kein Problem mehr…

    Hat mich heute nach dem Update auch getroffen, einfach Kabel umgesteckt, et voila 😎

    • Die damalige Generation von Servern (egal ob von HP, IBM oder Dell) besaß in der Regel schon 2 Interfaces. Heute sind schon 4 die Regel.

      Aber allen ist gemeinsam das identische Chipsätze sie steuern. Hier müsste man dann extra etwas von einem Fremdhersteller dazustecken, da dürfte es wohl Fragen vom Management geben, die man gut begründen sollte.

      Nach mittlerweile 5 Jahren hat sich meine ich diese Situation aber schon erheblich gebessert. Waren wohl nur Kinderkrankheiten die sich anfangs mit der Änderung der Kernel-Treiber-Policy ergeben haben.

  2. Genau das wäre mir beinahe passiert! Danke für solche Seiten + Autoren.

  3. Danke auf das Firmware-Package auch häüfiger aufgeräumt, bzw. was gravierender ist wurde da zum Teil vergessen eine Minimum-Kernel-Version anzugeben !!

  4. Danke für diesen Tipp! Hat mir glatt den Hintern gerettet! 🙂

    • Das freut mich, das der Tipp nach so langer Zeit noch seine Wirkung zeigt !

      Wobei wie ich vor einiger Zeit schmerzlich feststellen musste, sollte man sich bewusst sein das die Firmware-* Packages jeweils nur für relativ aktuelle Kernel gelten !
      Zögert man auf einem System das eigentliche Kernel-Upgrade zu lange heraus. kann es passieren das plötzlich bei einem Systemstart Firmwaremodule fehlen !

      Wie es scheint wird in den Firmware-Package auch häüfiger aufgeräumt, bzw. was gravierender ist wurde da zum Teil vergessen eine Minimum-Kernel-Version anzugeben !!
      Sonst würde APT zumindest meckern wenn ein Firmware-Package installiert werden soll was gar keine Binaries zu den entsprechenden Treiber-Modulen des Kernels enthält.

  5. dumm ist nur, dass ohne Netzwerkkarte mir die anpassung des apt nichts bringt, da ein zugriff auf den mirror übers netz ja nicht geht.
    das .deb paket während der installation einzuspielen geht auch nicht, da die installer shell keinen paketmanager enthält.

    so bleibt nur, das firmware-file aus einem anderen system zu pfriemeln oder im www danach zu suchen und das ding während der installation von einem gemounteten usb-stick rein zu kopieren … damit ist die einfache netinst-methode wirklich unschön geworden – wenigstens die netzwerkkarten-fw hätte man ja drinlassen können……

    • Eventuell könnte man ja das aktuelle firmware-linux-nonfree package mit in das netboot.iso mit einbauen. Auf den netboot-CDs wie auch allen anderen Installer-CDs ist ein kleines Mini-Repository enthalten. Ob aber der Installer nun einfach alle Pakete installiert, ist aber weiterhin fraglich, aber zumindest hat man es dann schon mal „an Board“ bei der Installation.

      Ich denke mal das auf der Installationsconsole zwar nicht APT aber zumindest dpkg als Installer verfügbar ist, damit sollte sich das Firmware-Paket auch mittels
      dpkg -i Paketdatei von der Console aus installieren lassen ?

      Das ist leider richtig das das Problem auf diese Weise quasi zum echten Show-Stopper wird, wenn man Linux ausprobieren möchte. Ich denke mal das Debian da leider keine „Non-free“ per Default mit auf eine offizielle Installer-CD bringen wird, das dies ja genau die rechtlichen Probleme mit sich bringt.

  6. Good article Thank you so much

  7. Good job. I’m definitely going to bookmark you!