Collection:Device drivers and firmware

From Free Software Directory
Revision as of 16:28, 19 May 2023 by GNUtoo (talk | contribs)
Jump to: navigation, search

Firmware is a class of software, which runs directly on the hardware while device drivers help make different devices work with a given operating system.

This collection lists notable device drivers and firmware that isn't already shipped as part of Linux-libre. In other words, things that users might have to specifically go and download separately from what they already have.

What to do with free software that interacts with nonfree software ?

Sometimes free drivers (like a printer driver) or hardware specific software (like free software that can talk to specific printers to remove ink cartridge limitations) interact with hardware that run nonfree firmwares or operating systems (like printers). It is OK to list such software as long as the nonfree software it interact with is out of the bonds of the operating system and that the free software that interact with it doesn't ship nonfree software.

For instance if we take Libreboot or any of the free GNU/Linux distributions or other free distribution(s), they all interact in some way with hardware that run nonfree firmwares as most mass storage devices (hard disks, SSDs, microSD cards, SD cards, USB mass storage keys, etc) run a nonfree firmware. And while most storage devices have standard interfaces, Linux-libre and Libreboot also interact with software that do not implement standards like the firmware that runs on the embedded controller and that handles the keyboard, suspend-to-ram, voltage ramps, etc.

In all theses case the distributions, Libreboot or Linux-libre are not involved at all in the distribution of that nonfree software and that software doesn't run in Libreboot, Linux-libre or the distributions as it typically runs in separate chips. In some cases (like with keyboards) it's really hard to know if the hardware is running some nonfree software or if it doesn't run software at all. And in most cases given enough efforts the nonfree software could also be replaced with free software (for instance by having people reverse engineer the nonfree software and write documentation, and other people implement a free software equivalent based on the hardware documentation).

Kernel drivers

While Linux contains nonfree software, there are various projects that remove that nonfree software like:

We also have free software kernels for other operating systems

  • Replicant kernels are based on Linux, and they also remove nonfree software
  • Hurd is supported experimentally in the Guix distribution, so it should be fine too.

With GNU/Linux or Android, most of the drivers are part of the kernel, but sometimes there are out of tree modules distributed separately.

Parabola have packages for some of them for instance:

  • libre/acpi_call: The Parabola description states: "A linux kernel module that enables calls to ACPI methods through /proc/acpi/call"
  • libre/bbswitch: The Parabola description states: "Kernel module allowing to switch dedicated graphics card on Optimus laptops"
  • libre/deepin-anything-module: The Parabola description states: "Deepin Anything file search tool, kernel module for Linux kernel"
  • libre/tp_smapi: Implement the Lenovo SMM API commonly found in Thinkpad. It might require the nonfree BIOS to work.
  • libre/vhba-module: The Parabola description states: "Kernel module that emulates SCSI devices"

Parabola also ships the following Arch Linux packages:

  • community/netfilter-fullconenat: The Arch Linux description states: "A kernel module that turns MASQUERADE into full cone SNAT"
  • community/sysdig-dkms: The Arch Linux description states: "DKMS kernel module for sysdig"

It could be interesting to review some of them if they fit interesting use cases.

Userspace drivers

In GNU/Linux and Android, some of the drivers are in userspace. The drivers in userspace often implement specific protocols, like some protocols to talk to modem, lab equipement, etc.

  • Flash chip and flash chip programmers
    • Flashrom: Contains drivers for various flash chips and flash chip programmers.
  • GPU drivers
    • Mesa: has some drivers/compilers for various GPUs. The drivers also need corresponding kernel drivers to work.
  • Lab equipements
    • Libsigrok: provides drivers to control various lab equipements (logic analyzers, oscilloscopes, power supplies, etc)
  • Modem drivers
    • ModemManager has some drivers for various modems / modem protocols.
    • Libmbim implements the MBIM protocol. It's probably used by various software like ModemManager, oFono, etc.
    • Libqmi implements the QMI protocol. It's probably used by various software like ModemManager, oFono, etc.
  • Printers
    • CUPS: Contains drivers for some printers protocols like IPP.
  • SDR

Firmwares that interact with Linux drivers (and possibly applications as well)

  • Computers
  • Misc
    • Firmware-linux-free
      • AV7110 DVB card firmware (av7110/bootcode.bin)
      • Atheros AR9170 free firmware for use with carl9170 (carl9170fw)
      • 3Com Megahertz 3CCFEM556 CIS fix (cis/3CCFEM556.cis)
      • 3Com Megahertz 3CXEM556 CIS fix (cis/3CXEM556.cis)
      • Advantech COMpad-32/85 CIS fix (cis/COMpad2.cis)
      • Advantech COMpad-32/85B-4 CIS fix (cis/COMpad4.cis)
      • NSC DP83903 PCMCIA Ethernet card CIS fix (cis/DP83903.cis)
      • Allied Telesis LA-PCM CIS fix (cis/LA-PCM.cis)
      • MultiTech PCMCIA 56K DataFax CIS fix (cis/MT5634ZLX.cis)
      • NDC PCMCIA Ethernet card CIS fix (cis/NE2K.cis)
      • EN2218-LAN/MODEM CIS fix (cis/PCMLM28.cis)
      • PreMax PE-200 CIS fix (cis/PE-200.cis)
      • LanPro EP-4000A CIS fix (cis/PE520.cis)
      • RS-COM 2P CIS fix (cis/RS-COM-2P.cis)
      • Sierra Aircard 555 CIS fix (cis/SW_555_SER.cis)
      • Sierra Wireless AC710/AC750 CIS fix (cis/SW_7xx_SER.cis)
      • Sierra Wireless AC850/AC860 CIS fix (cis/SW_8xx_SER.cis)
      • Tamarack PCMCIA Ethernet card CIS fix (cis/tamarack.cis)
      • Atari Falcon DSP56001 firmware (dsp56k/bootstrap.bin)
      • Intel C600 SAS/SATA controller default parameters, version 1.3 (isci/isci_firmware.bin)
      • Keyspan USA-19 firmware (keyspan_pda/keyspan_pda.fw)
      • Xircom PGSDB9/Entrega PortGear firmware (keyspan_pda/xircom_pgs.fw)
      • USB-DUX firmware (usbdux_firmware.bin)
      • USB-DUXfast firmware (usbduxfast_firmware.bin)
      • USB-DUXsigma firmware (usbduxsigma_firmware.bin)
    • Linux-libre-firmware
      • a56
      • aica
      • as31
      • ath9k_htc
      • atusb
      • av7110
      • b43-tools
      • carl9170fw
      • cis-tools
      • cis
      • dsp56k
      • ihex2fw
      • isci
      • keyspan_pda
      • openfwwf
      • usbdux
  • Network equipment
  • Phones and smartphones
    • Modem firmwares
      • Pinephone Modem SDK: The Pinephone modem is similar to a smartphone on a chip: It uses a Qualcomm system on a chip that has modem cores and also a core that runs a GNU/Linux distribution that is responsible for interfacing with a host computer (here the Allwinner A64 that runs GNU/Linux). The first issue is that this project uses distributions that are not FSDG compliant (yocto). The second issue is that it requires nonfree modem firmwares to work (probably the "ADSP Firmware"). So if it somehow reuses that (and that the distribution was FSDG compliant) it might work, but if it ships the nonfree firmwares it is problematic.

Boot software

Note that sometimes some boot software (like the BIOS or UEFI) is called boot firmware as in some cases it doesn't tend to change a lot. In other cases it's called bootloader while doing a very similar job, though in that case it tend to be easier to update.

These boot software often contain many drivers for various hardware (hard disk controllers / interfaces, filesystems, etc).

  • GRUB: It can run on some Lemote computers and replace completely the stock bootloader. It can also run in various contexts like with a BIOS, UEFI, with Coreboot, Libreboot, in emulators, etc.
  • Ipxe: It can boot computers from the network. It has drivers for many Ethernet cards, and some WiFi cards that work with free software. Ipxe was born as a fork of Etherboot.
  • SeaBIOS: Bios implementation. It can run with Coreboot, with a virtual machine like qemu, or within an UEFI as CSM(Compatibility software module) to implement BIOS compatibility.

Some well known projects however contain nonfree software:

  • Coreboot: Contain nonfree microcode, use third party nonfree software repositories
  • Libreboot: Contains nonfree software (nonfree microcode) in the latest versions.
  • u-boot: Contains nonfree microcode and firmware

Video BIOS

  • Sgabios: Video BIOS that outputs text on a serial console.

Firmwares that interact with GNU/Linux applications

  • Flash programmers:
  • GPG Tokens
    • Gnuk: Firmware that talks to gpg (indirectly through the ccid and the smartcard GNU/Linux stack). It can also be compiled to run on GNU/Linux and it has similar functionality. The only difference is probably that it doesn't have debug prints (--enable-debug doesn't build. But debug prints are usually not visible to end users anyway) and that it runs as an application on a GNU/Linux computer through USBIP (it's still seen as a regular USB device). To build it under GNU/Linux instead of a microcontroller you can run the following code, './configure --target=GNU_LINUX && make' and then you can run gnuk with: './build/gnuk' and it prints how to connect it to the USB bus with usbip. After connecting it to the USB bus you can use gpg as usual with 'gpg --card-status' for instance.
  • Logic analyzers:
  • Modem firmwares
    • OsmocomBB: A free firmware that can run on some feature phones and the modem of the Openmoko GTA01 and GTA02. It requires part of the stack (the mobile application) to run as a GNU/Linux application.
  • SIM card tracers
    • Simtrace 1 firmware: runs on a microcontroller and talks to the simtrace 1 software that runs on GNU/Linux.
    • Simtrace 2 firmware: runs on a microcontroller and talks to the simtrace 2 software that runs on GNU/Linux.

Standalone firmwares that run on hardware and on GNU/Linux too

These firmwares can (potentially) run on GNU/Linux. This could be done with an emulator or the firmware could be ported to run directly on GNU/Linux too. In both cases this is usually done for testing but it also potentially opens new use cases like for calculators firmwares.

This makes them easier to review as we can just review them like a normal GNU/Linux application.

If they run on GNU/Linux through an emulator, the emulator can be treated like a dependency.

It is then easy to review the emulator first, and if it's free and that it works with the standalone firmware, also review the firmware later on.

  • Music players
    • Rockbox: Firmware for music players. Rockbox runs on GNU/Linux too. To build it: run "mkdir build && cd build && ../tools/configure". Then select "200) SDL" target platform, enter your display width and height, select normal build, run "make &&./rockbox". The rockbox GUI will then take all your screen so it's also best to be able to type "killall rockbox" in some console to exit Rockbox. It probably runs on other OS as well like Android. However the GNU/Linux port seems very experimental (and marked as such by the upstream project). For instance I didn't manage to play music with it because creating the database makes it crash with some floating point error at some point.
  • Calculators
    • KnightOS: Free operating systems for some calcultors. It may also run in emulators in GNU/Linux, so it could be added in this way. It needs to be reviewed.

Standalone firmwares

It might be better to check on the mailing list or on IRC if they are OK to add before adding them as they don't have anything to do with GNU/Linux anymore.

  • Soldering iron
    • IronOS: Soldering iron operating system. Should be under the GPLv3. There is probably no emulator for that. It needs to be reviewed.
      • Depends on FreeRTOS Kernel, FUSB302 driver, CMSIS + STM32F1xx HAL drivers, NMSIS, GD32VF103 board files, WenQuanYi Bitmap Song font and BriefLZ compression library (reference).

See also



Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the page “GNU Free Documentation License”.

The copyright and license notices on this page only apply to the text on this page. Any software or copyright-licenses or other similar notices described in this text has its own copyright notice and license, which can usually be found in the distribution or license text itself.