wifi热点移植总结

不同的wifi芯片需要不同的驱动支持。请参考external/wpa_supplicant/README
1:例如通用的Broadcom wl.0 driver,它用于,Broadcom IEEE 802.11a/g cards,同时支持wifi热点和无线路由,即service端和client端。可以这样说,wifi热点和无线wifi是互斥的,两者不能共存。

关于Broadcom wl.0 driver,他不需要通过hostap的方式实现热点与driver的通信。而是直接在system/netd/SoftapController.cpp中与驱动通信。而system/netd/SoftapController.cpp与framework的通信则是通过socket。framework中NetworkManagementService.java中的startAccessPoint方法调用doCommand方法像SoftapController通过socket发送请求,并在NativeDaemonConnector.java中调用listenToSocket方法监听上报的事件,并向事件广播给app层。

之前在NetworkManagementService.java中的startAccessPoint中通过向下发送fwreload的请求来关闭wifi,打开wifi热点,但这样做会引起后期多次切换无线wifi和wifi热点的过程,打开无线wifi和wifi热点出错的Bug。之后改进的方法是在hardware/wifi/wifi.c中显式的load firmware。


2:另外madwifi driver 基于Atheros chip,这个Atheros在wifi.c中随处可见,但没用到。


3:ATMEL AT76C5XXx driver 用于USB和PCMCIA


4:其实移植android2.3。4的源码时,如果需要增加wifi热点功能,只需把softap的interface改成wl0.1就ok了。除非修改Bug,否则不需要大改,因为android2.2之后的版本本身就支持wifi热点。


5:另外如果出现以下Bug:”保存添加的网络后重新开机,不显示添加的网络“或者“设备重启后WIFI不会自动连接上次保存好的ap”时,则需要考虑是否wpa_supplicant.conf有可写的权限。可考虑修改init.rc。将service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant -Dwext -ieth0 -c/system/etc/wifi/wpa_supplicant.conf 改成
service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant -Dwext -ieth0 -c/data/misc/wifi/wpa_supplicant.conf


6:当wifi启用静态IP,并且设置的静态IP,网关,网络掩码都正确时,即使连接的ap本身不能上网,也不影响启用静态IP后能正常访问网络。

你可能感兴趣的:(wifi)