Rt5370 USB无线网卡移植记录

内容提要:嵌入式linux软件开发人员调试软件,是一定要进入设备的shell的。进入shell无非就是通过串口、ssh方式,而ssh方式需要网卡。一般嵌入式linux产品上市后,串口和网卡是没有的,但是usb接口是大部分产品都需要预留。有些嵌入式产品或许会有网卡,但是要想进入shell,还要借助路由器、网线进入shell。现场维护的时候,不方便连线。
用usb无线网卡的好处是,一般我们的电脑都带有wifi,我们可以把电脑变成wifi信号发射器(360wifi),安卓手机也看设置wlan共享模式。嵌入式linux设备插上usb无线网卡,连接电脑发射的wifi信号,通过wifi就可以进入shell进行调试。
本文在x35平台上,移植了usb 无线网卡,实现了热插拔,一插上无线网卡,便自动连接wifi、打开telnetd和sshd服务,pc端通过secureCRT或者putty进行远程登录,winscp进行文件传输。而且安卓机wlan共享之后,嵌入式设备和电脑都可以访问外网,这极大方便了在几千公里外的你调试设备。
本实验有两个包,已上传。
驱动源码包下载地址:http://download.csdn.net/detail/u014106791/9635006
.ko和加载脚本下载地址:
http://download.csdn.net/detail/u014106791/9635079
一 驱动移植
驱动软件包:WI-PI.tar.bz2
在linux解压之后,得到WI-PI文件夹,进入WI-PI文件夹,找到makefile。打开makefile,找到:

ifeq ($(PLATFORM),PC)
# Linux 2.6
#LINUX_SRC = /lib/modules/$(shell uname -r)/build
# Linux 2.4 Change to your local setting
LINUX_SRC =  /home/tanhui/source/linux-3.2.0-psp04.06.00.08.sdk
#LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/
CROSS_COMPILE = arm-none-linux-gnueabi-
Endif

将上述代码改成:

ifeq ($(PLATFORM),PC)
# Linux 2.6
#LINUX_SRC = /lib/modules/$(shell uname -r)/build
# Linux 2.4 Change to your local setting
LINUX_SRC =  ../linux-2.6.39-at91-exp-board
#LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/
CROSS_COMPILE = arm-linux-
endif

LINUX_SRC要改成设备要用到的内核所在的路径。
CROSS_COMPILE是指定编译器,也就是编译内核所用的编译器。
保存并执行make命令编译。编译成功之后,会在在当前目录下生成rt5370sta.ko文件。这个就是我们需要的内核模块。另外注意当前目录下的RT2870STA.dat文件。这两个文件将是我们后面需要用到的。

二 使用方法
为了方便安装,将rt5370sta.ko、RT2870STA.dat、usb_wifi.sh、rm_usbwifi.sh文件做成一个wifi目录。如图所示为wifi目录中的文件。
这里写图片描述
使用方法:
1. 将wifi目录拷贝到嵌入式设备的“/”根目录。
2. 运行 /wifi/usb_wifi.sh ins 安装相关配置文件。(可以不运行,以后文件系统中都安装好了。)
3. 将路由器SSID配置为sctarm,密码配置为88888888.路由器可以是传统路由器、手机wlan热点、和电脑发射的wifi信号。
3.1 路由器配置:路由器需要将密码加密算法配置为AES方式,无线安全选用WPA2PSK。如图:
Rt5370 USB无线网卡移植记录_第1张图片
3.2 手机wlan共享热点和电脑发射的wifi信号,无线加密方式和密码加密算法采用默认的就可以。
4. 将usb无线网卡插入到设备,等10s左右,设备就连上了wifi信号。
5. 查看设备获取的ip。电脑装个360wifi就可以发射wifi信号。例如我电脑分给设备的ip。
Rt5370 USB无线网卡移植记录_第2张图片
6. Pc准备登陆板子。
6.1 若板子连接安卓手机,则pc也需要连接安卓手机。
6.2 若板子连接路由器,pc可以通过网线或者wifi连接路由器。
6.3 若板子连接pc发射的wifi,则不要做任何步骤。(推荐使用pc机发射wifi信号)
7. 登陆板子shell。
7.1 以ssh方式登陆。打开putty或者secureCRT,然后以ssh方式登陆设备。Hostname填写板子ip,username填写用户名。以ssh方式登陆板子,板子当中的用户名一定要有密码。例如我设置的密码是root。
Rt5370 USB无线网卡移植记录_第3张图片
7.2 以telent方式登陆。打开secureCRT,以telnet方式登陆
Protocol设置为telnet,hostname填写板子ip地址。然后点击确认,输入用户名和密码,用户必须为非root用户。
Rt5370 USB无线网卡移植记录_第4张图片
8. 拔掉usb wifi之前,请先运行/wifi/rm_usbwifi.sh。

三 应用移植及相关配置。
我们的usb 无线网卡需要实现热插拔,热插拔的准备工作请参考:
http://blog.csdn.net/u014106791/article/details/52596640
实现了热插拔之后,插入usb无线网卡,在/dev/目录下面会生成一个1-1的设备文件。在/etc/mdev.conf文件中添加如下两行:
1-1 root:root 666 @ /wifi/usb_wifi.sh
1-1 root:root 666 $ */wifi/rm_usbwifi.sh
当usb 无线网卡插入板子,就会执行/wifi/usb_wifi.sh程序。按理说,当拔出时,会执行/wifi/rm_usbwifi.sh脚本,但是实际情况却不执行。这里不解。

使用telnet和ssh需要移植openssh和telnetd,移植方法:
在buildroot中配置openssh。进入buildroot根目录,make menuconfig。
Package Selection for the target —>
Networking applications —>
[*] openssh
Rt5370 USB无线网卡移植记录_第5张图片
在buildroot中配置telnetd。进入buildroot根目录,make busybox-menuconfig,选择:
Networking Utilities —>
[*] telnetd
Rt5370 USB无线网卡移植记录_第6张图片
重新make一下,得到的ubifs烧写到板子即可。在首次开机过程中,板子自动会生成openssh的密钥和私钥。

四 脚本分析

#!/bin/sh
if [ "$1" == "ins" ]; then
        echo $1
        mkdir -p /etc/Wireless/RT2870STA/
        cp -f ./rt5370sta.ko  /etc/
        cp -f ./RT2870STA.dat /etc/Wireless/RT2870STA/
else
        insmod /etc/rt5370sta.ko
        sleep 8;
        ifconfig -a > tmp.log
        result=$(cat tmp.log | grep -c ra0)
        if [ $result -ge "1" ]; then
                echo 2
                ifconfig ra0 up
                iwpriv ra0 set NetworkType=Infra
                iwpriv ra0 set AuthMode=WPA2PSK
                iwpriv ra0 set EncrypType=AES
                iwpriv ra0 set SSID="sctarm"
                iwpriv ra0 set WPAPSK="88888888"
                sleep 1
                udhcpc -i ra0
                echo "udhcpc ip is:"
                ifconfig ra0
                /usr/sbin/sshd -D &
                telnetd &
        else
                exit
        fi
fi

/wifi/usb_wifi.sh ins 命令是用于装wifi相关配置文件,首先建一个/etc/Wireless/RT2870STA/目录,这个目录是wifi需要用的绝对目录,不能随便更改。然后把RT2870STA.dat拷贝到/etc/Wireless/RT2870STA/,运行ifconfig ra0 up时,会从/etc/Wireless/RT2870STA/目录下读取配置文件RT2870STA.dat。然后传递给驱动。
/wifi/usb_wifi.sh 命令用于配置wifi,在有usb网卡的情况下,加载rt5370sta.ko之后,会生成ra0网卡,假如没有生成ra0网卡,我们就直接退出。如果发现有ra0网卡,就进行相关配置。
ifconfig ra0 up 开启ra0,不开启的情况下,ifconfig是看不到ra0的,需要ifconfig –a才能看到。
iwpriv ra0 set AuthMode=WPA2PSK 设置要连接路由器的无线安全模式。
iwpriv ra0 set EncrypType=AES 设置要连接路由器的加密算法。
AuthMode EncrypType这两者要和路由器相匹配,要不然连接不上。
iwpriv ra0 set SSID=”sctarm” 设置要连接的wifi ssid.
iwpriv ra0 set WPAPSK=”88888888” 输入wifi密码。

udhcpc -i ra0 获取动态ip
然后开启sshd 和telnetd服务,方便远程登录板子。

下图是ssh登录板子shell情况:
Rt5370 USB无线网卡移植记录_第7张图片

你可能感兴趣的:(安卓/linux驱动)