1.iwconfig检查是否支持ad hoc模式
iwconfig与ifconfig一样,一个配置网卡命令,一个配置无线网卡命令。
如果出现:iwconfig :wlan0 no wireless extensions,表明内核配置中没有开启相应配置选项。
本人开发板为ZYNQ7000系列,如果单纯PC上Ubuntu系统,该选项是默认开启的,可以查到iwconfig的信息。
解决办法:
petalinux工具重新读取硬件信息,配置内核、文件系统、u-boot、设备树,最后编译生成BOOT.Bin文件。(正常的ARM Linux系统开发流程)
特别的是在配置内核时将下图选项加入进去:“cfg80211 wireless extensions compatibility”,这样就开启了无线网卡扩展功能,即可使用iwconfig命令
重新启动之后,输入iwconfig命令可查到无线网卡的相关信息。
(上述图片是本人开发板选项,也可查看CONFIG_WIRELESS_EXT或者CONFIG_CFG80211_WEXT选项,网上搜索得)
2.主节点搭建自组网
(以下所有命令均在root模式下,否则在每条命令前加“sudo ”即可)
ifconfig wlan0 down(如果出现设备忙可先关掉网卡,本人开发板并没有,无需输入)
iwconfig wlan0 mode "ad-hoc"(ad hoc模式)
iwconfig wlan0 essid "My_AdHoc_Net"(无线网络名称)
iwconfig wlan0 key off(设置密码)
iwconfig wlan0 channel 1(默认为channel 1)(iwlist wlan0 channel查看可用信道)
之后给网卡设置相应的IP:
ifconfig wlan0 192.168.5.10
ifconfig wlan0 up(开启网卡)
iwconfig查看网卡信息,可看到网卡模式为ad hoc模式,essid信息,frequency,cell等
ifconfig 查看网卡信息,可看到网卡IP和MAC地址
简单来讲:
iwconfig wlan0 mode "ad-hoc"(ad hoc模式)
iwconfig wlan0 essid "My_AdHoc_Net"(无线网络名称)
ifconfig wlan0 192.168.5.10
这三条命令即可搭建,从节点同上。
3.从节点接入到该ad hoc网络中
ifconfig wlan0 down
iwconfig wlan0 mode "ad-hoc"(ad hoc模式)
iwconfig wlan0 essid "My_AdHoc_Net"(无线网络名称,需和主节点网络名称相同,essid相同才可通信)
iwconfig wlan0 key off(无密码,或者不输入该命令)
iwconfig wlan0 channel 1(默认为channel 1)(需和主节点相同信道)
之后给网卡设置相应的IP:
ifconfig wlan0 192.168.5.11(需要和主节点在同一网段)
ifconfig wlan0 up(开启网卡)
iwconfig查看网卡信息,可看到网卡模式为ad hoc模式,essid信息,frequency,cell等
ifconfig 查看网卡信息,可看到网卡IP和MAC地址
4.两节点相互ping
一般来讲是可以ping通的,不会存在无法得知对方MAC地址的情况,因为ping的时候也会发送ARP包来寻找相应节点的MAC地址
如果ping不同,没有ARP协议,可以尝试手动输入对方节点的MAC地址,方法如下:
如果ping不通,没有对方的MAC地址,可以输入命令:arp -n查看ARP表信息
如果没有相应的arp信息,则手动建立对方的静态arp地址,命令如下:
arp -s 192.168.5.10 xx:xx:xx:xx:xx:xx
arp -s 192.168.5.11 xx:xx:xx:xx:xx:xx
有了对方的MAC地址,再ping,就可以ping通了
5.脚本文件配置
每次节点开机都要重新手动输入相关命令,对开发来说较为麻烦,可采用以下两种方法:
方法一:将命令写入到/etc/rc.local文件中,开机自运行
方法二:编写.sh脚本,将配置命令写入脚本,再./XX.sh(sudo chmod +x XX.sh修改为可执行权限)或者sh XX.sh即可
6.PC端搭建ad hoc网络
如果只是在PC上Ubuntu系统下搭建,也可采用以下方法:
vi /etc/network/interfaces
写入:
auto wlan0
iface wlan0 inet static
address 192.168.5.10
netmask 255.255.255.0
wireless-channel 1
wireless-essid My_AdHoc_Net
wireless-mode ad-hoc
最后:
sudo /etc/init.d/networking restart即可,或者重启。