On 3/6/13 3:18 PM, Otavio Salvador wrote:
On Wed, Mar 6, 2013 at 12:06 PM, John Weber <[email protected]> wrote:
I'm attempting to configure Linux to load firmware for a Broadcom SDIO Wifi
chip (BCM4329) onto an i.MX6-based board.

Here is my main question - How is firmware supposed to be loaded within the
paradigm of a Yocto/Poky-built system?  Any insight and guidance is
appreciated.

What I've done so far, and what I've discovered:

I've incorporated the driver into the kernel (backported from an upstream
kernel rev), and removed the staging drivers present in 3.0.35.  It is
built-in at the moment (not a module) and this is the error that I'm getting
when it times-out loading firmware:

brcmfmac: brcmf_sdbrcm_download_code_file: Fail to request firmware -2
brcmfmac: _brcmf_sdbrcm_download_firmware: dongle image file download failed
brcmfmac: brcmf_bus_start: brcmf_sdbrcm_bus_init failed -1

The error code indicates that it cannot load firmware because it can't find
the firmware file.

I've taken care to put the firmware in /lib/firmware/brcm (2 files).  The
driver hardcodes a relative path filename to the firmware files and I've
made sure that they are the same.

I've researched the firmware request process for the kernel.  My
understanding is that the process looks like this:
1) driver requests firmware file
2) kernel opens up a special set of files in sysfs (/sys/class/firmware/xxx
where xxx is the device name)
3) kernel signals udev to load firmware, giving it the filename and the
device name
4) udev, through its rules, locates the firmware file for the device and
writes it to the special file in sysfs

So, here is where I'm starting to get confused.  The default udev rules that
are created in /lib/udev/rules.d/50-udev-default.rules show the following
rule for firmware:

SUBSYSTEM=="firmware", ACTION=="add", IMPORT{builtin}="firmware"

I'm guessing that this is for cases where the firmware file is built-in to
the kernel image.  I can see the necessity for doing this in some cases, but
that is not what I'm doing at the moment, I'm trying to load the firmware
from a file in the filesystem.  That requires udev to run a program or
script that will read the file and write it to the appropriate file in
sysfs.

The files in the poky udev recipe offers a clue, but for some reason that I
don't understand, this file does not make it into the filesystem:

poky/meta/recipes-core/udev/udev/udev.rules:

# Firmware Helper
ACTION=="add", SUBSYSTEM=="firmware", RUN+="/lib/udev/firmware.sh"

This rule expects that there is a firmware helper script "firmware.sh"
somewhere in the filesystem.  Other than this file, I can't file any
reference to a "firmware.sh" file anywhere in the metadata, which could
explain why this line doesn't make it into the installed filesystem.  I
could only find references to files named this on the net.

This is danny or master? For danny, please check the version of udev
being included as the udev maintained in meta-oe has some bugs but it
is used by default.


I'm using master at the moment.  The version of udev is 182 in poky.


_______________________________________________
meta-freescale mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/meta-freescale

Reply via email to