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