[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

functioning libertas_uap from source (still needs firmware blob) [was: Re: guruplug notes]



On 05/24/2010 11:31 AM, Daniel Kahn Gillmor wrote:
> At that point, i'll start looking at the wireless business again.

so on my freshly wiped guruplug, i've gone ahead and re-built the
uap8xxx.ko module to work with the current sid kernel.

It wasn't too bad:  as root, i fetched the various build dependencies
needed for building modules, thanks to module-assistant:

# aptitude install module-assistant
# module-assistant prepare

Then, i fetched the kernel patchset distributed by marvell [0], and made
a simple tarball from drivers/net/wireless/libertas_uap from
0002-Driver-for-Marvell-Libertas-8688-SDIO-micro-AP-suppo.patch

(the tarball i created can be found at [1])

As a regular user, i unpacked and built the tarball:

$ tar xzf libertas_uap.tgz
$ cd libertas_uap
$ make CONFIG_LIBERTAS_UAP=m -C /lib/modules/$(uname -r)/build M=$(pwd)

And as the superuser again, moved it into place and told the kernel
about it:

# mkdir /lib/modules/$(uname -r)/kernel/drivers/net/wireless/libertas_uap
# cp uap8xxx.ko /lib/modules/$(uname
-r)/kernel/drivers/net/wireless/libertas_uap
# depmod -a

I then placed the 2 firmware blobs (copied from another guruplug) in
place: helper_sd.bin and sd8688_ap.bin, both placed in /lib/firmware/mrvl/

I also blacklisted the competing libertas modules by placing a file in
/etc/modprobe.d:

0 dkg@moo:~$ cat /etc/modprobe.d/libertas_uap.conf
# blacklist competing modules for the same hardware
# used by libertas_uap (uap8xxx.ko)
blacklist libertas_sdio
blacklist libertas
0 dkg@moo:~$

And then i was in business:

0 root@moo:~# ip link show uap0
Device "uap0" does not exist.
255 root@moo:~# modprobe -v uap8xxx
insmod
/lib/modules/2.6.32-5-kirkwood/kernel/drivers/net/wireless/libertas_uap/uap8xxx.ko

0 root@moo:~# ip link show uap0
4: uap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:24:23:YY:WW:ZZ brd ff:ff:ff:ff:ff:ff
0 root@moo:~#

To get to act as an AP, i had to copy /usr/bin/uaputl from another
guruplug.  It seems to work fine.  If no one has gotten the code from
marvell, i'll look into replacing uaputl -- it doesn't look too complex.

hope folks find this useful,

	--dkg

PS boot your kernel with the verbose option when doing this stuff.  it
provides useful info about the firmware loading.

PPS i find that if you have modprobe uap8xxx.ko when no firmware is
available, shutting down tickles a kernel bug:

> All processes ended within 1 seconds....done.
> [ 1469.217114] default_device_exit: failed to move eth0 to init_net: -22
> [ 1469.223635] kernel BUG at /home/dkg/src/linux/linux-2.6-2.6.32/debian/build/source_armel_none/net/core/dev.c:5608!
> [ 1469.234061] Unable to handle kernel NULL pointer dereference at virtual address 00000000

it'd be good to understand why this happens.  i can give a full
backtrace to anyone who is interested.

[0]
http://plugcomputer.org/plugwiki/images/c/c6/Guruplug-patchset-2.6.33.2.tar.bz2
[1] http://lair.fifthhorseman.net/~dkg/machines/moo/libertas_uap.tgz

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: