基于嵌入式Linux的无线路由器设计——Bridged Adapter网桥模式

2019-07-12 15:13发布

    现在嵌入式设备联网,主要有两种模式:以太网RJ-45 接口直接插网线上网;3G/4G 模块拨号上网。随着无线终端设备的不断普及,手机平板等无线设备对网络的需求也日益增加。本篇文章主要介绍基于嵌入式Linux的无线路由器设计,以桥接的方式访问网络。该方式适合不需要拨号的设备使用,也就是直接插网线就可以联网。基于3G/4G 这种拨号方式的设计将在下篇文章中介绍。     常见的网络连接方式,博客http://www.cnblogs.com/york-hust/archive/2012/03/29/2422911.html 有一个比较好的介绍。     下图是我的嵌入式Linux设备硬件示意图:
    因为采用的是桥接的方式,也就是嵌入式设备不能自己拨号,也不能自己路由。换句话说就是插入嵌入式设备的那个网线,直接插电脑就可以上网。这样的设计主要是将有线的网络转成无线局域网。这里的WiFi 模块,通过USB总线与嵌入式Linux通信。 内核配置:     内核配置的时候 802.1d Ethernet Bridging  和IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP) 需要选上,使内核支持桥接,同时需要WiFi支持AP功能。 WiFi驱动移植   WiFi驱动的移植还是比较简单的,下载源码交叉编译就可以了。我使用的是RTL8188C,直接编译成模块8192cu.ko  这里需要多注意一点,应为在编译模块的时候是需要指定Linux内核代码路径的,当你的内核网络配置发生改变的时候,你的驱动需要重新编译一下,不然可能会出现一些内存溢出的问题。 hostapd 移植:         hostapd 是 Host Access Point 守护进程,能够使得无线网卡切换为master模式,模拟AP(通常可以认为是路由器)功能,也就是我们说的软AP(Soft AP)。它的移植和配置可以参考http://www.cnblogs.com/zhuwenger/archive/2011/03/11/1980294.html
启动嵌入式设备进行设置: 1.加载驱动     insmod 8192cu.ko 2.启动WiFi网络接口     ifconfig wlan0 up                        3.新建一个虚拟的网桥     brctl addbr br0 4.将有线网接口和无线网接口都添加到虚拟网桥上     brctl addif br0 eth0
    brctl addif br0 wlan0
5.清除有线网口和无线网口网络设置(因为所有的数据都是通过虚拟网络接口收发)     ifconfig eth0 0.0.0.0
    ifconfig wlan0 0.0.0.0 6.启动虚拟网络接口     ifconfig br0 up 7.配置虚拟网口IP地址和子网掩码     ifconfig br0 192.168.2.2 netmask 255.255.255.0
8.配置默认网关(重要)     route add default gw 192.168.2.254
9.启动WiFi的AP功能     ./hostapd hostapd.conf -B 在这里有几点需要注意:     a.上面第7点,设置IP和子网掩码的时候,需要跟你路由器(上面示意图路由器A)的IP在同一个网段。默认网关也是需要跟路由器A的设置一样。因为通过桥接的方式连网,连接到br0上的设备,在路由器中都将被识别为一台实际的设备。也就是说路由器A中的其他设备也都能访问到br0中的设备。在这种方式下,连接到WiFi中的设备,它们的IP实际上是由路由器A分配的,所以在这里,我们可以不用设置dhcp来为WiFi动态分配IP     b.在./hostapd hostapd.conf -B 命令中 -B是指在后台运行。WiFi的一些参数是在hostapd.conf中设置的,比如WiFi名字ssid,WiFi信道等。我的hostapd.conf 配置文件如下: ##### hostapd configuration file ############################################## interface=wlan0 ctrl_interface=/var/run/hostapd ssid=licaibiao_debug channel=6 wpa=2 wpa_passphrase=87654321 bridge=br0 ##### Wi-Fi Protected Setup (WPS) ############################################# eap_server=1 # WPS state # 0 = WPS disabled (default) # 1 = WPS enabled, not configured # 2 = WPS enabled, configured wps_state=2 uuid=12345678-9abc-def0-1234-56789abcdef0 # Device Name # User-friendly description of device; up to 32 octets encoded in UTF-8 device_name=RTL8192CU # Manufacturer # The manufacturer of the device (up to 64 ASCII characters) manufacturer=Realtek # Model Name # Model of the device (up to 32 ASCII characters) model_name=RTW_SOFTAP # Model Number # Additional device description (up to 32 ASCII characters) model_number=WLAN_CU # Serial Number # Serial number of the device (up to 32 characters) serial_number=12345 # Primary Device Type # Used format: -- # categ = Category as an integer value # OUI = OUI and type octet as a 4-octet hex-encoded value; 0050F204 for # default WPS OUI # subcateg = OUI-specific Sub Category as an integer value # Examples: # 1-0050F204-1 (Computer / PC) # 1-0050F204-2 (Computer / Server) # 5-0050F204-1 (Storage / NAS) # 6-0050F204-1 (Network Infrastructure / AP) device_type=6-0050F204-1 # OS Version # 4-octet operating system version number (hex string) os_version=01020300 # Config Methods # List of the supported configuration methods config_methods=label display push_button keypad ##### default configuration ####################################### driver=rtl871xdrv beacon_int=100 hw_mode=g ieee80211n=1 wme_enabled=1 ht_capab=[SHORT-GI-20][SHORT-GI-40][HT40+] wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP max_num_sta=8 wpa_group_rekey=86400

本文参考:     usb wifi移植     Linux下搭建网桥及脚本编写     快速理解VirtualBox的四种网络连接方式