Hostapd模块结构图
4.2 wsc
wsc是Intel给出的实现WiFi的WPS规范的一个参考实现代码。本项目中目前还没有使用,暂不分析。
5 功能分析
5.1 无线模块启动脚本
/etc/rc.d/rcS
? 调用/etc/rc.d/rc.network包含了/etc/ath/apcfg,设置了如下宏
? AP_IPADDR=192.168.1.2
? AP_NETMASK=255.255.255.0 ? WAN_MODE=bridged
? WAN_IPADDR=192.168.2.1 ? WLAN_ON_BOOT=n
? AP_STARTMODE=standard ? AP_PRIMARY_CH=6 ? AP_SECONDARY_CH=-1
? AP_IFNUM=0:RF:$AP_PRIMARY_CH:$AP_SECONDARY_CH ? AP_IFNUM_2=0::$AP_PRIMARY_CH:$AP_SECONDARY_CH ? AP_IFNUM_3=0::$AP_PRIMARY_CH:$AP_SECONDARY_CH
? AP_IFNUM_4=0::$AP_PRIMARY_CH:$AP_SECONDARY_CH ? AP_MODE=ap
? TXQUEUELEN=1000 ? SHORTGI=1 ? AMPDU=1
? AMPDULIMIT=50000 ? RATECTL=auto
? MANRATE=0x8c8c8c8c ? MANRETRIES=0x04040404 ? RX_CHAINMASK=7 ? TX_CHAINMASK=5 ? AP_SSID=Atheros_Xspan ? ATH_use_eeprom=1
? 由于apcfg脚本中定义WLAN_ON_BOOT=n,因此没有执行/etc/ath/apup,后面
又单独调用makeVAP脚本来启动AP,这点比较奇怪。 ? /etc/ath/makeVAP ap Atheros_AP71 0:RF:8:-1 ? ifconfig ath0 up ? brctl addif br0 ath0 /etc/ath/makeVAP
? 调用格式makeVAP
?
果不设置无线模块物理参数,可以简单的写RF ?
? 检查是否有已经装入了ath_pci*模块,如果没有则调用/etc/ /rc.d/rc.wlan up ? APNAME=`wlanconfig ath create wlandev wifi$IFNUM wlanmode
${MODE}`
? APMODE=\
? 如果模式中包含wds,则iwpriv ${APNAME} wds 1 ? 禁用后台扫描,iwpriv ${APNAME} bgscan 0 ? 设置调试模式掩码:
? DEBUGMODE=0x100
? echo $DEBUGMODE > /proc/sys/net/${APNAME}/debug ? 设置其他无线模块物理参数
/etc/rc.d/rc.wlan
? 使用了如下环境变量
DFS_domainoverride 0=Unitialized (default),
1=FCC Domain (FCC3, US) 2=ETSI Domain (Europe) 3=Japan Domain
DFS_usenol 1=Use channel NOL (default)
ATH_countrycode Set Country Code (Override the use of channel NOL
Override default country code (-1 auto, default)
Use country code 0x1ff for demo channels ATH_outdoor 0=Disable (default) 1=Enable
ATH_xchanmode 0=Disable Extended Channels
1=Enable Extended Channels (default) ATH_use_eeprom 0=Use Flash for Calibration Data (default) 1=Use EEPROM for Calibratin Data ATH_force_11a_ch 1=Force AP to use 11na channels only 0=Use all channels
ATH_debug Load time debug flags, 0x00000000 default
? DFS_ARGS=” domainoverride = $DFS_domainoverride usenol =
$DFS_usenol”
? PCI_ARGS=” countrycode=$ATH_countrycode outdoor=$ATH_outdoor
xchanmode=$ATH_xchanmode use_eeprom = $ATH_use_eeprom ath_debug = $ATH_debug”
? insmod $MODULE_PATH/ath_dfs.ko $DFS_ARGS ? insmod $MODULE_PATH/ath_hal.ko ? insmod $MODULE_PATH/wlan.ko
? insmod $MODULE_PATH/ath_rate_atheros.ko ? insmod $MODULE_PATH/ath_pci.ko $PCI_ARGS ? insmod $MODULE_PATH/wlan_xauth.ko ? insmod $MODULE_PATH/wlan_ccmp.ko ? insmod $MODULE_PATH/wlan_tkip.ko ? insmod $MODULE_PATH/wlan_wep.ko ? insmod $MODULE_PATH/wlan_acl.ko ? insmod $MODULE_PATH/ath_pktlog.ko
5.2 VAP功能
Atheros的无线驱动最多支持4个虚拟AP(Virtual AP, VAP),在系统中动态可以创建最多4个虚拟网络设备,虚拟网络设备与物理网络设备的关系如下图所示。
ath0 ath1 ath2 ath3 MAC层
wifi0 物理驱动层
虚拟AP的创建和注销由工具wlanconfig完成。
5.2.1 创建一个VAP
wlanconfig
wlanconfig SIOC80211IFCREATE类型ioctl() 用户层 ath_ioctl() 内核层 ieee80211_ioctl_create_vap() 分配资源 ath_vap_create () alloc_etherdev() ieee80211_vap_setup () ieee80211_vap_attach () register_netdevice() 5.2.2 注销一个VAP
wlanconfig
wlanconfig SIOC80211IFDESTROY类型ioctl() 用户层 ieee80211_ioctl() 内核层 ath_vap_delete () ieee80211_vap_detach () unregister_netdevice() 5.3 设备初始化
插入ath_pci.ko模块时,内核调用该模块的初始化函数init_ath_pci(),该函数调用内核pci_register_driver()注册所支持PCI设备ID和操作函数集。内核比对PCI Scan时找到的PCI设备ID,如果发现有该驱动程序支持的PCI设备ID则调用该驱动函数的probe()函数。对应的是ath_pci_probe(),它完成物理设备的创建和初始化。流程如下图所示。
使能PCI设备 读入PCI配置参数 分配并初始化 struct net_dev,设备名:wifi0 调用ath_attach(),初始化HAL、设置操作函数集、初始化队列……
5.4 数据接收
为了避免过多占用CPU中断时间,Atheros的数据接收也采用了延后处理的机制,中断处理函数的根据硬件中断的原因启动相应的工作队列进行处理,然后中断直接返回,实际的处理工作由工作队列来完成。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Atherose pb42无线AP简要分析 (2)(3)在线全文阅读。
相关推荐: