Enable 360-wifi2 on BeagleBone Black
来源:互联网 发布:2017年7月进出口数据 编辑:程序博客网 时间:2024/06/06 05:48
Enable 360-wifi2 on BeagleBone Black
简介
360 wifi2使用的芯片是mt7601u, u代表usb接口.这个芯片是mediatek(原名Ralink)公司的,可以从官网获取这颗芯片的信息.
要想在Linux下使用wifi,有两部分工作:内核空间的驱动和用户空间的配置程序.它俩的关系可参考:Linux wext和nl80211接口简介.
从Linux-4.1开始,内核默认已经包含了mt7601u的驱动,我们只需要将至编译成ko即可.
用户空间这块,我们打算使用wpa_supplicant
内核驱动
检查pid:vid
把360 wifi2插在Linux机器上,然后敲命令: lsusb ,你会看到如下结果
root@embest:/lib/firmware#lsusb
Bus 001 Device 002:ID148f:760b Ralink Technology, Corp.
然后查看内核源代码:vi drivers/net/wireless/mediatek/mt7601u/usb.c
staticstruct usb_device_id mt7601u_device_table[] = {
{ USB_DEVICE(0x0b05, 0x17d3) },
{ USB_DEVICE(0x0e8d, 0x760a) },
{ USB_DEVICE(0x0e8d, 0x760b) },
{ USB_DEVICE(0x13d3, 0x3431) },
{ USB_DEVICE(0x13d3, 0x3434) },
{ USB_DEVICE(0x148f, 0x7601) },
{ USB_DEVICE(0x148f, 0x760a) },
{ USB_DEVICE(0x148f,0x760b) },
{ USB_DEVICE(0x148f, 0x760c) },
{ USB_DEVICE(0x148f, 0x760d) },
{ USB_DEVICE(0x2001, 0x3d04) },
{ USB_DEVICE(0x2717, 0x4106) },
{ USB_DEVICE(0x2955, 0x0001) },
{ USB_DEVICE(0x2955, 0x1001) },
{ USB_DEVICE(0x2a5f, 0x1000) },
{ USB_DEVICE(0x7392, 0x7710) },
{ 0, }
};
看看上述结构体里面有没有与你的设备对应的vid:pid,没有的话就添加一项.
检查vid:pid的主要目的是,目前市场上存在很多随身wifi,比如360的,百度(小度)的,小米的.它们用的芯片都一样,唯一可能vid:pid不一样.它们在Linux下的使能方法都可以遵循本文的说明.
配置内核,使之满足下列条件(黑色部分一般默认就是y,红色部分默认是M,将其选成y,选y的过程中需要处理一些依赖关系):
- NETDEVICES [=y] && WLAN [=y] && WL_MEDIATEK [=y] &&MAC80211 [=y] && USB [=y]
- MT7601U [=m]
然后编译内核,编译成功之后,我们会看到drivers/net/wireless/mediatek/mt7601u/mt7601u.ko,把它丢到板子上的任意目录.
为什么不直接把MT7601U选择为y?因为mt7601在初始化的时候,需要request_firmware,如果直接编译为y,内核在启动过程中好像无法正确找到到firmware.因此把它编译成模块,在文件系统启动完毕之后在insmodmt7601u.ko,这个时候就能正确找到firmware了.
用户空间
准备firmware
Download firmware :wget -c 'http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/plain/mt7601u.bin'
Copy to yourboard's fs : cp mt7601u.bin /lib/firmware/
Wpa_supplicant
Install :sudo apt-get install wpasupplicant
Congfire: add the following content to /etc/network/interfaces
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "MERCURY_2BA252"
wpa-psk "xxxxxxxx"
Insmod
sudo insmod /path/to/mt7601u.ko
驱动正确装载, wpa_supplicant开始工作,你就会看到如下信息:
root@embest:/boot/firmware#insmod mt7601u.ko
[ 631.747950] usb 1-1: reset high-speed USBdevice number 2 using musb-hdrc
[ 631.882589] mt7601u 1-1:1.0: ASIC revision:76010001 MAC revision: 76010500
[ 631.897950] mt7601u 1-1:1.0: FirmwareVersion: 0.1.00 Build: 7640 Build time: 201302052146____
[ 632.276051] mt7601u 1-1:1.0: Warning:unsupported EEPROM version 0d
[ 632.282389] mt7601u 1-1:1.0: EEPROM ver:0dfae:00
[ 632.502387] usbcore: registered new interfacedriver mt7601u
root@embest:/boot/firmware#[ 632.859391] IPv6: ADDRCONF(NETDEV_UP):wlan0: link is not ready
[ 635.147873] wlan0: authenticate with38:83:45:2b:a2:52
[ 635.166838] wlan0: send auth to38:83:45:2b:a2:52 (try 1/3)
[ 635.174599] wlan0: authenticated
[ 635.184387] wlan0: associate with38:83:45:2b:a2:52 (try 1/3)
[ 635.195153] wlan0: RX AssocResp from38:83:45:2b:a2:52 (capab=0x431 status=0 aid=5)
[ 635.225435] IPv6: ADDRCONF(NETDEV_CHANGE):wlan0: link becomes ready
[ 635.230293] wlan0: associated
Why so?
为什么直接修改/etc/network/interfaces就行了,一般不是都要敲wpa_supplicant命令,准备wpa_supplicant.conf吗?
因为在debian上,当你install wpasupplicant之后,安装包会在/etc/network/if-up.d/下面创建一个文件,wpasupplicant,它是一个链接:
root@embest:/lib/firmware#ls /etc/network/if-pre-up.d/wpasupplicant -l
lrwxrwxrwx1 root root 32 Apr 28 15:55 /etc/network/if-pre-up.d/wpasupplicant ->../../wpa_supplicant/ifupdown.sh
ifupdown.sh是安装wpasupplicant时系统自动提供的一个文件.
工作逻辑是每次敲ifup -a或者 ifupwlan0时, ifup程序都会针对每一个interface,执行/etc/network/if-pre-up.d/下面的每一个程序.所以ifupdown.sh最终会被执行.
ifupdown.sh在执行的时候,会忽略两类interface:
- 第一类是名称为 lo的interface
- 第二类是interface下面没有"wpa-"开头的参数的 (/etc/wpa_supplicant/ifupdown.sh里面有这样一句话 :no wpa- option defined for IFACE, do nothing)
当一切配置正确后, ifupdown.sh就会用wpa-xxx作为参数,启动wpa_supplicant程序,然后就能上网啦!
- Enable 360-wifi2 on BeagleBone Black
- Running Ubuntu on Beaglebone Black
- boot ubuntu on beaglebone black
- USB Camera on BeagleBone Black
- android on the beaglebone black
- Starterware On Beaglebone Black(一) 环境搭建
- linux on ARM 构建BeagleBone Black系统概述
- Beaglebone black日记
- beaglebone black 安装 vnc
- BeagleBone Black: 网页服务器
- beaglebone black硬件概览
- Beaglebone Black 上手
- Beaglebone black锂电池cape
- BeagleBone Black安装Android
- BeagleBone Black快速入门教程
- Beaglebone Black的启动
- BeagleBone Black Debian安装
- BeagleBone Black开发环境
- DVBlast
- 如何求解问题-现代启发式方法(第8-9章)
- 欧拉工程第16题 2的1000次方的各位之和是多少?
- 对于无法进行MvcMovies的解决方法
- Codeforces Round #375 (Div. 2) ABCDEF题解
- Enable 360-wifi2 on BeagleBone Black
- 解读 RtlGetSystem
- Java中构造方法打印九九乘法表
- 0808:局部代码块、构造代码块、静态代码块、多线程代码块
- HDU ACM 11 2057 A + B Again
- Linux中带缓存的文件复制
- POJ_3320
- XFS文件系统简介(xfs_info观察相关数据)
- 关键字 高亮 Android