RT2070 ARM-linux
http://ubuntuforums.org/showthread.php?t=1285828Tenda W541U V2.0 Wireless USB Adapter / Ralink RT2070 How ToHi,After some time of searching, switching between sadness and happiness and pulling my hair
http://ubuntuforums.org/showthread.php?t=1285828
Hi,
After some time of searching, switching between sadness and happiness and pulling my hair out I finally got my Tenda W541U V2.0 a.k.a. Tenda 54M Mini, a.k.a. Ralink RT2070L working.
I wrote this tutorial because I googled and I found nothing, nobody seems to know how to do it or is not willing to share his method. I even emailed Tenda support and they said their hardware is not working on Linux but it seems it actually does.
Note: There are many CHEAP usb adapters that are based on this Ralink chipset, the best way to see if yours is using it is to do a lsusb, and check for 148f:2070 at ID.
Hardware :
Tenda W541U V2.0 Wireless USB Adapter ( Ralink RT2070L Chipset)
Bus 001 Device 003: ID 148f:2070 Ralink Technology, Corp.
Driver :
RT3070USB(RT307x) http://www.sendspace.com/file/xfk1tg
Host :
Linux mercury 2.6.28-15-generic #52-Ubuntu SMP Wed Sep 9 10:49:34 UTC 2009 i686 GNU/Linux
Ubuntu 9.04 /n /l
Tutorial :
1. Download the RT3070USB driver from Ralink. (link is listed above).
2. Unpack it.
$sudo su
#tar jxvf 2009_0525_RT3070_Linux_STA_v2.1.1.0.bz2
3. Navigate to os/linux and add the following line to usb_main_dev.c
#cd 2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux
#pico usb_main_dev.c
...
add:
{USB_DEVICE(0x148F,0x2070)}, /* Ralink 2070L */
under #ifdef RT3070
...
4. Compile the module.
#cd ../..;make
5. Install the module.
#make install
6. Copy the .DAT file to /etc/Wireless. (the install script should do it but just in case). Also copy the rt2870.bin file to /lib/firmware. (just in case).
#mkdir -p /etc/Wireless/RT2870STA
#cp RT2870STA.dat /etc/Wireless/RT2870STA/
#apt-get install tofrodos
#dos2unix /etc/Wireless/RT2870STA/RT2870STA.dat
#chmod +x /etc/Wireless/RT2870STA/RT2870STA.dat
#cp common/rt2870.bin /lib/firmware/
7. Start the module.
#modprobe rt3070sta
8. Test to see if it works.
#ifconfig ra0 inet 192.168.0.33 up
#iwconfig ra0
9. Configure the card.
For step 9, you can find numerous tutorials, the configuration is exactly the same as for the rt2870 chipset.
UPDATE: Linux Kernel >= 2.6.31 / Ubuntu Karmic Koala 9.10 compile patch!
Ok, after speaking with another person and installing Ubuntu 9.10 on my other box I noticed this driver will not compile on my brand new 2.6.31-14-generic kernel.
The error I received (and probably many people do when attempting to compile most ralink drivers under 2.6.31 because this kernel replaced the old net_device structure with a new one called net_device_ops) was:
CC [M] /root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.o
/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.c: In function ‘RtmpOSNetDevAttach’:
/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.c:1510: error: ‘struct net_device’ has no member named ‘open’
/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.c:1511: error: ‘struct net_device’ has no member named ‘stop’
/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.c:1512: error: ‘struct net_device’ has no member named ‘hard_start_xmit’
/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.c:1513: error: ‘struct net_device’ has no member named ‘do_ioctl’
/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.c:1519: error: ‘struct net_device’ has no member named ‘get_stats’
/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.c:1553: error: ‘struct net_device’ has no member named ‘validate_addr’
make[2]: *** [/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/../../os/linux/rt_linux.o] Error 1
make[1]: *** [_module_/root/2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.31-14-generic'
make: *** [LINUX] Error 2
After some deep searching I found this rt3070-2.6.31-compile.patch (a part of rt3070-kmod Fedora 11 package) on lists.rpmfusion.org/pipermail/rpmfusion-commits/2009-August/006214.html. Once you apply it, it will compile just fine.
I have attached it to this post, just:
$gunzip rt3070-2.6.31-compile.patch.gz
$patch -p0 < rt3070-2.6.31-compile.patch
patching file 2009_0525_RT3070_Linux_STA_v2.1.1.0/include/rtmp_os.h
patching file 2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/rt_linux.c
patching file 2009_0525_RT3070_Linux_STA_v2.1.1.0/os/linux/rt_main_dev.c
$cd 2009_0525_RT3070_Linux_STA_v2.1.1.0/
$make
Also make sure that rt2800usb, rt2x00usb and rt2x00lib are blacklisted as they now recognize this device (under Ubuntu 9.10) but the device will not function properly (no scan results).
$sudo pico /etc/modprobe.d/blacklist.conf
add the following lines:
blacklist rt2x00usb
blacklist rt2x00lib
blacklist rt2800usb
close and save.
$sudo rmmod rt2x00usb (just in case)
$sudo rmmod rt2x00lib (just in case)
$sudo rmmod rt2800usb (just in case)
Good luck.
Update 2 : If when you are trying to load the module you receive the following (on Karmic):
$sudo modprobe rt3070sta
$dmesg
815108.907620] rt3070sta: module is from the staging directory, the quality is unknown, you have been warned.
And your device is NOT detected, copy the rt3070sta.ko file in the staging directory like this:
$cd os/linux
$sudo cp ./rtk3070sta.ko /lib/modules/`uname -r`/kernel/drivers/staging/rt3070/
$sudo rmmod rt3070sta
$sudo modprobe rt3070sta
Update 3 :
For some reason the common/rtusb_io.c file contains a very annoying line that will fill your dmesg with empty lines cointaining only #. In order to fix this "bug":
$nano common/rtusb_io.c
replace:
DBGPRINT(RT_DEBUG_OFF, ("#/n"));
with:
//DBGPRINT(RT_DEBUG_OFF, ("#/n"));
$sudo make clean && make && make install
Also I noticed Ralink "updated" the driver "directory" as the driver itself still wont compile on 2.6.30 >= kernels, and from a first impression it is the exact same driver. A quick fix would be to do the following, after you download the and extract driver archive:
$mv 2009_1106_RT3070_Linux_STA_V2.1.1.0 2009_0525_RT3070_Linux_STA_v2.1.1.0
That is because the rt3070-2.6.31-compile patch is designed to search for that directory in particular.
Security Update :
For those using this driver with wpasupplicant you should know about this bug which could affect your system:
http://bugzilla.kernel.org/show_bug.cgi?id=14591
A quick fix for it is to:
$cd os/linux
$nano sta_ioctl.c
replace
struct iw_mlme *pMlme = (struct iw_mlme *)wrqu->data.pointer;
with
struct iw_mlme *pMlme;
and
struct iw_pmksa *pPmksa = (struct iw_pmksa *)wrqu->data.pointer;
with
struct iw_pmksa *pPmksa;
$sudo make clean && make && make install
The only disadvantage is that the driver will lack SIOCSIWPMKSA and SIOCSIWMLME functions. However I managed to connect to the AP (WPA,WEP) just fine w/out these two.
更多推荐



所有评论(0)