树莓派3b——使用360wifi(小度wifi、小米wifi)开启热点

前言

树莓派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

完。

你可能感兴趣的:(树莓派3b)