树莓派ad-hocnetworking

我想尝试一些与Raspberry Pis的networking项目,我只需要在一对pis之间发送数据包。 作为第一步,我将很高兴能够在ad-hoc模式之间ping到Raspberry Pis。 尽pipe在线查看了几个教程和示例,但我还没有成功完成此任务。

我已经安装了Debian Wheezy操作系统的2个Raspberry Pis。 我正在使用以下USB适配器,我在两个pis上都安装了固件,并通过以pipe理模式将它们连接到路由器来testing它们是否工作:总线001设备004:ID 050d:945a Belkin组件F7D1101 v1基本无线适配器[Realtek RTL8188SU]

以下是关于networking信息的一些打印输出:

/ etc / network / interfaces在每个pi上:

pi1@raspberrypi ~ $ cat /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp auto wlan0 iface wlan0 inet manual address 192.168.2.1 netmask 255.255.255.0 wireless-channel 4 wireless-essid pi-ad-hoc wireless-mode ad-hoc pi2@raspberrypi ~ $ cat /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp auto wlan0 iface wlan0 inet manual address 192.168.2.2 netmask 255.255.255.0 wireless-channel 4 wireless-essid pi-ad-hoc wireless-mode ad-hoc 

ifconfig在每个pi:

 pi1@raspberrypi ~ $ ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr ec:1a:59:46:8e:5a inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:26 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) pi2@raspberrypi ~ $ ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr ec:1a:59:46:59:0a inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:6 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

iwconfig在每个pi:

 pi1@raspberrypi ~ $ iwconfig wlan0 wlan0 IEEE 802.11bg ESSID:"pi-ad-hoc" Nickname:"rtl_wifi" Mode:Ad-Hoc Cell: 02:11:87:FA:4A:02 Bit Rate:54 Mb/s 
Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 pi2@raspberrypi ~ $ iwconfig wlan0 wlan0 IEEE 802.11bg ESSID:"pi-ad-hoc" Nickname:"rtl_wifi" Mode:Ad-Hoc Cell: 02:11:87:C4:F2:01 Bit Rate:54 Mb/s
Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0

在一个pi路线(在其他pi相同):

 pi1@raspberrypi ~ $ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 192.168.2.0 * 255.255.255.0 U 0 0 0 wlan0 

iwlist扫描每个pi:

 pi1@raspberrypi ~ $ sudo iwlist wlan0 scan wlan0 Scan completed : Cell 01 - Address: 02:11:87:FA:4A:02 ESSID:"pi-ad-hoc" Protocol:IEEE 802.11bg Mode:Ad-Hoc Frequency:2.427 GHz (Channel 4) Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality:0 Signal level:0 Noise level:0 Cell 04 - Address: 02:11:87:C4:F2:01 ESSID:"pi-ad-hoc" Protocol:IEEE 802.11bg Mode:Ad-Hoc Frequency:2.427 GHz (Channel 4) Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Signal level=100/100 
pi2@raspberrypi ~ $ sudo iwlist wlan0 scan wlan0 Scan completed : Cell 01 - Address: 02:11:87:C4:F2:01 ESSID:"pi-ad-hoc" Protocol:IEEE 802.11bg Mode:Ad-Hoc Frequency:2.427 GHz (Channel 4) Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Quality:0 Signal level:0 Noise level:0 Cell 02 - Address: 02:11:87:FA:4A:02 ESSID:"pi-ad-hoc" Protocol:IEEE 802.11bg Mode:Ad-Hoc Frequency:2.427 GHz (Channel 4) Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Signal level=100/100

平不起作用,他们之间似乎没有networking工作。 从iwconfig中,你可以看到它们每个都有一个不同的“Cell”地址(与iwlist扫描不一样的Cell),这是伪基站ID,用于定义一个ad-hocnetworking我读过的)。 另外,从iwlist,每个pi都可以看到自己加上另一个pi的ad-hocnetworking。 我假设他们需要select相同的Cell ID进行通信,我不确定如何让他们自动执行此操作。 我试图静态强迫这些都是在每个pi没有改变单元格id,因此没有工作的以下命令相同:

 sudo iwconfig wlan0 ap (some address) 

我也尝试了一个在wpa_supplicantconfiguration中使用ap_scan = 2的解决scheme,这似乎没有帮助。

任何人都知道我做错了什么?

谢谢,安迪。

    经过一番搜索,我发现我使用的Belkin USB适配器显然没有Linux驱动程序的ad-hoc模式支持。 我买了一些其他无线USB适配器,工作很好“Edimax EW-7811Un 150 Mbps无线11n纳米大小的USB适配器”。 他们更便宜,体积更小,而且他们在专门的模式下工作,甚至不需要担心司机。 如果您也想做特别的树莓派项目,我可以将故障排除的细节作为指导。

    这适用于我在/ etc / network / interfaces中:

     auto wlan0 allow-hotplug wlan0 iface wlan0 inet static wireless-essid "MYPINET" wireless-channel 3 wireless-mode ad-hoc wireless-ap 11:5F:02:38:5C:45 address 192.168.10.1 netmask 255.255.255.0 

    essid,channel和ap可以是任何有效的值(在所有Pi上都是一样的)。 确保在同一个子网上分配不同的地址给你的不同的Pi,你应该没问题。 ap定义了上面提到的单元ID。 FWIW我正在使用TP-link WN725N。 它具有RTL8188CUS芯片组,即使dmesg指示Pi将其视为RTL8192,也能正常工作。

    使用RTL8188CUS芯片组的任何适配器都没有成功。 幸运的是,我有一些支持nl80211接口和ad-hoc模式的Ralink RT5370加密狗(来自这个套件 )。

    我的解决方案涉及使用wpa_supplicant ,并配置了2个文件。 确保安装了nl80211驱动程序:

     sudo apt-get install libnl1 

    接下来,在每个Pi上创建名为/etc/wpa_supplicant-adhoc.conf的以下wpa_supplicant配置文件:

     ctrl_interface=DIR=/run/wpa_supplicant GROUP=netdev update_config=1 ap_scan=2 network={ ssid="pihoc_wpa" mode=1 frequency=2462 proto=WPA key_mgmt=WPA-NONE pairwise=NONE group=TKIP psk="password" } 

    在那里你可以选择ssidfrequency ( 在这里查看有效值)和psk 。 确保您是使用该命令的用户组net-dev的一部分

     getent group netdev 

    如果没有,你可以添加自己使用

     sudo usermod -a -G netdev userName 

    接下来,将以下块添加到每个Pi上的/etc/network/interfaces文件中:

     auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 10.10.2.1 netmask 255.255.255.0 pre-up wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant-adhoc.conf 

    每个Pi有一个从10.10.2.开始的不同的address字段10.10.2. 。 另外,如果您的RT5370适配器使用wlan0以外的其他接口(例如wlan1wlan2等),请务必使用该接口名称。

    此时,Pis应该在重新启动后自动加入网络。 通过ping或使用ssh来测试连接,例如,从IP地址为10.10.2.1的代理运行以下命令:

     ssh 10.10.2.2 

    访问IP地址为10.10.2.2的代理。

    这里列出的步骤是从这个Arch Linux wiki文章和Raspberry Pi论坛讨论中进行的 。