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:

  • 第一类是名称为 lointerface
  • 第二类是interface下面没有"wpa-"开头的参数的 (/etc/wpa_supplicant/ifupdown.sh里面有这样一句话 :no wpa- option defined for IFACE, do nothing)

 

当一切配置正确后, ifupdown.sh就会用wpa-xxx作为参数,启动wpa_supplicant程序,然后就能上网啦!


0 0
原创粉丝点击