# Firmware -- Solved

## Robyn Hood

I've recently upgraded to linux-3.0.6

Now when I boot, I get this message:

```
xc2028 1-0061: Error: firmware xc3028-v27.fw not found.
```

My previous kernel used to find it in /lib/firmware/

the file is still there.

I suppose that is it now configured to look somewhere else, but I've no idea how to find out where.

Can anyone help?

----------

## roarinelk

make tuner-xc2028 a module if it isn't already.

----------

## Sparkster

I am also having a similar issue with an afatech DVB USB stick. While booting, I get this message:

```

[    2.874596] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in cold state, will try to load a firmware

[   63.712076] dvb-usb: did not find the firmware file. (dvb-usb-af9015.fw) Please see linux/Documentation/dvb/ for more details on firmware-problems. (-2)

[   63.726744] dvb_usb_af9015: probe of 1-2:1.0 failed with error -2

[   63.734196] usbcore: registered new interface driver dvb_usb_af9015

```

The firmware file is in /lib/firmware/ (it's dvb-usb-af9015.fw).

In fact, if after booting, I unplug and plug it again, it loads correctly:

```

[  161.765736] usb 1-2: USB disconnect, device number 2

[  161.765878] dvb-usb: generic DVB-USB module successfully deinitialized and disconnected.

-----------------------------------------------------------------

[  166.370035] usb 1-2: new high speed USB device number 3 using ehci_hcd

[  166.488641] usb 1-2: New USB device found, idVendor=15a4, idProduct=9016

[  166.488647] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[  166.488651] usb 1-2: Product: DVB-T 2

[  166.488655] usb 1-2: Manufacturer: Afatech

[  166.488658] usb 1-2: SerialNumber: 010101010600001

[  166.856282] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in cold state, will try to load a firmware

[  166.915894] dvb-usb: downloading firmware from file 'dvb-usb-af9015.fw'

[  166.985298] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in warm state.

[  166.985547] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.

[  166.985998] DVB: registering new adapter (Afatech AF9015 DVB-T USB2.0 stick)

[  166.988289] af9013: firmware version:5.1.0.0

[  166.992916] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)...

[  166.995170] tda18218: NXP TDA18218HN successfully identified.

[  166.996920] Registered IR keymap rc-empty

[  166.997347] input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:03.3/usb1/1-2/rc/rc0/input3

[  166.997449] rc0: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:03.3/usb1/1-2/rc/rc0

[  166.997455] dvb-usb: schedule remote query interval to 500 msecs.

[  166.997462] dvb-usb: Afatech AF9015 DVB-T USB2.0 stick successfully initialized and connected.

```

So it seems it's just a booting issue. ¿Any ideas?

Thanks.

----------

## Jaglover

What roarinelk said.

When kernel loads root is not mounted yet and firmware cannot be accessed.

----------

## Sparkster

But it's kinda strange, because I have another PC which loads it perfectly:

```

[    4.434458] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in warm state.

[    4.453369] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.

[    4.472991] DVB: registering new adapter (Afatech AF9015 DVB-T USB2.0 stick)

[    4.494370] af9013: firmware version:5.1.0.0

[    4.519048] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)...

[    4.540883] tda18218: NXP TDA18218HN successfully identified.

[    4.542503] Registered IR keymap rc-empty

[    4.542799] input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.1/2-1.1.1.3/rc/rc0/input5

[    4.542917] rc0: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.1/2-1.1.1.3/rc/rc0

[    4.542919] dvb-usb: schedule remote query interval to 500 msecs.

[    4.542920] dvb-usb: Afatech AF9015 DVB-T USB2.0 stick successfully initialized and connected.

```

As I can see, this other PC detects it in warm state, but the first one in cold state.

The only difference is that this other PC is an amd64, instead of a x86. Does it matter?

I even used the .config file of the kernel of the new one to compile the old one (I change all the hardware stuff, of course).

Thanks.

----------

## Robyn Hood

Thanks 

The firmware is now loading for me.  :Smile: 

I still havn't got a /dev/dvb0/ but that's probably to do with setting the module options and I'll see whether I can find the answer first.

----------

## Sparkster

Tsk... I give up. I didn't find the reason why the amd64 loads it and the x86 don't. I compiled the kernel module as "module" and now it works properly. Thanks.

----------

## Jaglover

The only explanation is it is built into kernel.

----------

## Gusar

 *Sparkster wrote:*   

> Tsk... I give up. I didn't find the reason why the amd64 loads it and the x86 don't. I compiled the kernel module as "module" and now it works properly. Thanks.

 

It has nothing to do with architecture, it's one thing and only one thing: Do you insert the device before or after the filesystem is mounted. If the driver is built-in and you insert it before the filesystem is mounted (read: the device is there at boot), it's impossible for it load the firmware, because it's on the yet-to-be-mounted filesystem.

----------

## Sparkster

 *Gusar wrote:*   

>  *Sparkster wrote:*   Tsk... I give up. I didn't find the reason why the amd64 loads it and the x86 don't. I compiled the kernel module as "module" and now it works properly. Thanks. 
> 
> It has nothing to do with architecture, it's one thing and only one thing: Do you insert the device before or after the filesystem is mounted. If the driver is built-in and you insert it before the filesystem is mounted (read: the device is there at boot), it's impossible for it load the firmware, because it's on the yet-to-be-mounted filesystem.

 

I would like to think that, but in the amd64 it's not that way. As you can see in one of my previous posts, it detects perfectly the DVB stick at boot

```

[    4.434458] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in warm state. 

[    4.453369] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. 

[    4.472991] DVB: registering new adapter (Afatech AF9015 DVB-T USB2.0 stick) 

[    4.494370] af9013: firmware version:5.1.0.0 

[    4.519048] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)... 

[    4.540883] tda18218: NXP TDA18218HN successfully identified. 

[    4.542503] Registered IR keymap rc-empty 

[    4.542799] input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.1/2-1.1.1.3/rc/rc0/input5 

[    4.542917] rc0: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.1/2-1.1.1.3/rc/rc0 

[    4.542919] dvb-usb: schedule remote query interval to 500 msecs. 

[    4.542920] dvb-usb: Afatech AF9015 DVB-T USB2.0 stick successfully initialized and connected.

```

and the module is built in:

```

  │ │                                <*> Multimedia support  --->    

  │ │                                     [*]   DVB/ATSC adapters  --->  

  │ │                                        <*>   Support for various USB DVB devices

  │ │                                            <*>     Afatech AF9015 DVB-T USB2.0 support

```

This happens only in the amd64, but no in the x86, with the same kernel configuration, every module (except the hardware stuff, processor type, etc). That's why I wanted to find out what's happening, but I wasn't able.

EDIT: I don't know if it's important, but the hard drive are also different. In the amd64 it's a SATA, but in the x86 it's an IDE. Anyway, the filesystems are the same.

----------

## Gusar

Hmm, do you use an initramfs on the amd64 machine and the firmware is in there? Or did you also build the firmware into the kernel?

----------

## Sparkster

Nope, that's the strange thing. I use a standard gentoo kernel, without initram

```

default 0

timeout 3

title Gentoo Linux 3.0.6-gentoo

root (hd0,4)

kernel /boot/linux-3.0.6-gentoo root=/dev/sda7 vga=791 splash=silent,fadein,theme:emergence console=tty1

```

and I didn't do anything with the firmware, only putting it in the firmware directory. In fact, let's check this: 

WITH firmware in /lib/firmware/:

```

[    4.092865] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in warm state.

[    4.110408] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.

[    4.128064] DVB: registering new adapter (Afatech AF9015 DVB-T USB2.0 stick)

[    4.147700] af9013: firmware version:5.1.0.0

[    4.170631] DVB: registering adapter 0 frontend 0 (Afatech AF9013 DVB-T)...

[    4.190488] tda18218: NXP TDA18218HN successfully identified.

[    4.192183] Registered IR keymap rc-empty

[    4.192304] input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.3/rc/rc0/input5

[    4.192333] rc0: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.3/rc/rc0

[    4.192335] dvb-usb: schedule remote query interval to 500 msecs.

[    4.192336] dvb-usb: Afatech AF9015 DVB-T USB2.0 stick successfully initialized and connected.

```

WITHOUT firmware in /lib/firmware/:

```

[    3.666254] dvb-usb: found a 'Afatech AF9015 DVB-T USB2.0 stick' in cold state, will try to load a firmware

[    3.905297] ata5: SATA link down (SStatus 0 SControl 300)

[    4.224378] ata6: SATA link down (SStatus 0 SControl 300)

[    4.238967] scsi 6:0:0:0: Direct-Access     ATA      Super Speed      0956 PQ: 0 ANSI: 5

[    4.254127] sd 6:0:0:0: [sda] 1953366016 512-byte logical blocks: (1.00 TB/931 GiB)

[    4.269186] sd 6:0:0:0: [sda] Write Protect is off

[    4.283935] sd 6:0:0:0: [sda] Mode Sense: 00 3a 00 00

[    4.283945] sd 6:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA

[    4.382766]  sda: sda1 sda2 sda3 < sda5 sda6 sda7 sda8 sda9 sda10 >

[    4.398569] sd 6:0:0:0: [sda] Attached SCSI disk

[    4.413925] REISERFS (device sda7): found reiserfs format "3.6" with standard journal

[    4.429540] REISERFS (device sda7): using ordered data mode

[    4.468644] REISERFS (device sda7): journal params: device sda7, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30

[    4.499793] REISERFS (device sda7): checking transaction log (sda7)

[    4.549261] REISERFS (device sda7): Using r5 hash to sort names

[    4.564932] VFS: Mounted root (reiserfs filesystem) readonly on device 8:7.

[    4.580704] Freeing unused kernel memory: 496k freed

[    7.970976] udev[1396]: starting version 164

[    8.022172] tuner 0-0060: Tuner has no way to set tv freq

[    8.022175] tuner 0-0060: Tuner has no way to set tv freq

[    8.022188] tuner 0-0060: Tuner has no way to set tv freq

[    8.022190] tuner 0-0060: Tuner has no way to set tv freq

[    8.091271] dvb-usb: did not find the firmware file. (dvb-usb-af9015.fw) Please see linux/Documentation/dvb/ for more details on firmware-problems. (-2)

[    8.091277] dvb_usb_af9015: probe of 1-1.3:1.0 failed with error -2

```

I have just checked it again. This results have been created right now  :Razz: 

Anyway, those REISERFS messages suggest me that maybe the SATA disks load before in boot time than the IDE, so maybe it's just a disk architecture issue.

----------

## Sparkster

Yep, I have just checked that there are several SATA messages referring to my filesystems before the firmware search. I supose it depends on the computer.

----------

