前言
树莓派3b板子自带了wifi模块,但wifi模块只能开启网卡模式或热点模式,也就是说使用自身的wifi开了热点后,就不能在连接其他的wifi了。当然,使用自身的wifi开启热点,然后额外插入其他usb网卡连接网络,也是一种方法。本文着重叙述如何使用360wifi这类usb网卡来开启热点。
硬件环境:树莓派3b、360随身wifi2代(小度wifi、小米wifi都可)。其中树莓派使用的目前为止官方最新的系统。
目的:使用360wifi开启ap热点。
usb网卡的工作模式介绍
usb网卡有两种工作模式,网卡模式(即sta模式)和热点模式(即ap模式)
声明
由于目前的树莓派系统,都内置了mt7601的驱动(360wifi使用的就是此芯片),因此当你插入360wifi时,系统就会自动识别,这时没有问题的。也就是如果你只把360wifi当作普通的usb网卡使用的话,本文对你是没有帮助的。本文针对的是想使用360wifi开启热点的人群,因为这方面的资料比较稀少,而且杂乱不看,本文经过实践后进行了总结和整理,写出了此文。
都有哪些坑
360wifi这类网卡,其使用的是mt7601这款芯片,芯片官方有只有sta模式的源码,也就是我们只能将其当作普通的网卡使用。不过其实这个网卡是支持ap模式的,但在linux下,尤其是在arm环境下,大多数我们不能下载现成的驱动,因此只能自己编译。 我之前在arm环境下编译成功过sta模式和ap模式的网卡驱动,但这次到了树莓上,还是遇到了不少的坑。
- 第一个坑,gcc。
我们使用cat /proc/version
命令可以查看系统内核及编译内核的gcc版本,我的显示如下:
Linux version 4.9.59-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #1047 SMP Sun Oct 29 12:19:23 GMT 2017
可以看到内核版本是4.9.59,使用的gcc版本是4.9.3。当当我输入gcc -v
命令时,却看到gcc的版本是6.3+,是的,你没看错,gcc版本高了很多,最开始的时候我没太在意这个,认为版本高了没问题,结果我从网上的下载的驱动源码,无论是sta的还是ap的,都编译失败。所以我们一定要先将gcc版本调整为和内核相近的版本,我们这里安装4.9版本的gcc:
先卸载旧的gcc和g++:
apt-get remove gcc
apt-get remove g++
然后安装4.9版本的gcc和g++:
apt-get install gcc-4.9
apt-get install g++-4.9
安装完后再次使用gcc -v
命令查看,确认gcc为4.9版本。
- 第二个坑,内核源码。
如果我们要在linux上进行程序编译,内核源码是不可少的,如果你从网上查资料,大多数使用的都是使用的rpi-source
这条命令,其实有更简单的,也是官方的推荐的,就是直接使用apt-get install raspberrypi-kernel-headers
命令,这条命令执行后我们在/usr/src
下可以看到多了两个源码目录,而且它们也会有软连接关联到/lib/modules
目录下。
- 第三个坑,网上的大多数源码都是无法使用的,甚至包括我当初在其他arm平台下能正常编译的源码
你如果搜索编译360wifi的资料,大多数都会指向这篇文章 小米随身WiFi,Linux下AP热点驱动(开源) ,如果前面几个坑你都填平的话,按照这个教程是能够正常编译并加载驱动的,但是,你会发现,找不到开启的热点。
继续从网上找的话,你可能会找到这个资料:mt7601u-ap ,这是github上的源码,能够正常编译。编译并安装完后,插上360wifi,你使用ifconfig
命令就会惊恐的发现,出现了15个ra0类似的网卡,而且能搜索到HT_AP0类似15个热点,这是为什么呢?因为驱动无法正常读取配置文件,所以默认会创建15个热点,而且它们的名字都是默认的名字。本来我尝试解决这个bug,经过一番尝试后,最终放弃。
如果这些坑都填平的话,我们来开始编译ap驱动吧。
开始
- 确保gcc版本和内核一致,参考前面的段落来如何使它们保持一致。
- 安装内核源码,同样参考前面的段落。
- 下载ap源码:PolyVection/mt7601u-ap ,注意,可能git clone失败,此时可以直接下载zip文件。下载完后将其拷贝树莓派中并解压,然后cd命令到那里。
- 执行
make
命令进行编译,成功后执行make install
命令进行安装 - 因为树莓派已经内置了mt7601的驱动,为了防止冲突,我们要先将其删除移除。删除或重命名
/lib/modules/4.9.59-v7+/kernel/drivers/net/wireless/mediatek/mt7601u/mt7601u.ko
这个文件。 - 现在插上360wifi,使用
ifconfig
命令就可以看到多了一个叫ra0的网卡,而且用手机可以看到名为HD_MESH_1
的一个热点。
至此,360wifi的ap驱动就编译完成了。
配置并使用
- 第一步,修改热点信息。用记事本或vi命令编辑
/etc/Wireless/RT2870AP/RT2870AP.dat
文件:
- SSID:热点名称
- AuthMode:热点是否使用密码
- WPAPSK:热点密码
- 第二步,配置热点自身的ip。直接修改
/etc/dhcpcd.conf
文件,加入如下代码,表示ra0网卡的ip为192.168.99.1:
interface ra0
static ip_address=192.168.99.1/24
这里一定要注意,不要修改/etc/network/interfaces
文件,千万千万千万不要改,会造成系统无法启动,且显示屏无任何输出。 - 第三步,配置dhcp服务。其实到这里,我们已经可以用手机连接树莓派的热点了,但是手机会一直显示获取ip中,这是因为我们还没有开启dhcp服务。注意,在开启安装dhcp服务前,要先在
raspi-config
里将等待网卡启动
配置为启用:
- 输入
raspi-config
命令,进入boot options
,将wait for network ...
配置为enable
。 - 安装dhcp服务:
apt-get install isc-dhcp-server
- 配置dhcp服务监控的网卡,编辑
/etc/default/isc-dhcp-server
文件,修改INTERFACESv4="ra0"
- 配置dhcp参数,编辑
/etc/dhcp/dhcpd.conf
文件,添加如下配置:
subnet 192.168.99.0 netmask 255.255.255.0 {
range 192.168.99.50 192.168.99.250;
option routers 192.168.99.1;
}
- 如果需要热点能通过自身的wifi上网,请参考此文件中的配置示例。
- 重启dhcpd服务,
service dhcpd restart
,此服务默认就是开机启动的,因此无需再次配置开机启动。
至此,我们360wifi热点就能正常使用了。
- 输入
如果不想自己编译驱动,可以直接下载我已经编译好的驱动:树莓派3b下360wifi(小度wifi、小米wifi)ap热点驱动
使用说明:三个ko文件放在/lib/modules/4.9.59-v7+/kernel/drivers/net/wireless/
下,其中4.9.59-v7+
表示内核版本,树莓派当前的系统就是在这个位置,如内核版本有变化,自行改动;RT2870AP.dat文件放在/etc/Wireless/RT2870AP/
下,目录不存在时手动创建即可。
PS:如果你也想编译下sta的驱动,下载这个,这个经过测试是能正常编译使用的:https://github.com/art567/mt7601usta
完。