aboutsummaryrefslogtreecommitdiffstats
DreamPlug uap8xxx WiFi Access Point Kernel Module Patches for Linux 3.2 (wheezy)
================================================================================

This repository is forked from:

https://github.com/bauermann/dreamplug

The patches were "originally" grabbed from:

http://sheeva.with-linux.com/sheeva/kernel/3/3.2/3.2.9/source/

It looks like mvsdio-1-2.6.30.patch was edited in bauermann's version; i've
included the larger original for comparison.

I made one more small but questionable tweak to get things to compile:
commenting out line 74 of libertas_uap/uap_debug.c.

This repo is modeled on bauermann's 3.4 kernel patches, only "re-backported" to
contain older patches in a simple form for use compiling just the uap8xxx.ko
kernel module for the version 3.2.9 kernel that seems to be the stable release
version for debian wheezy.

This is all a horrible short-term kludge. Preferably the libertas_uap/uap8xxx
code should get added to the kernel mainline, or at least be distributed in a
coherent fashion... but I am not that hero.

Note: by default *any* user can access and modify all settings via the uaputl
mechanism:

http://lists.debian.org/debian-arm/2010/05/msg00082.html

Quick Binary Install
--------------------

If you have a dreamplug running the exact linux 3.2.9 kirkwood kernel that came
with debian wheezy or FreedomBox (as of Aug 22, 2012), you can just install the
uap8xxx.ko-3.2.9-kirkwood, firmware, and a modprobe file and you are good to
go... scp them to the device and then:

    # # as root
    # mkdir /lib/modules/$(uname -r)/kernel/drivers/net/wireless/libertas_uap
    # cp uap8xxx.ko-3.2.9-kirkwood /lib/modules/$(uname -r)/kernel/drivers/net/wireless/libertas_uap
    # depmod -a
    # cp -r firmware/mrvl /lib/firmware/mrvl
    # cp modprobe_libertas_uap.conf /etc/modprobe.d/libertas_uap
    # reboot

Extracting kernel module source (on any machine)
------------------------------------------------

This explains the steps I took to extract out the uap8xxx ("libertas_uap")
module code. These are now in the libertas_uap folder in this repo, so you
don't need to repeate these steps.

1. Get the kernel source and other needed packages.
  # apt-get install lzma quilt
2. Get the Linux 3.4 kernel.
  # wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.9.tar.xz
2. Unpack it somewhere.
  # tar xvf linux-3.2.9.tar.bz2
3. Apply the patches found in with-linux-3.2.
  # cd linux-3.2.9
  # ln -s ../with-linux-3.2 patches
  # quilt push -a
4. Copy out the module sources
  # cp -r drivers/net/wireless/libertas_uap/ ../libertas_uap

This source didn't compile for me as-is; I blindly commented out line 74 of
uap_debug.c, which is a horrible hack and might result in kernel crashes down
the line.

Compiling uap8xxx.ko module (on DreamPlug)
------------------------------------------

These instructions based on an old mailing list post by Daniel Gillmor [1].

Generate a tarball of the libertas_uap files extracted above (or found in the
./libertas_uap folder of this repo):

    # tar -cf tar -cf libertas_uap.tar libertas_uap
    # gzip libertas_uap.tar

Copy that tarball over to a DreamPlug running a linux 3.2 kernel (only tested
with the debian wheezy 3.2.9 kernel) and install build requirements (slow!):

    # apt-get update
    # apt-get install module-assistant linux-headers-kirkwood build-essential

As any user, extract the source and build it:

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

This compiles pretty quickly for me, even on the DreamPlug. If that worked out,
install the results as root:

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

If you don't already have them installed, copy over the ./firmware/mrvl .bin
files and install as root:

    # cp -r firmware/mrvl /lib/firmware/mrvl

To prevent block the libertas_sdio driver from glomming on to the hardware
before uap8xxx can get to it, blacklist the other drivers by adding this file
as /etc/modprobe.d/libertas_uap.conf (or just copy modprobe_libertas_uap.conf
from this repo):

    # blacklist competing modules for the same hardware
    # used by libertas_uap (uap8xxx.ko)
    blacklist libertas_sdio
    blacklist libertas

At this point I did a cold reboot (shutdown and disconnect power), though you
might be able to just modprobe following Dan's instructions:

    root@moo:~# ip link show uap0
    Device "uap0" does not exist.
    root@moo:~# modprobe -v uap8xxx
    insmod /lib/modules/2.6.32-5-kirkwood/kernel/drivers/net/wireless/libertas_uap/uap8xxx.ko
    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

Horray!

[1] http://lists.debian.org/debian-arm/2010/05/msg00081.html