
最近一段时间移植了ralink 2070的驱动到Android上面,网上虽然有ralink的移植文章,但是我按照步骤移植,还是出现了一些问题,比如识别不到网卡,搜不到网络等问题,所以我把移植的大概步骤记录下来,用于以后查询,下面就是大概的移植步骤1 在ralink官网http://www.rali…

最近一段时间移植了ralink 2070的驱动到Android上面,网上虽然有ralink的移植文章,但是我按照步骤移植,还是出现了一些问题,比如识别不到网卡,搜不到网络等问题,所以我把移植的大概步骤记录下来,用于以后查询,下面就是大概的移植步骤
1 在ralink官网http://www.ralinktech.com/en/index.php下载驱动2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO源码,
需要在rtusb_dev_id.c的数组里面rtusb_dev_id[]里面增加{USB_DEVICE(0x148F,0x2070)},不然会造成加载驱动的时候识别不到设备,
因为USB驱动识别是根据idVendor和idProduct来识别设备的,2070的设备号为idVendor=148f, idProduct=2070。
进入根目录修改makefile,选择CHIPSET = 3070,PLATFORM = 5VT,设置交叉编译环境
ifeq ($(PLATFORM),5VT)
LINUX_SRC = /home/Ubuntu/tcc8902/Android/kernel
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
endif
需要修改/os/linux/config.mk
HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
EXTRA_CFLAGS :
-D__LINUX_ARM_ARCH__=6
-march=armv6
-mtune=arm1176jzf-s
还需要去掉-mabi=apcs-gnu选项,不然会造成加载驱动死机重启,网上的一篇移植文章有提到。
2 编译好rt3070sta.ko,将其放到/system/lib/modules/目录下面,还有就是需要将官方提供的RT2870STA.dat拷贝到/etc/Wireless/RT2870STA/供驱动使用
3 由于tcc8900默认的wifi模块是atheros,所以我还修改了wifi_atheros.c的int wifi_load_driver()函数
ctrl_interface=DIR=/data/system/wpa_supplicant相同,不然会造成"/data/system /wpa_supplicant/ra0": No such file or directory这个错误,这个问题困扰我了很久,
权限问题也会引起这个问题。
4 需要更改init.rc文件,里面需要更改权限问题,
/data/system/wpa_supplicant/ra0": No such file or directory错误,但是在搜索的过程中,如果手动的输入ifconfig ra0 up命令,就可以搜到网络
说明在wpa_supplicant调用的过程中没有打开ralink,于是我在wpa_ctrl.c文件的wpa_ctrl_open函数的开头增加了
对ra0打开的调用,
能指点一下。
以上就是移植的大概过程。
1 在ralink官网http://www.ralinktech.com/en/index.php下载驱动2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO源码,
需要在rtusb_dev_id.c的数组里面rtusb_dev_id[]里面增加{USB_DEVICE(0x148F,0x2070)},不然会造成加载驱动的时候识别不到设备,
因为USB驱动识别是根据idVendor和idProduct来识别设备的,2070的设备号为idVendor=148f, idProduct=2070。
进入根目录修改makefile,选择CHIPSET = 3070,PLATFORM = 5VT,设置交叉编译环境
ifeq ($(PLATFORM),5VT)
LINUX_SRC = /home/Ubuntu/tcc8902/Android/kernel
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
endif
需要修改/os/linux/config.mk
HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
EXTRA_CFLAGS :
-D__LINUX_ARM_ARCH__=6
-march=armv6
-mtune=arm1176jzf-s
还需要去掉-mabi=apcs-gnu选项,不然会造成加载驱动死机重启,网上的一篇移植文章有提到。
2 编译好rt3070sta.ko,将其放到/system/lib/modules/目录下面,还有就是需要将官方提供的RT2870STA.dat拷贝到/etc/Wireless/RT2870STA/供驱动使用
3 由于tcc8900默认的wifi模块是atheros,所以我还修改了wifi_atheros.c的int wifi_load_driver()函数
01 |
int wifi_load_driver() |
02 |
{ |
03 |
char driver_status[PROPERTY_VALUE_MAX]; |
04 |
int count = 100; /* wait at most 20 seconds for completion */ |
05 |
|
06 |
if (check_driver_loaded()) { |
07 |
return 0; |
08 |
} |
09 |
|
10 |
if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) |
11 |
return -1; |
12 |
|
13 |
if ( strcmp (FIRMWARE_LOADER, "" ) == 0) { |
14 |
usleep(WIFI_DRIVER_LOADER_DELAY); |
15 |
property_set(DRIVER_PROP_NAME, "ok" ); |
16 |
} |
17 |
else { |
18 |
property_set( "ctl.start" , FIRMWARE_LOADER); |
19 |
} |
20 |
sched_yield(); |
21 |
while (count-- > 0) { |
22 |
if (property_get(DRIVER_PROP_NAME, driver_status, NULL)) { |
23 |
if ( strcmp (driver_status, "ok" ) == 0) |
24 |
return 0; |
25 |
else if ( strcmp (DRIVER_PROP_NAME, "failed" ) == 0) { |
26 |
wifi_unload_driver(); |
27 |
LOGE( "DRIVER_PROP_NAME failed" ); |
28 |
//property_set(DRIVER_PROP_NAME, "ok"); |
29 |
return -1; |
30 |
} |
31 |
} |
32 |
usleep(200000); |
33 |
} |
34 |
property_set(DRIVER_PROP_NAME, "timeout" ); |
35 |
wifi_unload_driver(); |
36 |
return -1; |
37 |
} |
这里有一个问题需要注意,就是static const char IFACE_DIR[]= "/data/system/wpa_supplicant";这里的路径一定要和wpa_supplicant.conf里面的
ctrl_interface=DIR=/data/system/wpa_supplicant相同,不然会造成"/data/system /wpa_supplicant/ra0": No such file or directory这个错误,这个问题困扰我了很久,
权限问题也会引起这个问题。
4 需要更改init.rc文件,里面需要更改权限问题,
01 |
chmod 0777 /system/etc/wifi/wpa_supplicant.conf |
02 |
chown wifi wifi /system/etc/wifi/wpa_supplicant.conf |
03 |
mkdir /data/misc/wifi/wapi_certificate 0777 wifi wifi |
04 |
mkdir /data/misc/dhcp 0777 dhcp dhcp |
05 |
chown dhcp dhcp /data/misc/dhcp |
06 |
mkdir /data/misc/wifi/sockets 0777 wifi wifi |
07 |
mkdir /data/misc/wifi/wpa_supplicant 0777 wifi wifi |
08 |
mkdir /data/misc/wifi/hostapd 0777 wifi wifi |
09 |
mkdir /data/misc/wifi 0777 wifi wifi |
10 |
setprop wifi.interface ra0 |
11 |
setprop wlan.driver.script "wifi_sta_up.sh" |
12 |
setprop wlan.driver.path "/system/wifi" |
13 |
chmod 0777 /data/misc/wifi |
14 |
chmod 0777 /data/misc/wifi/wpa_supplicant.conf |
15 |
chown wifi wifi /data/misc/wifi |
16 |
chown wifi wifi /data/misc/wifi/wpa_supplicant.conf |
17 |
chown wifi wifi /system/etc/wifi |
18 |
|
19 |
mkdir /data/system/wpa_supplicant 0777 wifi wifi |
20 |
chmod 0777 /data/system/wpa_supplicant |
21 |
chown wifi wifi /data/system/wpa_supplicant |
5 按照上面的步骤,通过手动加载驱动
1 |
insmod /system/lib/modules/rt3070sta.ko |
2 |
ifconfig ra0 up |
3 |
wpa_supplicant - dd -Dwext -ira0 -c /system/etc/wifi/wpa_supplicant.conf& |
4 |
iwlist ra0 scanning |
基本上就可以搜索到网络了,但是要通过Android设置里面的wifi setting去控制wifi的使能,还是会出现
/data/system/wpa_supplicant/ra0": No such file or directory错误,但是在搜索的过程中,如果手动的输入ifconfig ra0 up命令,就可以搜到网络
说明在wpa_supplicant调用的过程中没有打开ralink,于是我在wpa_ctrl.c文件的wpa_ctrl_open函数的开头增加了
对ra0打开的调用,
1 |
struct ifreq ifr; |
2 |
os_memset(&ifr,0, sizeof ( struct ifreq)); |
3 |
strncpy (ifr.ifr_name, "ra0" ,IFNAMSIZ); |
4 |
setflags(ctrl->s,&ifr,IFF_UP,0); |
5 |
usleep(10000); |
重新编译,烧录程序,然后通过Android wifi setting终于能够搜到网络,链接也能上网了。但是为什么wpa_supplicant在启动的没能打开ra0,现在还没搞明白,也希望高手
能指点一下。
以上就是移植的大概过程。
扫一扫在手机打开
评论
已有0条评论
0/150
提交
热门评论
相关推荐