移植MT7601 WIFI驱动(sta模式)到s5pv210开发板

1. 前期准备工作和移植环境搭建

1.1 移植环境的搭建

  • Ubuntu14.04(当然也可以用其他Ubuntu版本),作为源码编译环境,而且已经安装了交叉编译工具链;

  • 用官方提供的内核源码,编译得到内核源码树(因为编译驱动需要内核源码的一些支持);

  • 开发板可以通过nfs方式挂载到Ubuntu(编译后得到的.ko文件需要通过这种形式传到开发板中)。挂载命令:

    mount -t nfs -o nolock,nfsvers=3 192.168.1.33:/home/lbh/nfs /mnt
    

    192.168.1.33这个IP地址是我ubuntu的IP;而且nfs的共享目录每个人安装的也不一样,根据自己的ubuntu环境来设置。

1.2 移植前准备工作

  • 获取官方的MT7601驱动源码:DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2

  • 确认USB WIFI模块是否正常

    把USB WIFI模块插入开发板中,然后使用lsusb命令查看系统是否识别到了这个模块,如果打印出如下的信息:

    Bus 001 Device 003: ID 148f:7601
    

2. 驱动源码的修改和编译

2.1 确认USB WIFI驱动源码的vid、pid是否和设备模块的一样

源码包中 ./common/rtusb_dev_id.c 文件中有定义 vid、pid 参数。在文件的37行可以找到 vid、pid 的定义,代码如下。可以看到有定义 {USB_DEVICE(0x148f,0x7601)} 这个参数,是和WIFI模块一样的vid、pid。

/* module table */
USB_DEVICE_ID rtusb_dev_id[] = {
#ifdef RT6570
	{USB_DEVICE(0x148f,0x6570)}, /* Ralink 6570 */
#endif /* RT6570 */
	{USB_DEVICE(0x148f, 0x7650)}, /* MT7650 */
#ifdef MT7601U
	{USB_DEVICE(0x148f,0x6370)}, /* Ralink 6370 */
	{USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */
	{USB_DEVICE(0x148f,0x760b)},
#endif /* MT7601U */
	{ }/* Terminating entry */
};

2.2 修改驱动源码的Makefile文件

  • 确认驱动源码运行的目标平台

    在Makefile文件的49行:PLATFORM = SMDK 需要定义,表示运行在三星平台上。

  • 内核源码树路径和编译工具链路径修改

    在275行有定义三星平台下的内核源码树路径和编译工具链的路径,修改为如下和自己开发环境相匹配的路径。

    ifeq ($(PLATFORM),SMDK)
    #LINUX_SRC = /home/bhushan/itcenter/may28/linux-2.6-samsung
    #CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
    LINUX_SRC = /root/kernel/jiuding-kernel 
    CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
    endif
    
  • 修改WIFI网卡名称(也可以使用源码默认的名称)

    常用的无线网卡名称有:rax、wlanx

    对于mt7601驱动源码,要修改WIFI网卡名称,是在 ./include/rtmp_def.h 文件中的1601行有定义这个名称。

    #define INF_MAIN_DEV_NAME “ra”

    #define INF_MBSSID_DEV_NAME “ra”

  • 添加wpa_supplicant支持

    ./os/linux/config.mk 这个文件中有一个宏定义配置支持这个功能的。在24行配置为y即可。

    # Support Wpa_Supplicant
    # i.e. wpa_supplicant -Dralink
    HAS_WPA_SUPPLICANT=y
    
  • 编译生成.ko驱动文件

    编译生成的.ko文件就在./os/linux目录下。

3. mt7601驱动模块的安装和路由器端的基本概念

  • 驱动模块安装

    把编译好的.ko文件,通过nfs共享文件夹形式传输到开发板上,在开发板上执行 insmod 命令安装.ko文件即可。

  • 确认 WIFI 驱动是否运行

    安装完后使用 ifconfig -a 可以显示出所有的网卡名称,可以看到安装的WIFI网卡名称为 “ra0”。

    不过此时还不能使用 ifup ra0 命令打开这个无线网卡,因为还需要做一些配置文件才能打开。

  • iwconfig命令介绍

    这个是linux下配置无线网卡的一个命令工具,不过这个命令集已经很老了,有些特性不支持,所以现在很少用。

  • 路由器端的基本概念

    • 路由器的WAN、LAN
    • 无线参数:SSID(就是别人能看到的无线网络名称)、频段、模式
    • 安全类型:WEP、WPA、WPA2
    • 安全选项
    • 加密算法
    • PSK密码

4. 配置WIFI网卡

4.1 把相关配置文件复制到开发板

  • 把源码目录下的 RT2870STA.dat 这个文件复制到开发板的 /etc/Wireless/RT2870STA 目录下(没有这几个目录的话,就自己新建)。注意:这个配置文件一定是要放在这个路径下的,不然会报错说找不到这个文件。

  • 打开 /etc/wpa_supplicant.conf 这个配置文件(这个配置文件是 wpa_supplicant 这个命令工具本身的配置文件,和WIFI网卡无关),写入如下内容:

    ctrl_interface=/var/run/wpa_supplicant
    ap_scan=1	
    
    network={
      key_mgmt=WPA-PSK		# 使用什么密码方式。我试过配置为WPA2-PSK方式,但是连接不了手机热点
      ssid="redmi"			# 要接入的路由器WIFI名称,实验的时候我把手机作为AP
      psk="12345678"		# WIFI密码
    }
    
  • 打开WIFI网卡。输入如下命令:

    ifconfig ra0 up
    

    我使用过 ifup ra0 命令,但是提示没有这个命令(不知道为什么)。

4.2 WIFI网卡相关配置

4.2.1 手工配置

  • 连接路由器WIFI或者手机热点:

    wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0
    

    因为我身边没有路由器,所以我是开手机热点进行连接的。

  • 查看开发板WIFI连接状态:

    wpa_cli -i ra0 status
    
  • 手动指定WIFI的IP地址:

    ifconfig ra0 192.168.43.100
    

    指定了IP地址之后,开发板就可以和手机ping通了。不过一定要注意把开发板的有线网卡关闭了,不然就是默认使用有线网卡的。

  • 配置网关:

    但是此时还不能ping通外网的,因为还没有配置网关。配置网关命令如下:

    route add default gw 192.168.43.1 dev ra0
    

    配置网关后,此时就可以ping通外网了。比如:ping 8.8.8.8

  • 配置DNS:

    配置好网关之后,我们还是不能ping通 www.baidu.com 这类网站,因为还没有配置DNS服务器(就是把网站转换为一个对应的IP地址的服务器)。配置DNS如下:

    • 打开 /etc/resolv.conf 这个文件

      vi /etc/resolv.conf
      
    • 在配置文件中写入 nameserver 192.168.43.1 这条语句即可。当然我们也可以配置为其他的DNS服务器。比如谷歌的 8.8.8.8 ;比如国内运营商的114.114.114.114

    配置完DNS后,此时就可以ping通百度的域名、淘宝的域名等等了。

4.2.2 修改interfaces文件实现IP地址动态分配

打开 /etc/network/interfaces 这个文件,然后接着添加一下内容:

auto ra0
iface ra0 inet dhcp			#指定动态分配IP地址,如果是动态分配IP,那么DNS服务器也会自动分配
#iface ra0 inet static
address 192.168.43.100		#如果是动态分配,那么这一句指定IP地址就不起作用
netmask 255.255.255.0
gateway 192.168.43.1

补充记录:上面这个配置内容,我一开始测试是可以实现IP地址自动分配的。但是后来又试了几次之后又不行了,我找了很久也找不到问题在哪。感觉应该是我后来不小心改了什么文件或者参数造成的,一时间这里不知道怎么回事。

4.3 修改启动文件实现开机即连接了WIFI

可以修改 /etc/init.d/rcS 的启动配置文件,从而实现开机就能连接上WIFI。不过九鼎科技提供的 rootfs 是在这个目录下建立一个个的子配置文件,然后rcS文件读入这些子配置文件,从而实现开机配置某些功能的需求。所以这里我也建立一个S44WIFI的子文件(名字S开头即可,然后随便取)。然后输入以下内容:(注意要修改文件权限有可执行权限)

# 安装WIFI驱动
insmod /home/mt7601Usta.ko	

# 启动WIFI网卡
ifconfig ra0 up

# 连接路由器或者手机热点
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0

# 重启WIFI网卡
ifconfig ra0 down
ifconfig ra0 up

一开始我使用interfaces文件来动态分配IP地址,是可以的。但是不知道为什么后来又不行了,搞了很久不知道什么情况。所以上述的开机自动连接WIFI,然后动态分配IP没有实现。不过可以用下面的内容,实现开机指定一个IP地址连接WIFI,如下:

insmod /home/mt7601Usta.ko
ifconfig ra0 up
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0

# 指定WIFI网卡的IP
ifconfig ra0 192.168.43.100

# 配置网关
route add default gw 192.168.43.1 dev ra0

# 配置DNS服务
echo "nameserver 192.168.43.1" > /etc/resolv.conf

上面这份命令测试可以实现开机指定一个IP,然后实现连接 www.baidu.com 网址。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值