【2017年整理】手机无线中继

上传人:豆浆 文档编号:1051880 上传时间:2017-05-26 格式:DOC 页数:3 大小:38.50KB
返回 下载 相关 举报
【2017年整理】手机无线中继_第1页
第1页 / 共3页
【2017年整理】手机无线中继_第2页
第2页 / 共3页
【2017年整理】手机无线中继_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《【2017年整理】手机无线中继》由会员分享,可在线阅读,更多相关《【2017年整理】手机无线中继(3页珍藏版)》请在金锄头文库上搜索。

1、Android 手机做无线中继路由器为 什么要拿手机做路由器?因为我现在每天要带着一个火柴盒大小的路由器(703n)。它提供了一个 f了 q 的无线网络,电脑,手机,平板等设备连接上这个无线 网络之后之后就可以自由上 twitter,看youtube。但是它还不够理想。,我不希望在拥挤的包里再塞一个设备,我还希望在路上只有 3G 网络没有 USB 电源的地方也可以刷刷 twitter。最好的设备莫过于手机了。手 机拿来做 fq 路由器最大的缺陷在于,它不是一个路由器。最开始手机都是处于网络的终端,要么接收3G 信号,要么接收 wifi 信号。后来技术发展之后,手机 开始有了无线发射的功能,这个

2、在 iphone 上叫personal hotspot,在 android 上叫 softap。虽然手机能够发射无线了,但是其还不能承担路由器的功能。手机只要开始发射无线,本来连着的无线网络 (上行无线)就会被断开。这样,手机要么只能做客户端,要么只能做无线热点。只有同时做客户端,又做无线热点才能满足手机做 fq 路由器的要求。有什么办法 呢?最直接的办法是,手机用 3G 上网,然后提供无线热点出来。这个能力基本上现在所有的智能手机都可以做到了。但是 3G 上网多贵啊。手机能不能既连着上行无线,又开启无线热点把*环境共享给其他的设备呢?这是我一直以来的一个梦想。如今梦想成真了。今天不谈 fq

3、这一块,单独来讲怎么把 Android 手机变成无线中继路由器。何 为无线中继?前面的描述并不是非常的精确。最精确的关于无线组网的文章是 OpenWRT 的 一文。我所说的无线中继是文章中的 Routed Client Mode - Masqueraded。就是一个设备同时加入两个子网,用iptables 的 masquerade 功能代理一个子网的设备去访问另外一个子网。 masquerade 一个更常用的名称是 NAT。基本上所有的家用无线路由器都是这个模式的网络。无 线中继路由器与普通的家用无线路由器的组网有一个本质不同。普通的无线路由器上行走的一般是ADSL 的 pppoe,也就是有线

4、网络。下行通过无线热点把有 线网络的 internet 共享给其他设备用。无线中继不同,无线中继的上行是一个无线网络,一般就是家里那个连着猫的无线路由器共享出来的无线热点,而下 行是另外一个无线网络。所以,无线中继路由器的配置要比普通的路由器更加麻烦。刷了OpenWRT 操作系统的家用无线路由器(比如 tplink 703n)可以比较容易的实现无线中继功能,因为OpenWRT 自身设计就支持这样一种组网方式,而且其硬件也设计得非常通用( ar71xx)对于使用方 式限制很少。一般无线硬件厂商把芯片分为三个等级,比如 broadcom 就分为手机 bcm4334(Galaxy S3), 平板 b

5、cm43241(Nexus 10),以及 固定基础设施(Infrastructure)bcm4360(Asus RT-AC66U)。OpenWRT 适用的设备就是属于 Infrastructure 系列的无线芯片。这些路由器的芯片本来就是专业做无线热点的,所以支 持无线中继就不奇怪了。但是手机与平板的无线芯片与这些路由器的无线芯片虽然是同一个厂家的,但是因为使用场合完全不同,支持无线中继就变得非常困难。所以,虽然 Android 手机是一个非常理想的*路由器平台,但是仅仅把 Android 手机变成一个路由器就非常不容易。其间要跨过这么几道坎:1. 手机无线芯片硬件本身是否支持无线中继2. 手

6、机的无线芯片使用的固件(运行在无线芯片上的小操作系统)是否支持无线中继3. 芯片对应的驱动是否支持无线中继4. Android 上相关的启动命令是否在手机上存在5. 与对应无线芯片相适应的配置无线中继的脚本= 用户态 =脚本 VV 命令(iw, p2p-cli 等) VVia Netlink Socket= 内核态 =V 驱动 (比如 bcmdhd)VVia SDIO= 另外一个小机器 =V 固件 (比如 fw_bcm4330.bin)VV 硬件 (比如 bcm4330)第 1、2 、 3 点是你我无法搞定的。如果硬件本身不支持,哪怕是驱动的一个编译参数,普通用户,甚至是开发者都很难搞定。因为

7、 Linux 的内核与驱动之间没有 稳定的 ABI,在一个 linux 上编译好的驱动没有办法拿到另外一个 linux 上去用。只要原厂的无线驱动不直接支持无线中继,那么哪怕我可以找出修改驱 动的方式,要给千千万万种手机,不同的 Linux 内核配置编译合适的无线驱动简直是一个不可想象的事情。何况很多手机的内核都没有办法自己编译,如果要逼 到去无线驱动的份上基本上就属于无解了。无 线芯片的固件是一个平时不会注意的东西。它比无线驱动还要底层。无线驱动只是一个操作木偶的提线人而已,真正干活的其实是无线芯片的固件。这个固件其实一 个完整的操作系统,是一个独立的小机器。一个手机里起码有三个完整的机器,

8、每个都有自己的 CPU 和内存与代码。第一个是显而易见的Android 与 CPU。第二个是基带(baseband)提供语音通话的。第三个是 wifi 芯片与其固件。所以,如果手机无线芯片的固件不支持无线中继,基本上也就无解 了。因为所有的无线芯片的固件都不是开源的(哪怕对应的驱动是开源的)。而且芯片种类非常多,即便是同一个型号同一个批次的无线芯片,对应的固件都可能有 好多种不同的版本(比如有的固件支持 wapi,中国的无线标准)。硬件这一块我不是很懂。也许无线芯片真正到了硬件这个层次都差不多,没有什么支持不支持 无线中继的问题。好 在我们解决不了的问题,Google 可以帮我们解决。Goog

9、le 在 Android 4.0 中引入了对 Wifi Direct 的支持。而 Wifi Direct 就是这帮提供无线硬件设备的厂商搞的标准。于是乎第 1、2 、3 就不成为问题了。手机原厂支持 Android 4.0 的,基本上都满足了 Wifi Direct 的标准了,也就很有可能支持无线中继。这个支持意味着:驱动支持,固件支持,硬件支持。我们需要做的,只是把启动的命令与脚本拷贝过来,执行 一下就可以了。可以理解为挖掘了一个 Android 手机本来就支持,只是 Android 没有提供界面配置的一个“隐藏功能” 。Wifi Direct 为什么可以解决无线中继的问题?Wifi Dir

10、ect 其实就是 wifi 技术的一个用户友好版本的一个封装。其实质就是在你离开无线网络环境的时候,可以用手机临时启动一个无线网络,然后你周围的 朋友可以用手机加入你这个临时组建的无线网络,然后双方就可以干传大文件之类的事情了。其相对于蓝牙来说,带宽更大。相对于无线的 ad-hoc 组网方式更 安全。除此之外,wifi direct 还允许一个设备同时提供无线热点与做无线客户端。也就是可以在手机自身的无线网不断掉的情况下,通过 wifi direct 与其他设备传文件。但是这个特性有一个很严重的硬件限制,手机连接着的无线,与启动的无线热点必须是在同一个 channel 的(无线电频率相 同)。

11、这导致在实际使用过程中,两个设备都连接着各自的无线网(channel 不同)的时候无法通过 wifi direct 传文件。这也就导致了很多 wifi direct 的实现干脆在启动wifi direct 模式的时候先把无线网断了。不过 Google 与这些硬件厂商在设计的时候并不是这么想的。理想的情况是将来的硬件发展到可以支持 multi- channel concurrency。就现状而言,原厂支持 wifi direct的手机,都可以拿来做无线中继。虽 然 wifi direct 可以用来支持无线中继。但并不代表无线中继的唯一实现方式就是通过 wifi direct 的命令。家用无线路由

12、器刷了 OpenWRT 之后也可以做无线中继。我们也没有看见这些路由器支持 wifi direct啊。那是因为这些路由器的无线芯片支持 linux 的 mac80211,简单来说就是用软件来管理无线芯片,无线芯片不用管太多,软件说发什么 frame 就发什么 frame。那么手机上的无线芯片有支持 mac80211 的吗?还真有,那就是 wl12xx 系列(德州仪器 TI 出品)。比如 wl1271, 这个芯片可比 Android 4 早很多了。当年红极一时的摩托罗拉里程碑用的就是这个芯片。但是遗憾的是,芯片与固件支持是不够的,还需要给力的驱动。wl12xx 的 mac80211 驱动是比较晚

13、的事情了,早期使用的驱动 tiwlan_drv 并不支持mac80211。所以除非有人愿意把新的 wl12xx 驱动 backport 给早期的 手机,比如摩托罗拉里程碑,否则这些老手机是没法做无线中继的。不过新出的使用 wl12xx 系列芯片的设备都使用的是新的 wl12xx 驱动,比如说 kindle fire。这些新设备不但支持无线中继无压力,甚至还可能可以用来做无线破解等更有意思的事情。OK, 我们现在已经了解到了大概的一个前提条件。要么手机原厂支持 wifi direct,要么手机使用的无线网卡驱动是 mac80211 的。那么究竟这个配置过程是怎样的呢?这个就要分不同平台来说了。主

14、流的手机无线芯片有四个 系列(这个列表通过人工爬虫爬 CM 的 github 源代码库 博通系(bcm):bcm4325, bcm4329, 【bcm4330, bcm4334, bcm43214】。 德仪系(wl):【wl1271 等,统称 wl12xx】 山寨系(mtk):【mt6620,mt6628】 高通系: wcn1312, wcn1314, ar6002, ar6003, 【wcn3660,未测试】这四个系列中,前三个我都亲测可用的,高通系只有最新的平台(比如 nexus 4 用的那个)才有可能支持无线中继,因为设备还比较贵所以我没有买来测。在【】中的芯片是测试可用的,【】之外是希

15、望比较渺茫的。bcm 与 mtk 的无线中继启动方式都是用 wifi direct 的命令。而 wl 的无线中继用的是 mac80211 的方法。高通系的启动方式我猜可能会与 bcm4330 的非常类似。无论是用哪种方式,过程原理都是类似的:1. 无论用什么手段,搞出两个 wifi interface,比如说默认都有一个wlan0 的网卡,再弄一个 ap0 之类的出来2. 保持 wlan0 的无线连接不动,想办法在新添加的 wifi interface 上启动一个无线热点3. 给 ap0 配置本机的 IP 地址4. 启动 DHCP 服务器,监听 ap0,给连进来客户端分配 IP 地址5. 设置本机的 iptables 规则(masquerade),让通过 ap0 连进来的客户端可以从 wlan0 走出去上网目 前的现状是,MTK 的手机在我心目中已经把 703n 这样的迷你路由器 pk 下去了。比如说我现在用的联想 P770 手机,不过一千出头的售价,4.5 的屏幕, 有 3500 毫安时的电池,双卡双待,这本来已经够性价比的了。现在再加上一个无线中继当路由器,将来软件支持上来了,还可以做*路由器。拿着这样的一 个手机怎么有点美军单兵武器的感觉。最后,好吧我承认我是联想的工作人员,本文其实是一篇卖手机的软文。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号