I bought (a few) Wireless-N WiFi adapters from Ebay to enable WiFi on my OpenELEC-featured Raspberry Pi. I was hoping it would work out-of-the-box, but that wasn't true. Some attempts such as modprobe rt2x00usb
did not work as expected because it's a totally different chipset.
The output of lsusb
:
...
Bus 001 Device 004: ID 148f:7601 Ralink Technology, Corp.
...
This guide shows you how to cross compile the driver and integrate it in an existing OpenELEC installation. It works under Ubuntu 14.04 for OpenELEC nightly with kernel version 3.15. Common build tools are assumed, plus squashfs-tools
). I'm not a pro in building modules, but this has worked for me.
- Install the dependencies:
apt-get install build-essential squashfs-tools git
- Download the the driver source from here (version v3.0.0.4 from 9/13/2013) and unzip it.
- Apply this patch, for kernel 3.13+. Can be done manually.
- Note your OpenELEC kernel version, via SSH
uname -a
. - Clone the Raspberry Pi tools repository:
git clone https://github.com/raspberrypi/tools
. - Clone the OpenELEC repository:
git clone https://github.com/OpenELEC/OpenELEC.tv
. - Download the approriate kernel version from here, and unzip it.
- Apply the patch to
KERNEL_ROOT
:patch -p1 < OPENELEC_ROOT/projects/RPi/patches/linux/linux-01-RPi_support.patch
. Make sure you have changed directory to theKERNEL_ROOT
folder. - Copy
OPENELEC_ROOT/project/RPi/config/linux.arm.conf
toKERNEL_ROOT/.config
- Apply the patch to
- Add
RPI_TOOLS_ROOT/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
to yourPATH
. The compile tools should be available for running. - Compile kernel modules:
make modules
. - Change
DRIVER_ROOT/Makefile
to look as below (around line 198). Replace theLINUX_ROOT
with your path.
ifeq ($(PLATFORM),PC)
# Linux 2.6
LINUX_SRC = LINUX_ROOT
# Linux 2.4 Change to your local setting
#LINUX_SRC = /usr/src/linux-2.4
LINUX_SRC_MODULE = LINUX_ROOT/kernel/drivers/net/wireless/
CROSS_COMPILE = arm-linux-gnueabihf-
ARCH=arm
export ARCH
export CROSS_COMPILE
endif
- Run
make
, which should result in a kernel objectDRIVER_ROOT/os/linux/mt7601Usta.ko
- Take the
SYSTEM
image file from your SD card, and mount it withsudo mount -t squashfs SYSTEM TMPDIR
. - Since the file system is read-only, rsync (as root) the contents to another dir
sudo rsync -avp TMPDIR TMPDIR2
. - Create directories for the following operations (as root) if needed. Replace
x.x.x
with the kernel version.- Copy
DRIVER_ROOT/os/linux/mt7601Usta.ko
toTMPDIR2/lib/modules/x.x.x/kernel/drivers/net/wireless
- Copy
DRIVER_ROOT/RT2870STA.dat
toTMPDIR2/etc/Wireless/RT2870STA/RT2870STA.dat
- In
TMPDIR2
, rundepmod -a -b . x.x.x
- Copy
- Repack the filesystem (as root) with
sudo mksquashfs TMPDIR2 SYSTEM -noappend -comp gzip
. - Run
chown USER:USER SYSTEM
so you can access the file. - Copy the new
SYSTEM
image to your SD card and boot OpenELEC.
Your WiFi should be ready to use! In case of problems, SSH into the system, and view the output of dmesg
. Note that auto-update will probably overwrite your custom SYSTEM
image, but chances are the driver will still work.
I just tried this with OpenElec 5.0.3 which has a 3.17.8 kernel. The patch failed.
So it looks like the OpenElec is in active development and I need to get the one which matches the actual release, not the most current. It looks like this should be the 'openelec-5.0' branch... I'll try that...
--- update -- yes, it works fine now.
you can do a 'git checkout openelec-5.0' in the OPENELEC_ROOT after the 'git clone' (or, what I did, when I realized that only two files are needed - the .patch and the config - I just got those files directly off the 'raw' links on github).
I also ended up removing a line from the linux root Makefile which causes 'implicit integer declaration' to be an error - but that might not have been necessary. In my first try I had actually unpacked the wrong driver (version 3.0.0.3) somehow, and managed to build it and try it, and discovered that it actually comes in two modules, and, well, I'll stop now. Suffice it to say that the one you want is called DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2, and that the process described worked fine for me on OpenElec 5.0.3 once I selected the openelec-5.0 branch as described above, and followed all the instructions properly.