X210-MT7601-USB WIFI移植
1、MT7601驱动的移植
(1)开发环境搭建和确认
(2)源码获取和解压
(3)配置、编译、安装
最后得到网络设备文件。
2、插入usb WiFi 启动开发板linux,lsusb查看usb驱动
Bus 001 Device 003: ID 148f:7601看到的是该驱动的厂家设备信息
3、获取MT7601的源码
4、解压源码到linux下,确认USB的VID(VENDOR)和PID(PRODUCT),在rtusb_dev_id.c中
如果没有,则需要添加。MT7601U,在哪里被定义?
5.确认Makefile
打开源码根目录下的Makefile
(1)平台换成:三星
PLATFORM = SMDK
(2)内核源码树路径设置
LINUX_SRC = //linux内核源码树
(3)交叉工具链路径设置
CROSS_COMPILE = //交叉编译环境
5、可以更改wifi名字
(1)常用无线网卡名称:rax、wlanx
(2)修改include/rtmp_def.h文件
6、添加wpa_supplicant支持
确保在os/linux/config.mk文件中WPA_SUPPLICANT=y
清理&编译
make clean && make -j4
生成os/linux/mt7601Usta.ko就是驱动模块
将编译好的os/linux/mt7601Usta.ko放到/home/aston/rootfs/rootfs 目录下
7.驱动源码的简单分析
从os/linux分析,因为我们是用在linux系统下面的。
从哪里开始找?当我们insmod时候,会注册,那么我们找下module_init
INT __init rtusb_init(void)
usb_register(&rtusb_driver);
00362: struct usb_driver rtusb_driver = {
00363: .name=RTMP_DRV_NAME, //驱动名称
00364: .probe=rtusb_probe,
00365: .disconnect=rtusb_disconnect,
00366: .id_table=rtusb_dev_id,
00368: #ifdef CONFIG_PM
00369: #ifdef USB_SUPPORT_SELECTIVE_SUSPEND
00370: .supports_autosuspend = 1,
00371: #endif /* USB_SUPPORT_SELECTIVE_SUSPEND */
00372: suspend: rt2870_suspend,
00373: resume: rt2870_resume,
00374: #endif /* CONFIG_PM */
00375: .supports_autosuspend = 1,
00376: };
8、无线网卡的驱动模块装载
挂载,然后安装驱动(成功后肯定得到一个设备文件(可以ifconfig -a查看),可以打开网卡ifconfig ra0 up),打印出一系列信息。
安装ko模块:
9.iwconfig工具
iwconfig工具集的介绍和使用演示
(1)linux下专用来配置无线网络的一些命令集,这些命令集比较老了。
(2)因为iwconfig本身有一定限制,它只支持一定的加密格式,在我们这里不用。
10.路由器端基础知识
ap(路由器端)和station(手机)
(1)路由器的WAN、LAN
(2)无线参数:SSID(路由器的名字)、频段(2.4G附近分割成若干频段,每个用户使用不同频段)、模式(工作在哪种标准)
(3)安全类型:WEP(早版本)和WPA(升级版)、WPA2(完整版)
(4)安全选项
(5)加密算法
(6)PSK密码
11.wpa_supplicant配置文件
(1)wpa_supplicant简介
进行wifi网络管理的工具,也集成到了busybox中,即可以直接用。
(2)建立/etc/Wireless/RT2870STA/目录(mkdir -p /etc/Wireless/RT2870STA/(这是wifi网卡的配置文件)),然后拷贝RT2870STA.dat(源码中有)到此目录下。
(3)编辑/etc/wpa_supplicant.conf
12.网卡配置(上网)命令顺序
(1)安装驱动程序:insmod mt7601Usta.ko
(2)开启无线网卡:ifconfig ra0 up
(3)连接无线网络:wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0
(4)查看连接状态:wpa_cli -i ra0 status
至此,usb_wifi已经连上了路由器。
1、ra0的配置和上网前,一定要先关掉eth0(ifconfig eth0 down),否则你ping或者设置等等都是默认使用的eth0而不是ra0.
2、当wifi网卡连接上路由器后,想要ping通路由器(网关),本地wifi网卡需要和网关同一网段的ip地址。这个本地的ip地址可以dhcp分配,也可以手工配置一个。
3、本地有了ip地址,并且wifi网卡通过wpa_supplicant配置连上路由器后,就能ping通网关了。但是这时还不能ping通外网,因为本地还没有添加网关配置。添加网关配置有2种方法:通过route命令动态添加,或者通过/etc/network/interfaces文件添加。
4、添加网关后就能ping通外网IP了,但是还ping不通www.baidu.com等域名,因为还没有dns。
(1)ifconfig eth0 down
(2)ifconfig ra0 192.168.1.200 //手动配置ra0的ip地址,和路由器处于同一网段
(3)route add default gw 192.168.1.1 dev ra0 //配置网关(配置网关才能访问外网)
ping 192.168.1.1 //ping 网关
ping 8.8.8.8 //ping 外网(谷歌某地址)
(4)vi /etc/resolv.conf //配置dns。即在此文件里添加nameserver xx.xx.xx.xx(根据实际)
ping www.baidu.com
13、使用DHCP动态分配IP
(1)原理:路由器中有个dhcp服务器,本地有dhcp客户端
(2)前导步骤
ifconfig eth0 down
insmod mt7601Usta.ko //安装驱动程序
ifconfig ra0 up //开启无线网卡
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 //连接无线网络
wpa_cli -i ra0 status //查看连接状态
(3)至此,wifi网卡已经启动并且连接上路由器。但由于本地没有ip地址,无法ping通路由器。怎么办?
使用dhcp分配一个本地ip。
方法1:命令行使用udhcpc -i ra0命令来分配
方法2:使用interface文件选择dhcp模式然后重启网卡
14、让开发板开机自动连上路由器上网
改/etc/init.d/rcS及其相关文件。
(1)etc/init.d/下的目录,和rcS文件的遍历执行该目录下的文件。
(2)在etc/init.d/目录下新建文件S41WIFI,添加如下内容,保存够修改权限。
然后修改chmod 777 S41WIFI。
15、在自己定制的rootfs中移植网卡
1、确认自己制作的rootfs并启动
(1)busybox交叉编译
(2)启动后直接nfs方式挂载文件夹形式的rootfs,测试ok后再做成镜像烧录
(3)挂载参数bootargs和bootcmd
setenv bootargs root=/dev/nfs nfsroot=192.168.1.100:/root/rootfs ip=192.168.1.10:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
set bootcmd 'tftp 30008000 zImage; bootm 30008000'
2、确认需要的移植的工具集
(1)iwconfig工具集:需要另外移植,不是busybox中的
(2)dhcp工具集:是busybox中集成的,确认busybox的menuconfig中配置支持了这个
(3)wpa_supplicant工具集:需要另外移植,不是busybox中的
3、交叉编译iwconfig
(1)源码下载
--------------------
移植环境:
主机操作系统:Ubantu 10.10
目标系统:hi351x 内核 linux-2.6.14
交叉编译器:arm-hismall-linux-
wireless_tools版本: wireless_tools.29.tar.bz2
1.1 下载wireless_tools.29.tar.bz2
下载地址:下载wireless_tools.29.tar.bz2
1.2 解压
#tar xvfj wireless_tools.29.tar.bz2
#cd wireless_tools.29
1.3 Makefile修改
- 表示去掉的
+ 表示新增加的
#vi Makefile
- CC = gcc
+ CC= arm-hismall-linux-gcc
- AR = ar
+ AR= arm-hismall-linux-ar
#make
1.4 或者复制文件到产品板
拷贝libiw.so.29文件到目标系统/usr/lib/
拷贝用到的几个程序到产品板就可以了
iwpriv、iwconfig、iwlist, iwevent, iwspy
至此wireless_tools移植完成
有可能出现的错误:
在到产品板上还出现can't resolve symbol '__ctype_b_loc' 错误
去掉iwlib.h中这一行重新编译即可
#include <ctype.h>
----------------
(2)配置
(3)交叉编译
(4)部署安装
(5)测试
16、移植wpa_supplicant并制作镜像
1、交叉编译wpa_supplicant
(1)下载wpa_supplicant源码并配置编译。参考http://blog.****.net/hktkfly6/article/details/48949863
(2)下载配套版本的openssl并配置编译。
(3)去掉配置NL相关的选项省去移植libnl。参考:http://www.cnblogs.com/helloworldtoyou/p/6145995.html
2、在nfs中测试wpa_supplicant使用
3、制作ext2镜像并刷机测试