在Linux下使用“360随身WiFi 2”

某人说“360随身WiFi”价格还算良心,我也认同。昨天无意中看到2代开售,就随手撸了一个。当然,为了免邮费,不得不买了点别的东西凑单,于是还买了本价格是这个“360随身WiFi 2”近两倍《C语言点滴》回来看看。

到货,插到电脑上,Linux下没反应。Ralink的无线网卡系统不自带驱动我不惊呆,于是lsusb看了下。

Bus 001 Device 006: ID 148f:760b Ralink Technology, Corp.

好嘛,二代换芯片了,原来是RT5370的,现在换成不认识的了。不怕,把148f:760b放狗搜一下。不过搜完了就怕了,因为结果是0个。

打算先用Windows确认一下设备是好的,结果装了360官网的驱动后发现设备完全识别不出来……这可真是个大乌龙。到360官网的歪粉交流论坛上看看,有类似问题的看来不是个案。换了论坛上公布的新版本的驱动后Windows下工作正常。(截止我写这篇文章的时候,官网上的驱动已经更新成新的了,文件大小为10797000字节,论坛上讨论说设备识别不出来的那些贴子貌似也都直接消失了。)

继续回到Linux下折腾,可是不知道芯片是什么还是为难。从Ralink网站(现在叫Mediatek)上瞎找了几个Linux驱动,里面也没有符合760b这个idProduct的,抓瞎。

用百度搜了一下148f:760b,结果找到了360论坛上一篇新觧出炉的贴子,确认了芯片是MT7601。

剩下的事就简单了,在Ralink网站下载MT7601的Linux驱动,修改common/rtusb_dev_id.c文件,在

{USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */

下面加一行

{USB_DEVICE(0x148f,0x760b)}, /* 360 Wifi */

按照README_STA_usb中的说明make和make install。然后modprobe一下mt7601Usta.ko这个内核模块,后面的事就妥妥的了。

还有个遗留问题,连不上WPA2 Enterprise的无线网络,暂时不管了,我对这个需求不强烈。

啥?这文章只说了怎么驱动这个网卡没说怎么在Linux实现AP的功能?哦,我本来也没打算用它在Linux下做AP来着。有兴趣的话可以试试hostapd/dnsmasq/iptables这老三样吧,我不知道能不能行,如果哪位朋友弄成了麻烦汇报一下,我很想学习学习,多谢了~

2013-10-12更新:MT7601的Linux驱动中似乎没有实现nl80211的接口,所以hostapd没法直接用。不知道还有什么办法能实现AP的功能,如有朋友知道,希望能不吝指教。

2014-08-12更新:留言区中的轩辕志瑜同学找到了一个支持AP模式的驱动,详细的信息请查看相关的文章:http://blog.csdn.net/sumang_87/article/details/38168877,github上的源代码:https://github.com/eywalink/mt7601u。感谢他的分享。

2015-03-12更新:如果是在Raspberry Pi上尝试编译驱动并且遇到困难,请参考《为Raspberry Pi 2编译内核模块

用Raspberry Pi打造真正的“豆瓣FM”

想用床头的收音机收听豆瓣FM吗?如果你有一台Raspberry Pi,这个愿望就可以满足。

Raspberry Pi,中文名树莓派,是一台廉价的单板机,ARM架构,可以运行Linux操作系统,它由英国的树莓派基金会开发,目的是以低价硬件及自由软件促进校园中的计算机科学教育。是的,它设计初衷其实是给小朋友们学电脑用的,不是给你们这些Geek来折腾玩的。

用Raspberry Pi搭建一个豆瓣FM的调频广播台其实并不是一件很困难的事情,为实现这个目标,要解决的两个问题是:

  • 从豆瓣FM网站上下载MP3音乐码流并解码
  • 把音频信号调制成调频信号发射出去

造轮子的事情不要自己做,这两个问题其实已经都解决了:Github上的fmd项目实现了一个通过本地声卡播放豆瓣FM的服务器;这篇文章则介绍了如何写程序对音频信号进行调制并控制Raspberry Pi的GPIO端口把信号发送出去。所以剩下的事就是把它们组合起来就可以了。

组合代码这种脏活累活我也给大家做好了,可以从Github上获取。嗯,这份代码目前的质量是It just works,各位make一下就好,没事就不要vim它了……

git clone git://github.com/lifanxi/fmd.git

代码下载后在Raspberry Pi上可以直接make编译,如果缺少依赖,可能需要安装libcurl4-openssl-dev, libjson0-dev, libmpg123-dev, libao-dev这些依赖包(我用的是Raspbian发行版)。

fmd的使用方法可以参考Github上的说明,我所实现的扩展就是在fmd.conf配置文件中可以把driver配成”pifm”,然后把device配成88MHz~108MHz之间的某个指定的调频发射频率值(这是大多数国家调频收音机所支持的频率范围,如果你有别的无线电接收设备,这个值也可以设成是<250的任意值)来实现FM广播的发射。当driver配成pifm而不是默认的alsa时,fmd就会工作在FM广播模式。

注意,由于FM发射的代码需要直接mmap /dev/mem设备,所以把driver配成pifm让fmd工作在FM广播模式时,需要以root权限来执行fmd。以root权限运行fmd时,注意HOME目录可能会变成/root,所以相关配置文件也得改放到/root/.fmd中。

fmd运行起来后,按照文档的说明,可以telnet到127.0.0.1:10098上或用fmc执行play命令开始广播,把收音机(带收音功能的手机当然也可以)调到device参数所指定的频率上就可以收听了。

如果你的收音机离你的Raspberry Pi太远,收音效果不好,可以在Raspberry Pi主板上的GPIO 4口上插一根20cm左右长的杜邦线做天线,广播范围和信号强度就会大大提高了。

Raspberry Pi正在102.4 MHz上播放豆瓣FM的音乐

Raspberry Pi正在102.4 MHz上播放豆瓣FM的音乐

目前这个豆瓣FM广播台还有两个大问题需要解决:

  • 立体声调频广播:现在实现的版本是单声道的,理论上应该也可以把音频调制成立体声的。这需要一些我所不具备的调频广播的知识,待我有空再钻研钻研。
  • CPU占用率:现在的版本在做调制和发射时,对CPU的占用率比较高。如果Raspberry Pi正在忙于做别的事情的话,你可能会听到一些杂音或者是唱机/磁带机没电了的时候的音响效果。

其实吧,这样收听豆瓣FM可真是多此一举。直接把耳机插在Raspberry的耳机插孔用fmd播放不就完事了么……天行健,君子以折腾不息!