在NanoPi M1下使用小度Wi-Fi

在NanoPi M1下使用小度Wi-Fi

M1的固件nanopi-m1-debian-sd4g-20160907.img.zip已经自带了小度Wi-Fi的驱动——mt7601u,但是没法即插即用,不知道为什么。为了使用小度Wi-Fi需要进行一些设置。

因为大多数讲Wi-Fi的文章都只是列了一下配置,然后就OK,但是自己不成功的话,无从排查问题。本文尝试引入几个命令来帮助排查问题,虽然我也是对整个配置过程一知半解,但了解了这几个命令还是有很大帮助。

1. lsusb

插上小度Wi-Fi,我们首先需要确认是不是被系统识别了,那就需要用lsusb,首先用如下命令安装lsusb

sudo apt-get install usbutils

然后执行lsusb输出如下:

Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 2955:1001  
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

如果有2955:1001,则表示小度Wi-Fi被识别了,对于其他的设备,可以通过该命令在查看设备的Device ID。

2. dmesg

dmesg可以用来查看内核输出的信息,我们用它来查看驱动是否加载了。插上小度Wi-Fi后,在终端中执行dmesg命令,如果驱动加载正常在最后会有如下输出:

[  142.050149] usb 2-1: new high-speed USB device number 2 using sunxi-ehci
[  141.449845] cfg80211: World regulatory domain updated:
[  141.455614] cfg80211:  DFS Master region: unset
[  141.460469] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
[  141.471300] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)
[  141.480206] cfg80211:   (2457000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)
[  141.489085] cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (N/A, 2000 mBm), (N/A)
[  141.498000] cfg80211:   (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (N/A)
[  141.508545] cfg80211:   (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (0 s)
[  141.519081] cfg80211:   (5490000 KHz - 5730000 KHz @ 160000 KHz), (N/A, 2000 mBm), (0 s)
[  141.528078] cfg80211:   (5735000 KHz - 5835000 KHz @ 80000 KHz), (N/A, 2000 mBm), (N/A)
[  141.530052] usb 2-1: reset high-speed USB device number 2 using sunxi-ehci
[  141.544599] cfg80211:   (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm), (N/A)
[  141.683042] mt7601u 2-1:1.0: ASIC revision: 76010001 MAC revision: 76010500
[  141.699552] mt7601u 2-1:1.0: Firmware Version: 0.1.00 Build: 7640 Build time: 201302052146____
[  142.113339] mt7601u 2-1:1.0: Warning: unsupported EEPROM version 0d
[  142.120500] mt7601u 2-1:1.0: EEPROM ver:0d fae:00
[  142.126447] mt7601u 2-1:1.0: EEPROM country region 01 (channels 1-13)
[  142.372181] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[  142.374575] usbcore: registered new interface driver mt7601u

也可以使用dmesg | grep mt7601来精简输出:

​ [ 10.030133] mt7601u 6-1:1.0: ASIC revision: 76010001 MAC revision: 76010500
​ [ 10.495110] mt7601u 6-1:1.0: Warning: unsupported EEPROM version 0d
​ [ 10.507867] mt7601u 6-1:1.0: EEPROM ver:0d fae:00
​ [ 10.527104] mt7601u 6-1:1.0: EEPROM country region 01 (channels 1-13)
​ [ 11.465717] usbcore: registered new interface driver mt7601u

只要看到usbcore: registered new interface driver mt7601u就表示小度Wi-Fi已经被识别出来了并且加载了。

3. lsmod 和 modinfo

假入没有类似输出,我们可能要进一步确认mt7601u是不是加载了,那就需要用lsmod,正常来说会输出如下内容:

Module                  Size  Used by
mt7601u                73012  0 
mac80211              495881  1 mt7601u
cfg80211              470289  2 mac80211,mt7601u
mali_drm                5741  1 
mali                  194124  0 
ump                    37786  3 mali
rfcomm                 21114  4 
bnep                    9149  2 
hci_uart               11776  0 
btbcm                   5304  1 hci_uart
bluetooth             300113  10 bnep,btbcm,hci_uart,rfcomm
compat                 25372  7 bnep,cfg80211,mac80211,mt7601u,hci_uart,rfcomm,bluetooth

可以看到mt7601已经加载了,但是没用啊。我们在用sudo modinfo mt7601u来查看驱动的具体信息,正常输出如下:

filename:       /lib/modules/3.4.39-h3/updates/drivers/net/wireless/mediatek/mt7601u/mt7601u.ko
version:        backported from Linux (v4.4.2-0-g1cb8570) using backports v4.4.2-1-0-gbec4037
license:        GPL
firmware:       mt7601u.bin
srcversion:     06486A44A19698210D54450
alias:          usb:v7392p7710d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2A5Fp1000d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2955p1001d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2955p0001d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2717p4106d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v2001p3D04d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v148Fp760Dd*dc*dsc*dp*ic*isc*ip*
alias:          usb:v148Fp760Cd*dc*dsc*dp*ic*isc*ip*
alias:          usb:v148Fp760Bd*dc*dsc*dp*ic*isc*ip*
alias:          usb:v148Fp760Ad*dc*dsc*dp*ic*isc*ip*
alias:          usb:v148Fp7601d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v13D3p3434d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v13D3p3431d*dc*dsc*dp*ic*isc*ip*
alias:          usb:v0E8Dp760Bd*dc*dsc*dp*ic*isc*ip*
alias:          usb:v0E8Dp760Ad*dc*dsc*dp*ic*isc*ip*
alias:          usb:v0B05p17D3d*dc*dsc*dp*ic*isc*ip*
depends:        mac80211,compat,cfg80211
vermagic:       3.4.39-h3 SMP preempt mod_unload ARMv7 p2v8 

注意其中的alias,其中的usb:vXXXXpXXXd这部分实际上对应的是USB设备的deviceID,所以需要看一下有没有小度Wi-Fi的ID:2955:1001,如果没有,那么你需要自己编译mt7601来支持了,M1自带的是支持小度Wi-Fi的。所以一切正常的话,完全可以驱动起来。对于其他Wi-Fi设备,可以通过lsusb来获取DeviceID来查看驱动是否支持。

4. ip addr

虽然mt7601支持小度Wi-Fi,内核也提示已经创建了接口,但是通过sudo ifconfig还是看不到wlan0。这时我们需要用sudo ip addr来确认是不是已经创建wlan0了还是有其他的网络接口(实际官方的mt7601驱动创建的是ra0网络接口),假设你使用过其他Wi-Fi设备,此时为小度创建的接口可能是wlan1,这个需要确认一下。

7: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

可以根据link/ether后的Mac地址:xx:xx:xx:xx:xx:xx来确认哪个接口是小度Wi-Fi。

如果这里没有小度Wi-Fi输出的话,说明驱动还是有问题,但是我也不知道该从哪里去查了。

5. 配置小度Wi-Fi

到此为止,我们基本就可以定位小度Wi-Fi的驱动问题了。下一步就是配置来启用小度Wi-Fi。

5.1 启用wlan0

这里我们需要根据ip addr的输出来确认是wlanX。编辑/etc/network/interfaces文件,增加如下内容:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp

重启系统或者使用sudo /etc/init.d/networking restart来重启网络。

这时使用sudo ifconfig应该可以看到wlan0了。

5.2 连接无线网络

编辑/etc/wpa_supplicant/wpa_supplicant.conf文件增加如下内容:

ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="XXXXXX"
    psk="YYYYYY"
}

其中是XXXXXX你要连的无线网络名称,YYYYYY是网络的密码。

然后执行如下命令来连接网络:

sudo wpa_supplicant -B -iwlan0 /etc/wpa_supplicant/wpa_supplicant.conf 

此时,应该还是没有网络,需要使用如下命令来开关一下wlan0

sudo ifdown wlan0 # 关闭wlan0
sudo ifup wlan0   # 启用wlan0
sudo ifconfig     # 应该可以看到wlan0已经获取IP了

5.3 开机连接Wi-Fi

如果想要开机时自动连接Wi-Fi,需要编辑/etc/network/interfaces文件,在5.1中增加的内容之后加入如下内容:

pre-up /sbin/wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf  
post-down killall -q wpa_supplicant

至此,小度Wi-Fi就完全配置完成了。

最后啰嗦两句,从树莓派2代开始,就一直想要用上小度Wi-Fi,但一直以来都是以失败告终,几乎无从查找原因。这次又有时间折腾,先是编译了M1的内核,接着又自己编译了mt7601的驱动,其中经历又颇为曲折,但是总算是理清了大致的脉络,然后发现M1是默认支持小度的,但是却没有详细的设置教程,而且debian桌面上的wicd也是无法识别,所以又各种搜索,总算是驱动起来了,心中甚是畅快。但回顾起来又不免感慨,正所谓授人以鱼不如授人以渔,能搜的帖子大多都是“鱼”,单单是4中讲到的确认接口的问题估计就会让好多人无法设置成功,因为很可能是wlan1而不是wlan0。虽然本文远未到“授人以渔”的程度,但多少提供了一些命令来排查各个环节,尽管是以M1为基础环境,但在树莓派、香蕉派等上仍适用。希望各位能用好自己手中的小度Wi-Fi、米Wi-Fi和360Wi-Fi等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:杨谊 学号:16130120200 【嵌牛导读】: Wi-Fi 对移动计算的使用产生了巨大的影响,使员工可...
    luckyoungo_o阅读 263评论 0 0
  • 姓名:杨谊 学号:16130120200 【嵌牛导读】: Wi-Fi 对移动计算的使用产生了巨大的影响,使员工可...
    luckyoungo_o阅读 312评论 2 1
  • 小A拿起手机,翻开微信里的联系人,手指不停地往下划,最后,僵住了一会,又默默地按了Home键。这个动作做得很熟练,...
    飞天小小猫阅读 205评论 0 1
  • 一个人的时候 或许会难过 别忘了安慰下自己 再怎么难过 明天依旧要继续走下去 一个人的时候 或许会寂寞 别忘了抱抱...
    应荣阅读 202评论 0 1
  • 最近因为杂事众多,想去法门寺的计划一直搁浅。直到周日晚上,带上孩子们去法门寺,终于实现我的心愿。 夏天的夜晚,天色...
    自由在路上阅读 918评论 5 9