M1的固件nanopi-m1-debian-sd4g-20160907.img.zip已经自带了小度Wi-Fi的驱动——mt7601u,但是没法即插即用,不知道为什么。为了使用小度Wi-Fi需要进行一些设置。
因为大多数讲Wi-Fi的文章都只是列了一下配置,然后就OK,但是自己不成功的话,无从排查问题。本文尝试引入几个命令来帮助排查问题,虽然我也是对整个配置过程一知半解,但了解了这几个命令还是有很大帮助。
1. lsusb 插上小度Wi-Fi,我们首先需要确认是不是被系统识别了,那就需要用lsusb
,首先用如下命令安装lsusb
:
1 sudo apt-get install usbutils
然后执行lsusb
输出如下:
1 2 3 4 5 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
命令,如果驱动加载正常在最后会有如下输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [ 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
来精简输出:
1 2 3 4 5 [ 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
,正常来说会输出如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 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
来查看驱动的具体信息,正常输出如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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,这个需要确认一下。
1 2 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
文件,增加如下内容:
1 2 3 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
文件增加如下内容:
1 2 3 4 5 ctrl_interface=/var/run/wpa_supplicant network={ ssid="XXXXXX" psk="YYYYYY" }
其中是XXXXXX
你要连的无线网络名称, YYYYYY
是网络的密码。
然后执行如下命令来连接网络:
1 sudo wpa_supplicant -B -iwlan0 /etc/wpa_supplicant/wpa_supplicant.conf
此时,应该还是没有网络,需要使用如下命令来开关一下wlan0
1 2 3 sudo ifdown wlan0 # 关闭wlan0 sudo ifup wlan0 # 启用wlan0 sudo ifconfig # 应该可以看到wlan0已经获取IP了
5.3 开机连接Wi-Fi 如果想要开机时自动连接Wi-Fi,需要编辑/etc/network/interfaces
文件,在5.1中增加的内容之后加入如下内容:
1 2 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等。