RT73 WiFi Problem

Hey,

I've placed rt73.bin in /system/etc/firmware and tried to on wifi but
I'll get the following error message

usbcore: registered new interface driver
rt73usb
init: no such service
'wlan_loader'
rt73usb 1-2.4:1.0: firmware: requesting
rt73.bin
usbcore: deregistering interface driver rt73usb

Have I missed a step somewhere?

Generic problem with current rtxxxx driver family. IIUC, rt2x00
drivers claim rt73 but can't deal with it correctly. Everybudy's
Linux is suffering from this right now.

Create /etc/modprobe.d/blacklist-rt2x00.conf containing:
# these try to claim rt73 but are incompatible
blacklist rt2500usb
blacklist rt2x00lib

Also, I would suggest using the rt73usb.ko driver instead of rt73.ko
-- the rt73usb is newer and more capable (how exactly, I forget at the
moment).

Do the usual modprobe dance to unload the bad'uns and load the
good'uns and you should be much happier. My rt73 is working great as
a WiFi client.

I spent most of yesterday afternoon trying to get an rt73 to be happy
with hostapd. The rt73 is one of the few dongles that can work as an
access point. There is, however, a wierdness in the rt73 hardware
that is very difficult to work around in the driver, so the developers
are still ruminating. Currently, there are times when the driver
reports an "unkown" status instead of "success" -- the current version
of hostapd takes a conservative view of that and drops connections. I
managed to google up a simple patch to hostapd that somebody worked
out -- my mission today is to see if I can make that work.

-dave

Something about the WiFi stack on my system (an RCN example image)
does not like the RT73. Not sure what it is. I had this same RT73
dongle working great as a WiFi AP on a Chumby system, but can't make
it work on the Beagle. So I know it *can* work. But one of the
reasons
I frisbee'd the Chumby (apart from it being too wimpy for my
application)
is that the Chumby people can't tell their butts from a pineapple when
it
comes to having good software configuration management, so finding
out exactly which source they built their stack with and how they did
it won't be easy.

I think I need to find a different WiFi dongle that will work as an
AP.

Anyway, RT73 does work as a WiFi client with the blacklisting n
my previous reply.

-dave

Hey Dave,

Sorry, I'm new to both Ubuntu and BeagleBoard and don't quite
understand.
Are the modprobe changes made in the computer?

I assume they are and did the following steps:

1. Built rt73 as loadable module
2. sudo modprobe -r rt2500usb
sudo modprobe -r rt2x00lib
3. Created /etc/modprobe.d/blacklist-rt2x00.conf containing:
blacklist rt2500usb
blacklist rt2x00lib
3. sudo modprobe -v rt73usb
5. Made rootfs changes (pre & post build) as sugguested in
http://www.projectkennel.com/wiki/index.php?title=Getting_Started_with_Android_for_your_BeagleBoard
6. Build
7. Created /system/lib/modules and added the following files:
rt2x00lib.ko
rt2x00usb.ko
rt73usb.ko
8. Created /system/etc/firmware and added rt73.bin

This is what it shows when I plug in the Belkin wireless g usb network
adapter:

# usb 1-2.4: new high speed USB device using ehci-omap and address 3
phy0 -> rt2x00_print_chip: Info - Chipset detected - rt: 1300, rf:
0002, rev: 0.
phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file
'rt73.bin'.
rt73usb 1-2.4:1.0: firmware: requesting
rt73.bin
phy0 -> rt2x00lib_request_firmware: Info - Firmware detected -
version: 1.7.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3,
CWmax: 4, A.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4,
CWmax: 5, A.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5,
CWmax: 10, .
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5,
CWmax: 10, .

When I tried to on Wi-Fi:

rt2x00lib: exports duplicate symbol rt2x00lib_resume (owned by
kernel)
rt2x00usb: exports duplicate symbol rt2x00usb_resume (owned by
kernel)
rt73usb: module is already
loaded
init: no such service 'wlan_loader'

And from logcat:

I/WifiHW ( 979): Loading WiFi Modules
I/WifiHW ( 979): insmod
I/WifiHW ( 979): insmod
I/WifiHW ( 979): insmod
I/WifiHW ( 979): start wifi_start_supplicant
E/WifiHW ( 979): ensure_config_file_exists
I/WifiHW ( 979): Wi-Fi is running
I/WifiHW ( 979): wifi_connect_to_supplicant called
I/WifiHW ( 979): Interface directory = /data/system/wpa_supplicant
I/WifiHW ( 979): Interface name = /data/system/wpa_supplicant/wlan0
E/WifiHW ( 979): Unable to open connection to supplicant on "/data/
system/wpa_supplicant/wlan0": No such file or directory
E/wpa_supplicant( 1785): Failed to initialize control interface 'DIR=/
data/system/wpa_supplicant GROUP=wifi'.
E/wpa_supplicant( 1785): You may have another wpa_supplicant process
already running or the file was
E/wpa_supplicant( 1785): left by an unclean termination of
wpa_supplicant in which case you will need
E/wpa_supplicant( 1785): to manually remove this file before starting
wpa_supplicant again.
I/wpa_supplicant( 1785): CTRL-EVENT-STATE-CHANGE id=-1 state=0
I//system/bin/wpa_supplicant( 1783): chown[ctrl_interface]: Operation
not permitted
I/logwrapper( 1835): /system/bin/wpa_supplicant terminated by
exit(255)
I/WifiHW ( 979): wifi_connect_to_supplicant called
E/WifiHW ( 979): Supplicant not running, cannot connect
V/WifiStateTracker( 979): Supplicant died unexpectedly
I/WifiHW ( 979): wifi_close_supplicant_connection called
D/WifiStateTracker( 979): Reset connections and stopping DHCP
D/WifiStateTracker( 979): Disabling interface
I/WifiHW ( 979): wifi_stop_supplicant called
D/WifiStateTracker( 979): Reset connections and stopping DHCP
D/Tethering( 979): MasterInitialState.processMessage what=3
D/WifiStateTracker( 979): Disabling interface
I/WifiHW ( 979): rmmod
E/WifiHW ( 979): Unable to unload driver module "rt73usb": No such
file or directory
E/WifiService( 979): Failed to unload Wi-Fi driver.

Hey Dave,

Sorry, I'm new to both Ubuntu and BeagleBoard and don't quite
understand.
Are the modprobe changes made in the computer?

I assume they are and did the following steps:

1. Built rt73 as loadable module
2. sudo modprobe -r rt2500usb
sudo modprobe -r rt2x00lib
3. Created /etc/modprobe.d/blacklist-rt2x00.conf containing:
blacklist rt2500usb
blacklist rt2x00lib
3. sudo modprobe -v rt73usb
5. Made rootfs changes (pre & post build) as sugguested in
http://www.projectkennel.com/wiki/index.php?title=Getting_Started_with_Android_for_your_BeagleBoard
6. Build
7. Created /system/lib/modules and added the following files:
rt2x00lib.ko
rt2x00usb.ko

The two rt2x00*.ko modules should be pulled in automatically, you shouldn't need these lines.
Anyway, after 'modprobe rt73usb' you should be able to 'modprobe -a' to get this file updated automatically.

rt73usb.ko
8. Created /system/etc/firmware and added rt73.bin

: 10, .

When I tried to on Wi-Fi:

rt2x00lib: exports duplicate symbol rt2x00lib_resume (owned by
kernel)
rt2x00usb: exports duplicate symbol rt2x00usb_resume (owned by
kernel)

??? I've not seen that. Sounds like the driver is duplicated -- it's not built
into your kernel, is it? Although to be honest, I'm not enough of a kernel
expert to know exactly what that message is telling you.

-dave

Is the Belkin device supposed to be detected as 'usb 1-2: new high
speed USB device using ehci-omap and address 2'?

The two rt2x00*.ko modules should be pulled in automatically, you shouldn't need these lines.

What lines?? I placed them in /system/lib/modules because I've read
that both of them and rt73usb.ko need to be placed inside.

Anyway, after 'modprobe rt73usb' you should be able to 'modprobe -a' to get this file updated automatically.

rt73usb is updated? Is it the rt73usb in the computer kernel modules
or beagleboard kernel modules? Am I supposed to build the modules
before or after?

??? I've not seen that. Sounds like the driver is duplicated -- it's not built into your kernel, is it?

Yes, > 1. Built rt73 as loadable module

Regarding the duplicate error, it disappeared.
This is the issue I have now as shown by logcat:

I/WifiHW ( 962): Loading WiFi Modules
E/WifiHW ( 962): Cannot find driver rt73usb in proc
I/WifiHW ( 962): insmod
I/WifiHW ( 962): insmod
I/WifiHW ( 962): insmod
D/Tethering( 962): wlan0 is not a tetherable iface, ignoring
E/wlan_loader( 1298): Cannot open eeprom image file <./nvs_map.bin>:
No such file or directory
E/wlan_loader( 1298): init_driver() failed

I've tried placing rt73usb.ko in proc but it does not work.
This is my init.rc:

on early-init
    start ueventd

on init

sysclktz 0

loglevel 3

# setup the global environment
    export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/
xbin
    export LD_LIBRARY_PATH /vendor/lib:/system/lib
    export ANDROID_BOOTLOGO 1
    export ANDROID_ROOT /system
    export ANDROID_ASSETS /system/app
    export ANDROID_DATA /data
    export EXTERNAL_STORAGE /mnt/sdcard
    export ASEC_MOUNTPOINT /mnt/asec
    export LOOP_MOUNTPOINT /mnt/obb
    export BOOTCLASSPATH /system/framework/core.jar:/system/framework/
bouncycastle.jar:/system/framework/ext.jar:/system/framework/
framework.jar:/system/framework/android.policy.jar:/system/framework/
services.jar:/system/framework/core-junit.jar

# Backward compatibility
    symlink /system/etc /etc
    symlink /sys/kernel/debug /d

# Right now vendor lives on the same filesystem as system,
# but someday that may change.
    symlink /system/vendor /vendor

# create mountpoints
    mkdir /mnt 0775 root system
    mkdir /mnt/sdcard 0000 system system

# Create cgroup mount point for cpu accounting
    mkdir /acct
    mount cgroup none /acct cpuacct
    mkdir /acct/uid

# Backwards Compat - XXX: Going away in G*
    symlink /mnt/sdcard /sdcard

    mkdir /system
    mkdir /data 0771 system system
    mkdir /cache 0770 system cache
    mkdir /config 0500 root root

    # Directory for putting things only root should see.
    mkdir /mnt/secure 0700 root root

    # Directory for staging bindmounts
    mkdir /mnt/secure/staging 0700 root root

    # Directory-target for where the secure container
    # imagefile directory will be bind-mounted
    mkdir /mnt/secure/asec 0700 root root

    # Secure container public mount points.
    mkdir /mnt/asec 0700 root system
    mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000

    # Filesystem image public mount points.
    mkdir /mnt/obb 0700 root system
    mount tmpfs tmpfs /mnt/obb mode=0755,gid=1000

    write /proc/sys/kernel/panic_on_oops 1
    write /proc/sys/kernel/hung_task_timeout_secs 0
    write /proc/cpu/alignment 4
    write /proc/sys/kernel/sched_latency_ns 10000000
    write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
    write /proc/sys/kernel/sched_compat_yield 1
    write /proc/sys/kernel/sched_child_runs_first 0

# Create cgroup mount points for process groups
    mkdir /dev/cpuctl
    mount cgroup none /dev/cpuctl cpu
    chown system system /dev/cpuctl
    chown system system /dev/cpuctl/tasks
    chmod 0777 /dev/cpuctl/tasks
    write /dev/cpuctl/cpu.shares 1024

    mkdir /dev/cpuctl/fg_boost
    chown system system /dev/cpuctl/fg_boost/tasks
    chmod 0777 /dev/cpuctl/fg_boost/tasks
    write /dev/cpuctl/fg_boost/cpu.shares 1024

    mkdir /dev/cpuctl/bg_non_interactive
    chown system system /dev/cpuctl/bg_non_interactive/tasks
    chmod 0777 /dev/cpuctl/bg_non_interactive/tasks
    # 5.0 %
    write /dev/cpuctl/bg_non_interactive/cpu.shares 52

on fs
# mount mtd partitions
    # Mount /system rw first to give the filesystem a chance to save a
checkpoint
    mount yaffs2 mtd@system /system
    mount yaffs2 mtd@system /system ro remount
    mount yaffs2 mtd@userdata /data nosuid nodev
    mount yaffs2 mtd@cache /cache nosuid nodev

on post-fs
    # once everything is setup, no need to modify /
# mount rootfs rootfs / ro remount

    # We chown/chmod /data again so because mount is run as root +
defaults
    chown system system /data
    chmod 0771 /data

    # Create dump dir and collect dumps.
    # Do this before we mount cache so eventually we can use cache for
    # storing dumps on platforms which do not have a dedicated dump
partition.

    mkdir /data/dontpanic
    chown root log /data/dontpanic
    chmod 0750 /data/dontpanic

    # Collect apanic data, free resources and re-arm trigger
    copy /proc/apanic_console /data/dontpanic/apanic_console
    chown root log /data/dontpanic/apanic_console
    chmod 0640 /data/dontpanic/apanic_console

    copy /proc/apanic_threads /data/dontpanic/apanic_threads
    chown root log /data/dontpanic/apanic_threads
    chmod 0640 /data/dontpanic/apanic_threads

    write /proc/apanic_console 1

    # Same reason as /data above
    chown system cache /cache
    chmod 0770 /cache

    # This may have been created by the recovery system with odd
permissions
    chown system cache /cache/recovery
    chmod 0770 /cache/recovery

    #change permissions on vmallocinfo so we can grab it from
bugreports
    chown root log /proc/vmallocinfo
    chmod 0440 /proc/vmallocinfo

    #change permissions on kmsg & sysrq-trigger so bugreports can grab
kthread stacks
    chown root system /proc/kmsg
    chmod 0440 /proc/kmsg
    chown root system /proc/sysrq-trigger
    chmod 0220 /proc/sysrq-trigger

# create basic filesystem structure
    mkdir /data/misc 01771 system misc
    mkdir /data/misc/bluetoothd 0770 bluetooth bluetooth
    mkdir /data/misc/keystore 0770 keystore keystore
    mkdir /data/misc/bluetooth 0770 system system
    mkdir /data/misc/systemkeys 0700 system system
    mkdir /data/local 0771 shell shell
    mkdir /data/local/tmp 0771 shell shell
    mkdir /data/data 0771 system system
    mkdir /data/app-private 0771 system system
    mkdir /data/app 0771 system system
    mkdir /data/property 0700 root root

    # create dalvik-cache and double-check the perms
    mkdir /data/dalvik-cache 0771 system system
    chown system system /data/dalvik-cache
    chmod 0771 /data/dalvik-cache

    # create the lost+found directories, so as to enforce our
permissions
    mkdir /data/lost+found 0770
    mkdir /cache/lost+found 0770

    # double check the perms, in case lost+found already exists, and
set owner
    chown root root /data/lost+found
    chmod 0770 /data/lost+found
    chown root root /cache/lost+found
    chmod 0770 /cache/lost+found

on boot
# basic network init
    ifup lo
    hostname localhost
    domainname localdomain

# set RLIMIT_NICE to allow priorities from 19 to -20
    setrlimit 13 40 40

# Define the oom_adj values for the classes of processes that can be
# killed by the kernel. These are used in ActivityManagerService.
    setprop ro.FOREGROUND_APP_ADJ 0
    setprop ro.VISIBLE_APP_ADJ 1
    setprop ro.PERCEPTIBLE_APP_ADJ 2
    setprop ro.HEAVY_WEIGHT_APP_ADJ 3
    setprop ro.SECONDARY_SERVER_ADJ 4
    setprop ro.BACKUP_APP_ADJ 5
    setprop ro.HOME_APP_ADJ 6
    setprop ro.HIDDEN_APP_MIN_ADJ 7
    setprop ro.EMPTY_APP_ADJ 15

# Define the memory thresholds at which the above process classes will
# be killed. These numbers are in pages (4k).
    setprop ro.FOREGROUND_APP_MEM 2048
    setprop ro.VISIBLE_APP_MEM 3072
    setprop ro.PERCEPTIBLE_APP_MEM 4096
    setprop ro.HEAVY_WEIGHT_APP_MEM 4096
    setprop ro.SECONDARY_SERVER_MEM 6144
    setprop ro.BACKUP_APP_MEM 6144
    setprop ro.HOME_APP_MEM 6144
    setprop ro.HIDDEN_APP_MEM 7168
    setprop ro.EMPTY_APP_MEM 8192

    setprop wifi.interface wlan0
    setprop wlan.driver.status ok

# Write value must be consistent with the above properties.
# Note that the driver only supports 6 slots, so we have combined some
of
# the classes into the same memory level; the associated processes of
higher
# classes will still be killed first.
    write /sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15

    write /proc/sys/vm/overcommit_memory 1
    write /proc/sys/vm/min_free_order_shift 4
    write /sys/module/lowmemorykiller/parameters/minfree
2048,3072,4096,6144,7168,8192

    # Set init its forked children's oom_adj.
    write /proc/1/oom_adj -16

    # Tweak background writeout
    write /proc/sys/vm/dirty_expire_centisecs 200
    write /proc/sys/vm/dirty_background_ratio 5

    # Permissions for System Server and daemons.
    chown radio system /sys/android_power/state
    chown radio system /sys/android_power/request_state
    chown radio system /sys/android_power/acquire_full_wake_lock
    chown radio system /sys/android_power/acquire_partial_wake_lock
    chown radio system /sys/android_power/release_wake_lock
    chown radio system /sys/power/state
    chown radio system /sys/power/wake_lock
    chown radio system /sys/power/wake_unlock
    chmod 0660 /sys/power/state
    chmod 0660 /sys/power/wake_lock
    chmod 0660 /sys/power/wake_unlock
    chown system system /sys/class/timed_output/vibrator/enable
    chown system system /sys/class/leds/keyboard-backlight/brightness
    chown system system /sys/class/leds/lcd-backlight/brightness
    chown system system /sys/class/leds/button-backlight/brightness
    chown system system /sys/class/leds/jogball-backlight/brightness
    chown system system /sys/class/leds/red/brightness
    chown system system /sys/class/leds/green/brightness
    chown system system /sys/class/leds/blue/brightness
    chown system system /sys/class/leds/red/device/grpfreq
    chown system system /sys/class/leds/red/device/grppwm
    chown system system /sys/class/leds/red/device/blink
    chown system system /sys/class/leds/red/brightness
    chown system system /sys/class/leds/green/brightness
    chown system system /sys/class/leds/blue/brightness
    chown system system /sys/class/leds/red/device/grpfreq
    chown system system /sys/class/leds/red/device/grppwm
    chown system system /sys/class/leds/red/device/blink
    chown system system /sys/class/timed_output/vibrator/enable
    chown system system /sys/module/sco/parameters/disable_esco
    chown system system /sys/kernel/ipv4/tcp_wmem_min
    chown system system /sys/kernel/ipv4/tcp_wmem_def
    chown system system /sys/kernel/ipv4/tcp_wmem_max
    chown system system /sys/kernel/ipv4/tcp_rmem_min
    chown system system /sys/kernel/ipv4/tcp_rmem_def
    chown system system /sys/kernel/ipv4/tcp_rmem_max
    chown root radio /proc/cmdline

# Define TCP buffer sizes for various networks
# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
    setprop net.tcp.buffersize.default
4096,87380,110208,4096,16384,110208
    setprop net.tcp.buffersize.wifi
4095,87380,110208,4096,16384,110208
    setprop net.tcp.buffersize.umts
4094,87380,110208,4096,16384,110208
    setprop net.tcp.buffersize.edge
4093,26280,35040,4096,16384,35040
    setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680

    class_start default

## Daemon processes to be run by init.