1、MTK7601
联发科的低成本wifi解决方案。
2、无线网卡的配置和使用
(1)常用无线网卡工具介绍:iwconfig、iwlist、iwpriv、wpa_supplicant
(2)常见WIFI加密格式介绍和路由器端查看:WEP、WPA
(3)wpa_supplicant使用详解
(4)配置本地IP地址、网关、dns等并确认外网连接
3、确认环境
首先要拿到开发板提供的官方linux+QT4.8镜像,这个内核之前我们做了很多修改(改了屏幕参数和更换触摸屏驱动),根文件系统则使用九鼎bsp提供的根文件
进入文件系统之后,输入ifconfig
会发现没有设置好开发板的ip地址
这时候输入ifconfig eth0 192.168.1.10(只要和ubuntu在同个网段就好)
最后将ubuntu的nfs文件夹挂载到开发板文件系统中的opt文件夹下:
mount -t nfs -o nolock 192.168.1.141:/home/aston/rootfs /opt
lsusb查看网卡的VID和PID
Bus 001 Device 003: ID 148f:7601
VID和PID主要功能就是用来识别设备,并挂接相应的驱动。
4、编译和移植
首先将下载好的DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
(点击此处下载https://download.youkuaiyun.com/download/tainjau/10425809)文件放在ubuntu中。
在ubuntu中解压完压缩包后,执行make clean清理一下残留的编译文件。
这个源码文件是已经修改过的了,所以我们仅需检查一下几个内容即可。
4.1、确认源码包中rtusb_dev_id.c文件
文件路径在DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/common目录下。
其中第二行的USB_DEVICE(0x148f,0x7601) 对应上了我们之前看到的网卡的VID和PID。
4.2、修改Makefile
修改主目录中的makefile
(1)平台换成:三星
PLATFORM = SMDK
(2)内核源码树路径设置
LINUX_SRC = /home/work/x210/kernel //linux内核源码树
(3)交叉工具链路径设置
CROSS_COMPILE = //交叉编译环境
4.3、修改网卡名字(可选)
(1)常用无线网卡名称:rax、wlanx
(2)修改include/rtmp_def.h文件
#define INF_MAIN_DEV_NAME "ra"
#define INF_MBSSID_DEV_NAME "ra"
4.4、添加wpa_supplicant支持
将来要使用wpa_supplican工具使wifi进行联网,就需要配置这个选项。
文件路径在DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/
确保config.mk文件中WPA_SUPPLICANT=y
4.5、编译生成驱动模块
make clean && make -j2
生成os/linux/mt7601Usta.ko就是驱动模块
5.WIFI网卡的配置过程
5.1挂载驱动
首先将usb网卡插入开发板上的usb接口中。
然后再将之前编译好的mt7601Usta.ko文件放在开发板的文件系统中,执行insmod mt7601Usta.ko加载网卡驱动
之后执行命令ifconfig -a 可以看到我们的网卡信息,虽然这时候网卡还不能被启动。
5.2wpa_supplicant配置文件
首先在开发板中的etc文件夹里面建立这几个文件。
/etc/Wireless/RT2870STA/RT2870STA.dat
使用mkdir -p /etc/Wireless/RT2870STA 创建RT2870STA文件夹
其中配置文件RT2870STA.dat在之前的驱动源码里面有,在源码的根目录中。将RT2870STA.dat文件拷贝到/etc/Wireless/RT2870STA/文件夹中。
复制完成之后,还需要修改/etc/wpa_supplicant.conf文件。
其中key_mgmt是加密方式
ssid和psk则是wifi的账号和密码
5.3、网卡配置命令序列(手动)
insmod mt7601Usta.ko //安装驱动程序
ifconfig ra0 up //开启无线网卡
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 //连接无线网络
连接完无线网络之后,可以输入wpa_cli -i ra0 status 查看网络连接状态,如果有出现下图,就说明连接正常。
接下来设置开发板的ip地址,配置网关之后,ping内外网就能通了。
ifconfig ra0 192.168.1.200 //手动配置ip,同一网段
route add default gw 192.168.1.1 dev ra0 //配置网关
ping 192.168.1.1 //ping 网关
ping 8.8.8.8 //ping 外网
如果想ping域名的话,就需要配置dns,首先打开etc下的resolv.conf文件,添加nameserver 192.168.1.1 即可。
vi /etc/resolv.conf //配置dns
nameserver 192.168.1.1
注意:
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。
至此,手动配置wifi模块上网就基本完成了。如果还要更方便点上网,就参考接下来的。
5.4、使用interfaces文件静态配置
之前使用的是手动配置,接下来使用interfaces文件进行配置
首先还是跟一开始一样
insmod mt7601Usta.ko //安装驱动程序
ifconfig ra0 up //开启无线网卡
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 //连接无线网络
wpa_cli -i ra0 status //查看连接状态
然后在终端使用vi打开开发板文件系统中的/etc/network/interfaces,增加以下配置。
最后使interface文件生效(重启网卡),方法是先ifdown ra0然后ifup ra0
总结:使用/etc/network/interfaces文件其实就是替代了手工配置时的ifconfig分配本地ip地址,和route添加网关这两步。
5.5、使用dhcp动态分配IP
路由器中有个dhcp服务器,本地有dhcp客户端,嵌入式设备的文件系统中的busybox内也带了dhcp功能。
前导步骤:使用dhcp动态分配ip前,需要执行以下步骤
insmod /home/mt7601Usta.ko //安装驱动程序
ifconfig ra0 up //开启无线网卡
wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ra0 //连接无线网络
wpa_cli -i ra0 status //查看连接状态
当前状态就是:wifi网卡已经启动并且连接上路由器了,但是本地没有ip地址,所以没法ping通路由器。怎么办?使用dhcp分配一个本地ip。
方法1:命令行使用udhcpc命令来分配
输入命令:udhcpc -i ra0
之后就可以得到dhcp分配好的地址。
方法2:使用interface文件选择dhcp模式然后重启网卡
6、让开发板开机自动连上路由器上网
改/etc/init.d/rcS及其相关文件.
首先在开发板文件系统中的/etc/init,d/目录下创建一个S41Wifi文件
添加进之前配置的东西。
保存后,记得给S41Wifi这个文件加上可执行权限。
chmod a+x S41Wifi
之后重启,就会自动连上路由器上网