Day: March 17, 2010

Including driver firmware on Linux kernel image

Driver’s binary firmware is a dedicated issue to Linux. In fact even open source drivers usually load its firmware to internal chip and it drives some puritan GNU people to become crazy.

Unfortunately you don’t have much option because these firmware are necessary to get your device working.

When developing an embedded system you could face a “Chicken and Egg” dilemma related to firmware loading. For example, you could need to mount a root file system through NFS over wireless, but your wireless interface needs a firmware which is in the rootfs (at /lib/firmware).

Hopefully you have some approaches to solve this dilemma:
1) Create an initrd (initramfs) with needed firmware inside;
2) Include your driver built-in into the kernel.

To include the needed firmware into the kernel just select this option:

Device Drivers  --->
    Generic Driver Options  --->
    -*- Userspace firmware loading support
    [*]   Include in-kernel firmware blobs in kernel binary

Also you could specify an external firmware path at:

(/home/user/newfirmware.bin)    External firmware blobs to build into the kernel binary