Android下同时使用WIFI与3G网络(二)

来源:互联网 发布:nginx配置server name 编辑:程序博客网 时间:2024/05/20 22:37

为了同时使用WiFi和3G网络,就要手动绕过Android的Framework层去打开WiFi功能,包括:

1、加载驱动

2、连接AP

3、使用dhcp服务获取ip地址

4、更改路由表 

这4步在上一篇博文http://blog.csdn.net/roger__wong/article/details/8603275中已经详细说明了。


在三星Galaxy S GT-I8150上尝试加载驱动结果失败了,于是我就意识到对于不同手机的加载方法应该是不同的。

所以就写这么一篇文章说明不同手机的WiFi驱动的加载方法。


对于最简单的情况,如我的小米2,找到WiFi模块(/system/lib/modules/wlan.ko),使用insmod加载即可。

在三星手机上,模块名变成了dhd.ko,加载后使用netcfg无法看到WiFi网络接口,使用dmesg打印发现错误日志如下:

<4>[23138.975414] dhd_bus_start: dhdsdio_probe_download failed. firmware =  nvram =

貌似firmware和nvram为空。

这两个值在很多机型上都记录在wifi.conf(/system/etc/wifi/wifi.conf)中,全部内容如下:

FIRMWARE_LOADER=wlan_loaderDRIVER_PROP_NAME=wlan.driver.statusSUPPLICANT_NAME=wpa_supplicantSUPP_PROP_NAME=init.svc.wpa_supplicantMODULE_FILE=/proc/modulesIFACE_DIR=/data/misc/wifiDRIVER_MODULE_NAME=dhdDRIVER_MODULE_TAG=dhdFIRMWARE_LOADER=SUPP_CONFIG_TEMPLATE=/system/etc/wifi/wpa_supplicant.confSUPP_CONFIG_FILE=/data/misc/wifi/wpa_supplicant.confDRIVER_MODULE_PATH=/etc/wifi/dhd.koMFGDRV_MODULE_ARG=firmware_path=/system/etc/wifi/bcm4329_mfg.bin nvram_path=/system/etc/wifi/nvram_mfg.txt iface_name=eth0DRV_AP_MODULE_ARG=firmware_path=/system/etc/wifi/bcm4329_aps.bin nvram_path=/system/etc/wifi/nvram_net.txt iface_name=eth0DRIVER_MODULE_ARG=firmware_path=/system/etc/wifi/bcm4329_sta.bin nvram_path=/system/etc/wifi/nvram_net.txt iface_name=eth0DRIVER_APS_FIRMWARE_NAME=bcm4329_aps.binDRIVER_STA_FIRMWARE_NAME=bcm4329_sta.binINTERFACENAME=eth0WAPI_SUPPORT=trueSUPP_CONF_FILEPATH=/data/misc/wifi/SUPP_WAPI_AS_CERT_FILE_PATH=/sdcard/external_sd/cert/SUPP_WAPI_USER_CERT_FILE_PATH=/sdcard/external_sd/cert/SUPPLICANT_STATUS=wlan.supplicant.status
把其中的DRIVER_MOdULE_ARG里的内容加到insmod的参数里,即(注意双引号):

insmod /system/lib/modules/dhd.ko "firmware_path=/system/etc/wifi/bcm4329_sta.bin nvram_path=/system/etc/wifi/nvram_net.txt iface_name=eth0"

使用这行命令来加载驱动就没有问题了。


不同的手机加载的命令会略微有差异,幸好有软件已经帮我们总结了很多手机的WiFi驱动加载命令,下面是一款wifitether软件的部分源码,其中源码里的wifiLoadCmd的值就是WiFi驱动的加载命令。


package com.googlecode.android.wifi.tether.system;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.zip.GZIPInputStream;import android.annotation.SuppressLint;import android.util.Log;@SuppressLint({ "NewApi", "NewApi" })public class Configuration {public static final String MSG_TAG = "TETHER -> Configuration";public static final int    SDK_EC             = 5;// SDK Minimum Eclairpublic static final int    SDK_FR             = 7;// SDK Minimum Froyopublic static final int    SDK_GB             = 9;// SDK Minimum Gingerbreadpublic static final int    SDK_ICS            = 14;// SDK Minimum Ice Cream Sandwichpublic static final int    SDK_JB             = 16;// SDK Minimum JellyBeanpublic static final String manufacturer = android.os.Build.MANUFACTURER;public static final String DEVICE_GENERIC    = "generic";// Generic Non-ICS Profilepublic static final String DEVICE_GENERIC_ICS = "generic_ics";// Generic ICS Profilepublic static final String DEVICE_GENERIC_ICS_WLAN1 = "generic_ics_wlan1";// Generic ICS Profilepublic static final String DEVICE_BLADE       = "blade";// ZTE Bladepublic static final String DEVICE_PASSION     = "passion";// Google NexusOnepublic static final String DEVICE_SPHD700     = "SPH-D700";// Samsung Epic 4Gpublic static final String DEVICE_SCHI500     = "SCH-I500";// Samsung Fascinatepublic static final String DEVICE_SCHI510     = "SCH-I510";// Samsung Droid Chargepublic static final String DEVICE_SGHI897     = "SGH-I897";// Samsung Captivatepublic static final String DEVICE_SCHR910     = "SCH-R910";// Samsung Galaxy Indulgepublic static final String DEVICE_CRESPO      = "crespo";// Google Nexus Spublic static final String DEVICE_CRESPO4G    = "crespo4g";// Google Nexus S 4Gpublic static final String DEVICE_MAGURO      = "maguro";// Samsung Galaxy Nexus (GSM)public static final String DEVICE_TORO        = "toro";// Samsung Galaxy Nexus (CDMA/LTE)public static final String DEVICE_GTI9000     = "GT-I9000";// Samsung Galaxy Spublic static final String DEVICE_GTI9100     = "GT-I9100";// Samsung Galaxy S2public static final String DEVICE_SPHD710     = "SPH-D710";// Samsung/Sprint Epic Touch 4Gpublic static final String DEVICE_GTI9300     = "GT-I9300";// Samsung Galaxy S3public static final String DEVICE_D2SPR       = "d2spr";// Samsung Galaxy S3 (Sprint)public static final String DEVICE_D2USC       = "d2usc";// Samsung Galaxy S3 (USC)public static final String DEVICE_D2TMO       = "d2tmo";// Samsung Galaxy S3 (TMO)public static final String DEVICE_D2ATT       = "d2att";// Samsung Galaxy S3 (AT&T)public static final String DEVICE_D2VZW       = "d2vzw";// Samsung Galaxy S3 (Verizon)public static final String DEVICE_T0LTESPR    = "t0ltespr";// Sprint Note 2public static final String DEVICE_GalaxyS4= "jfltexx";//Samsung Galaxy S4public static final String DEVICE_JFLTEATT = "jflteatt";//Samsung Galaxy S4 (AT&T)public static final String DEVICE_JFLTETMO= "jfltetmo";//Samsung Galaxy S4 (TMO) public static final String DEVICE_JFLTESPR = "jfltespr"; // Samsung Galaxy S4 (SPR)public static final String DEVICE_JFLTEVZW= "jfltevzw";//Samsung Galaxy S4 (VZW)public static final String DEVICE_JFLTECAN= "jfltecan";//Samsung Galaxy S4 (CAN)public static final String DEVICE_JFLTEUSC= "jflteusc";//Samsung Galaxy S4 (USC)public static final String DEVICE_SUPERSONIC  = "supersonic";// HTC Evo 4G (Supersonic)public static final String DEVICE_SHOOTER     = "shooter";// HTC EVO 3Dpublic static final String DEVICE_SHOOTERU    = "shooteru";// HTC EVO 3D intpublic static final String DEVICE_PYRAMID     = "pyramid";// public static final String DEVICE_VIGOR       = "vigor";// HTC Rezound / Vigor (LTE/CDMA/GSM)public static final String DEVICE_THUNDERC    = "thunderc";// LG Optimus Spublic static final String DEVICE_BRAVO       = "bravo";// HTC Desire (GSM)public static final String DEVICE_BRAVOC      = "bravoc";// HTC Desire (CDMA)public static final String DEVICE_MECHA       = "mecha";// HTC Thunderbolt / Mecha (LTE/CDMA)public static final String DEVICE_SAPPHIRE    = "sapphire";// HTC Magicpublic static final String DEVICE_DREAM       = "dream";// HTC Dreampublic static final String DEVICE_HERO        = "hero";// HTC Hero (GSM)public static final String DEVICE_HEROC       = "heroc";// HTC Hero (CDMA)/* TI WiLink hostapd Devices */// Motorola OMAP3 WiLink6 Devicespublic static final String DEVICE_DROID2WE  = "cdma_droid2we";// Motorola Droid2 Global (DualBand)public static final String DEVICE_UMTSJORDAN  = "umts_jordan";// Motorola Defy (GSM)public static final String DEVICE_CDMASHOLES  = "cdma_sholes";// Motorola Droid (CDMA)public static final String DEVICE_UMTSSHOLES  = "umts_sholes";// Motorola Milestone (GSM)public static final String DEVICE_CDMASHADOW  = "cdma_shadow";// Motorola DroidX (CDMA)public static final String DEVICE_UMTSSHADOW  = "umts_shadow";// Motorola MilestoneX (GSM)public static final String DEVICE_CDMADROID2  = "cdma_droid2";// Motorola Droid2 (CDMA)public static final String DEVICE_UMTSDROID2  = "umts_droid2";// Motorola Milestone2 (GSM)public static final String DEVICE_CDMAVENUS2  = "cdma_venus2";// Motorola Droid Pro (CDMA)public static final String DEVICE_UMTSVENUS2  = "umts_venus2";// Motorola Milestone Plus (GSM)// Motorola OMAP4 WiLink7 Devicespublic static final String DEVICE_EDISON      = "edison";// Motorola Atrix 2public static final String DEVICE_CDMATARGA   = "cdma_targa";// Motorola Droid Bionicpublic static final String DEVICE_CDMASOLANA  = "cdma_solana";// Motorola Droid 3public static final String DEVICE_UMTSSOLANA  = "umts_solana";// Motorola Milestone 3public static final String DEVICE_CDMASPYDER  = "cdma_spyder";// Motorola Droid RAZR (CDMA/LTE)public static final String DEVICE_UMTSSPYDER  = "umts_spyder";// Motorola Droid RAZR (GSM)// LG OMAP3 WiLink6 Devicespublic static final String DEVICE_LS855       = "ls855";// LG Marqueepublic static final String DEVICE_LU3000      = "ls3000";// LG Optimus Machpublic static final String DEVICE_P970        = "p970";// LG Optimus Blackpublic static final String DEVICE_P970G       = "p970g";// LG Optimus Black// LG OMAP4 WiLink7 Devicespublic static final String DEVICE_P920        = "p920";// LG Optimus 3Dpublic static final String DEVICE_P925        = "p925";// LG Thrill (AT&T)public static final String DEVICE_P925G       = "p925g";// LG Thrill (Rogers Canada)// Samsung OMAP3 WiLink6 Devicespublic static final String DEVICE_GALAXYSL    = "galaxysl";// Samsung Galaxy SL// Generic WiLink7public static final String DEVICE_RUBY        = "ruby";// HTC Amazeprivate String device                  = DEVICE_GENERIC;private int sdk                        = 0;private boolean wextSupported          = false;private boolean hostapdSupported       = false;private boolean softapSupported        = false;private boolean softapSamsungSupported = false;private boolean netdSupported          = false;private boolean netdNdcSupported       = false;private boolean tiadhocSupported       = false;private boolean autoInternalNetSetup   = false;private boolean frameworkTetherSupported = true;// wext-valuesprivate String wextInterface           = "";// hostapd-valuesprivate String hostapdPath             = "";private String hostapdKernelModulePath = "";private String hostapdKernelModuleName = "";private String hostapdInterface        = "";private String hostapdTemplate         = "";private String hostapdLoaderCmd        = "";// netd-valuesprivate String netdInterface           = "";// softap-valuesprivate String softapInterface         = "";private String softapFirmwarePath      = "";private String tiadhocInterface        = "";// Encryption-type for netd and softapprivate String encryptionIdentifier    = "wep";private String opennetworkIdentifier   = "open";// Setup-method which should be used if "auto" is selectedprivate String autoSetupMethod         = "wext";private boolean genericSetupSection    = true;private boolean wifiFinalDriverLoad = false;//TODO: hack driver reload outside tetherprivate static String wifiLoadCmd = "none";private static String wifiUnloadCmd = "none";private static String wifiFinalLoadCmd = "none";public Configuration() {this.device = android.os.Build.DEVICE; //NativeTask.getProp("ro.product.device");this.sdk = android.os.Build.VERSION.SDK_INT; //Integer.parseInt(NativeTask.getProp("ro.build.version.sdk"));Log.d(MSG_TAG, "Device [ Model / SDK ] *Auto_Detected*: " + this.device + " / " + this.sdk);this.setupDevice();}@SuppressLint("NewApi")public Configuration(String device) {this.device = device;this.sdk = android.os.Build.VERSION.SDK_INT; //Integer.parseInt(NativeTask.getProp("ro.build.version.sdk"));Log.d(MSG_TAG, "Device [ Model / SDK ] *User_Selected*: " + this.device + " / " + this.sdk);this.setupDevice();}private void setupDevice() {// ZTE Bladeif (device.equals(DEVICE_BLADE)) {this.setupBlade();}// Nexus Oneelse if (device.equals(DEVICE_PASSION)) {this.setupSoftapGoogle();}// Samsung Galaxy Selse if (device.equals(DEVICE_GTI9000)) {this.setupGTI9000();}// Samsung Galaxy S2/Epic Touchelse if (device.equals(DEVICE_GTI9100) || device.equals(DEVICE_SPHD710)) {if (android.os.Build.VERSION.SDK_INT >= SDK_ICS)  // 14 is ICSthis.setupGenericNetdWlan0();else this.setupGTI9100();}// Samsung Galaxy Selse if (device.equals(DEVICE_CRESPO) || device.equals(DEVICE_CRESPO4G)) {this.setupGenericNetdWlan0();}// Samsung Galaxy Nexuselse if (device.equals(DEVICE_MAGURO) || device.equals(DEVICE_TORO)) {this.setupGenericNetdWlan0();}// Samsung Galaxy S3 ish deviceselse if (device.equals(DEVICE_GTI9300) || device.equals(DEVICE_D2SPR) || device.equals(DEVICE_D2USC) || device.equals(DEVICE_D2TMO) || device.equals(DEVICE_D2ATT) || device.equals(DEVICE_D2VZW) ||  device.equals(DEVICE_T0LTESPR)) {this.setupGenericNetdWlan0();}// Samsung Galaxy S4 ish deviceselse if (device.equals(DEVICE_GalaxyS4) || device.equals(DEVICE_JFLTEATT) || device.equals(DEVICE_JFLTETMO) || device.equals(DEVICE_JFLTESPR) || device.equals(DEVICE_JFLTEVZW) || device.equals(DEVICE_JFLTEVZW) ||  device.equals(DEVICE_JFLTEUSC)) {this.setupGS4();}// LG Optimus Selse if (device.equals(DEVICE_THUNDERC)) {this.setupThunderc();}else if (device.equals(DEVICE_BRAVOC) || device.equals(DEVICE_BRAVO) || device.equals(DEVICE_SUPERSONIC) || device.equals(DEVICE_SHOOTER) || device.equals(DEVICE_SHOOTERU) || device.equals(DEVICE_PYRAMID) || device.equals(DEVICE_MECHA)) {this.setupSoftapHTC();}else if (device.equals(DEVICE_DREAM) ||  device.equals(DEVICE_SAPPHIRE) || device.equals(DEVICE_HERO) || device.equals(DEVICE_HEROC)) {this.setupTiAdhoc();}else if (device.equals(DEVICE_SGHI897) || device.equals(DEVICE_SCHI500) || device.equals(DEVICE_SCHI510) || //device.equals(DEVICE_SPHD700) || device.equals(DEVICE_SCHR910)) {this.setupSoftapSamsung();}// LG OMAP3 WiLink6 w/Samsung Galaxy SLelse if (device.equals(DEVICE_LS855) || device.equals(DEVICE_LU3000) || device.equals(DEVICE_P970) || device.equals(DEVICE_P970G) || device.equals(DEVICE_GALAXYSL)) {this.setupHostapLGomap3(); }// LG OMAP4 WiLink7else if (device.equals(DEVICE_P920) || device.equals(DEVICE_P925) || device.equals(DEVICE_P925G)) {this.setupHostapLGomap4();}// Motorola OMAP3 WiLink6 Deviceselse if (device.equals(DEVICE_DROID2WE) || device.equals(DEVICE_UMTSSHOLES) || device.equals(DEVICE_UMTSJORDAN) || device.equals(DEVICE_CDMASHADOW) || device.equals(DEVICE_UMTSSHADOW) || device.equals(DEVICE_CDMADROID2) || device.equals(DEVICE_UMTSDROID2) || device.equals(DEVICE_CDMAVENUS2) || device.equals(DEVICE_UMTSVENUS2)) {this.setupHostapMotOMAP3();}// Motorola OMAP4 WiLink7 Deviceselse if (device.equals(DEVICE_EDISON) || device.equals(DEVICE_CDMATARGA) || device.equals(DEVICE_CDMASOLANA) || device.equals(DEVICE_UMTSSOLANA) || device.equals(DEVICE_CDMASPYDER) || device.equals(DEVICE_UMTSSPYDER)) {this.setupHostapMotOMAP4();}// Generic WiLink else if (device.equals(DEVICE_RUBY)) {this.setupHostapGenWiLink7(); } else if (device.equals(DEVICE_GENERIC_ICS)) { this.setupGenericNetdWlan0(); } else if (device.equals(DEVICE_GENERIC_ICS_WLAN1)) { this.setupGenericNetdWlan1(); } else if (device.equals(DEVICE_VIGOR)) { this.setupNetdHTCRezound(); }else {// HTC Genericif ((new File("/vendor/firmware/fw_bcm4329_apsta.bin").exists() || new File("/etc/firmware/fw_bcm4329_apsta.bin").exists()) && new File("/system/lib/modules/bcm4329.ko").exists()) {this.setupSoftapHTC();}// Motorola OMAP3 WiLink6 Catcherelse if ((new File("/system/bin/Hostapd")).exists() == true &&(new File("/system/bin/wlan_loader")).exists() == true &&(new File("/system/etc/wifi/fw_tiwlan_ap.bin")).exists() == true &&(new File("/system/etc/wifi/tiwlan_ap.ini")).exists() == true) {this.setupHostapMotOMAP3();}// Motorola OMAP4 WiLink7 Catcherelse if ((new File("/system/bin/Hostapd")).exists() == true &&(new File("/system/bin/tiap_loader")).exists() == true &&(new File("/system/etc/wifi/fw_wlan1281_AP.bin")).exists() == true &&(new File("/system/etc/wifi/tiwlan_ap.ini")).exists() == true) {this.setupHostapMotOMAP4();}// LG OMAP3 WiLink6 Catcherelse if ((new File("/system/bin/hostapd")).exists() == true &&(new File("/system/bin/tiap_loader")).exists() == true &&(new File("/system/etc/wifi/softap/firmware_ap.bin")).exists() == true &&(new File("/system/etc/wifi/softap/tiwlan_ap.ini")).exists() == true) {this.setupHostapLGomap3();}// LG OMAP4 WiLink7 Catcherelse if ((new File("/system/bin/hostap")).exists() == true &&(new File("/system/bin/tiap_loader")).exists() == true &&(new File("/system/etc/wifi/softap/firmware_ap.bin")).exists() == true &&(new File("/system/etc/wifi/softap/tiwlan_ap.ini")).exists() == true) {this.setupHostapLGomap4();}// Generic WiLink Catcherelse if ((new File("/system/bin/hostapd")).exists() == true &&(new File("/system/bin/tiap_loader")).exists() == true &&(new File("/system/etc/wifi/firmware_ap.bin")).exists() == true &&(new File("/system/etc/wifi/tiwlan_ap.ini")).exists() == true) {this.setupHostapGenWiLink7();}else {this.setupGeneric();}}}/** * TI-ADHOC - used for sapphire, dream, hero, heroc */private void setupTiAdhoc() {this.wextSupported          = false;this.softapSupported        = false;this.softapSamsungSupported = false;this.netdSupported          = false;this.tiadhocSupported       = true;this.frameworkTetherSupported = true;this.tiadhocInterface       = "tiwlan0";this.genericSetupSection    = true;this.autoSetupMethod        = "tiwlan0";}/** * ZTE BLADE */private void setupBlade() {this.wextSupported        = true;this.softapSupported      = false;this.softapSamsungSupported = false;this.netdSupported        = true;this.tiadhocSupported     = false;this.frameworkTetherSupported = true;this.wextInterface = "wlan0";// hostapd supportif ((new File("/system/bin/hostapd")).exists() == true) {this.hostapdSupported   = true;this.hostapdPath        = "/system/bin/hostapd";this.hostapdInterface   = "wlan0";this.hostapdTemplate    = "mini";this.autoSetupMethod    = "hostapd";this.hostapdLoaderCmd   = "disabled";}else {this.hostapdSupported = false;this.autoSetupMethod = "wext";}this.netdInterface         = "wlap0";this.encryptionIdentifier  = "wpa";this.opennetworkIdentifier = "open";// Kernel-Modulethis.hostapdKernelModulePath = "/system/wifi/ar6000.ko";this.hostapdKernelModuleName = "ar6000";this.genericSetupSection = true;}/** * Passion aka Nexus One */private void setupSoftapGoogle() {this.wextSupported= true;this.softapSupported= true;this.softapSamsungSupported= false;this.netdSupported= true;this.hostapdSupported= false;this.tiadhocSupported= false;this.autoInternalNetSetup= true;this.netdNdcSupported = false;this.frameworkTetherSupported = true;this.wextInterface = "eth0";this.netdInterface = "wl0.1";this.softapInterface = "wl0.1";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";if (new File("/vendor/firmware/fw_bcm4329_apsta.bin").exists()) {this.softapFirmwarePath = "/vendor/firmware/fw_bcm4329_apsta.bin";}else if (new File("/etc/firmware/fw_bcm4329_apsta.bin").exists()) {this.softapFirmwarePath = "/etc/firmware/fw_bcm4329_apsta.bin";}this.autoSetupMethod = "softap";this.genericSetupSection = true;if ((new File("/system/bin/ndc").exists())) {//this.autoSetupMethod = "netdndc";this.netdNdcSupported = true;}}/** * HTC Rezound */private void setupNetdHTCRezound() {this.wextSupported          = true;this.softapSupported        = false;this.softapSamsungSupported = false;this.netdSupported          = true;this.hostapdSupported       = false;this.tiadhocSupported       = false;this.autoInternalNetSetup= true;this.netdNdcSupported       = false;this.frameworkTetherSupported = true;if (sdk >= SDK_ICS) {// Vigor on ICS//ICSthis.wextInterface = "wlan0";this.netdInterface = "wlan0";this.softapInterface = "wlan0";if ((new File("/etc/firmware/fw_bcm4330_apsta_b1.bin")).exists() == true &&(new File("/system/lib/modules/bcmdhd.ko")).exists() == true) {this.softapFirmwarePath = "/etc/firmware/fw_bcm4330_apsta_b1.bin";}//} else if (sdk >= SDK_GB) {//}} else {// Vigor on GB or who knows lets try GB anyway.... There was never a stock less than GB for Vigorthis.wextInterface = "eth0";this.netdInterface = "eth0";this.softapInterface = "wlan0";if ((new File("/etc/firmware/fw_bcm4329_apsta.bin")).exists() == true &&(new File("/system/lib/modules/bcm4329.ko")).exists() == true) {this.softapFirmwarePath = "/etc/firmware/fw_bcm4329_apsta.bin";}}this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";//this.autoSetupMethod = "softap";this.autoSetupMethod = "netd";this.genericSetupSection = true;if ((new File("/system/bin/ndc").exists())) {this.netdNdcSupported = true;}}/** * Bravo - HTC Desire (GSM), Bravoc - HTC Desire (CDMA) */private void setupSoftapHTC() {this.wextSupported        = true;this.softapSupported      = true;this.softapSamsungSupported = false;this.netdSupported        = true;this.hostapdSupported     = true;this.tiadhocSupported      = false;this.frameworkTetherSupported = true;this.wextInterface = "wlan0";this.netdInterface = "wlan0";this.softapInterface = "eth0";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";if (new File("/system/etc/firmware/fw_bcm4329_apsta.bin").exists()) {this.softapFirmwarePath = "/system/etc/firmware/fw_bcm4329_apsta.bin";} else if (new File("/vendor/firmware/fw_bcm4329_apsta.bin").exists()) {this.softapFirmwarePath = "/vendor/firmware/fw_bcm4329_apsta.bin";} else if (new File("/system/etc/firmware/bcm4329.hcd").exists()) {this.softapFirmwarePath = "/system/etc/firmware/bcm4329.hcd";}if(this.device.equals(Configuration.DEVICE_SHOOTER) || this.device.equals(Configuration.DEVICE_SHOOTERU)){//this.wifiLoadCmd = "rmmod bcm4329;rmmod bcmdhd;insmod /system/lib/modules/bcm4329.ko \"firmware_path=/system/etc/firmware/fw_bcm4329_apsta.bin nvram_path=/proc/calibration iface_name=wlan0\";insmod /system/lib/modules/bcmdhd.ko";//this.wifiUnloadCmd = "rmmod bcm4329;rmmod bcmdhd;insmod /system/lib/modules/bcm4329.ko \"firmware_path=/system/etc/firmware/fw_bcm4329_sta.bin nvram_path=/proc/calibration iface_name=wlan0\";insmod /system/lib/modules/bcmdhd.ko";this.wifiFinalDriverLoad = true;Configuration.wifiLoadCmd = "insmod /system/lib/modules/bcm4329.ko \"nvram_path=/proc/calibration iface_name=wlan0\"";Configuration.wifiUnloadCmd = "rmmod bcm4329";Configuration.wifiFinalLoadCmd = "insmod /system/lib/modules/bcm4329.ko \"nvram_path=/proc/calibration iface_name=wlan0\"";this.softapInterface = "wlan0";}this.autoSetupMethod = "softap";this.genericSetupSection = true;}/** * HTC Amaze */private void setupHostapGenWiLink7() {this.wextSupported        = false;this.softapSupported      = false;this.softapSamsungSupported = false;this.netdSupported        = false;this.tiadhocSupported      = false;this.frameworkTetherSupported = true;this.wextInterface = "tiwlan0";// hostapd supportif ((new File("/system/bin/hostapd")).exists() == true &&(new File("/system/bin/tiap_loader")).exists() == true &&(new File("/system/etc/wifi/firmware_ap.bin")).exists() == true &&(new File("/system/etc/wifi/tiwlan_ap.ini")).exists() == true) {this.hostapdSupported = true;this.hostapdPath      = "/system/bin/hostapd";this.hostapdInterface = "tiap0";//this.hostapdTemplate  = "tiap"; TODOthis.hostapdTemplate  = "droi";this.autoSetupMethod  = "hostapd";this.hostapdLoaderCmd = "/system/bin/tiap_loader tiap0 -f /system/etc/wifi/firmware_ap.bin -e /proc/calibration -i /system/etc/wifi/tiwlan_ap.ini";}this.netdInterface         = "";this.encryptionIdentifier  = "wpa";this.opennetworkIdentifier = "open";// Kernel-Modulethis.hostapdKernelModulePath = "/system/lib/modules/tiap_drv.ko";this.hostapdKernelModuleName = "tiap_drv";this.genericSetupSection = true;}/** * Motorola DroidX (CDMA), Droid2 (CDMA) */private void setupHostapMotOMAP3() {this.wextSupported          = true;this.softapSupported        = false;this.softapSamsungSupported = false;this.netdSupported          = false;this.tiadhocSupported       = false;this.frameworkTetherSupported = true;this.wextInterface = "tiwlan0";// hostapd supportif ((new File("/system/bin/Hostapd")).exists() == true &&(new File("/system/bin/wlan_loader")).exists() == true &&(new File("/system/etc/wifi/fw_tiwlan_ap.bin")).exists() == true &&(new File("/system/etc/wifi/tiwlan_ap.ini")).exists() == true) {this.hostapdSupported = true;this.hostapdPath      = "/system/bin/Hostapd";this.hostapdInterface = "tiwlan0";this.hostapdTemplate  = "droi";this.autoSetupMethod  = "hostapd";this.hostapdLoaderCmd = "/system/bin/wlan_loader -f /system/etc/wifi/fw_tiwlan_ap.bin -i /system/etc/wifi/tiwlan_ap.ini -e /pds/wifi/nvs_map.bin";}else {this.hostapdSupported = false;this.autoSetupMethod = "wext";}this.netdInterface         = "wlan1";this.encryptionIdentifier  = "wpa";this.opennetworkIdentifier = "open";// Kernel-Modulethis.hostapdKernelModulePath = "/system/lib/modules/tiap_drv.ko";this.hostapdKernelModuleName = "tiap_drv";this.genericSetupSection = true;if (android.os.Build.VERSION.SDK_INT >= SDK_ICS) {this.autoSetupMethod = "netd";this.netdSupported = true;this.hostapdSupported = false;this.encryptionIdentifier = "wpa2-psk";}if ((new File("/system/bin/ndc").exists())) {this.netdNdcSupported = true;if (android.os.Build.VERSION.SDK_INT >= SDK_ICS) {this.hostapdSupported = false;this.autoSetupMethod = "netdndc";}}}/** * Motorola Targa */private void setupHostapMotOMAP4() {this.wextSupported        = false;this.softapSupported      = false;this.softapSamsungSupported = false;this.netdSupported        = false;this.tiadhocSupported      = false;this.frameworkTetherSupported = true;this.wextInterface = "tiwlan0";// hostapd supportif ((new File("/system/bin/Hostapd")).exists() == true &&(new File("/system/bin/tiap_loader")).exists() == true &&(new File("/system/etc/wifi/fw_wlan1281_AP.bin")).exists() == true &&(new File("/system/etc/wifi/tiwlan_ap.ini")).exists() == true) {this.hostapdSupported = true;this.hostapdPath      = "/system/bin/Hostapd";this.hostapdInterface = "tiap0";this.hostapdTemplate  = "droi";this.autoSetupMethod = "hostapd";this.hostapdLoaderCmd = "/system/bin/tiap_loader -f /system/etc/wifi/fw_wlan1281_AP.bin -i /system/etc/wifi/tiwlan_ap.ini -e /pds/wifi/nvs_map.bin";}else {this.hostapdSupported = false;this.autoSetupMethod = "wext";}this.netdInterface         = "wlan1";this.encryptionIdentifier  = "wpa";this.opennetworkIdentifier = "open";// Kernel-Modulethis.hostapdKernelModulePath = "/system/lib/modules/tiap_drv.ko";this.hostapdKernelModuleName = "tiap_drv";this.genericSetupSection = true;if (android.os.Build.VERSION.SDK_INT >= SDK_ICS) {this.autoSetupMethod = "netd";this.netdSupported = true;this.hostapdSupported = false;this.encryptionIdentifier = "wpa2-psk";}if ((new File("/system/bin/ndc").exists())) {this.netdNdcSupported = true;if (android.os.Build.VERSION.SDK_INT >= SDK_ICS) {this.hostapdSupported = false;this.autoSetupMethod = "netdndc";}}}/** * Samsung Generic */private void setupSoftapSamsung() {this.wextSupported        = true;this.softapSupported      = false;this.softapSamsungSupported = false;this.netdSupported        = false;this.hostapdSupported     = false;this.tiadhocSupported      = false;this.frameworkTetherSupported = true;this.autoSetupMethod      = "wext";this.wextInterface = "eth0";this.netdInterface = "wl0.1";this.softapInterface = "wl0.1";this.encryptionIdentifier = "wep";this.opennetworkIdentifier = "open";if (new File("/etc/wifi/bcm4329_aps.bin").exists()) {this.softapFirmwarePath = "/etc/wifi/bcm4329_aps.bin";this.autoSetupMethod = "softap_samsung";this.softapSamsungSupported = true;this.netdSupported = false;this.encryptionIdentifier = "wpa2-psk";}this.genericSetupSection = true;}/** * Samsung Galaxy Nexus */private void setupGenericNetdWlan0() {this.wextSupported            = true;this.softapSupported         = true;this.softapSamsungSupported  = true;this.netdSupported          = true;this.hostapdSupported       = true;this.tiadhocSupported       = false;this.netdNdcSupported       = false;this.frameworkTetherSupported = true;this.wextInterface = "wlan0";this.netdInterface = "wlan0";this.softapInterface = "wlan0";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";this.autoSetupMethod = "netd";this.genericSetupSection = true;//hostapd mode might workif ((new File("/system/bin/hostapd")).exists() == true) {this.hostapdSupported   = true;this.hostapdPath        = "/system/bin/hostapd";this.hostapdInterface   = "wlan0";this.hostapdTemplate    = "mini";this.hostapdLoaderCmd = "rmmod dhd;insmod /system/lib/modules/dhd.ko \"firmware_path=/system/etc/wifi/bcmdhd_apsta.bin nvram_path=/system/etc/wifi/nvram_net.txt\"";}//Check for wifi firmware - gs3/tab2 models use thisif ((new File("/system/lib/modules/dhd.ko").exists()) || (new File("/lib/modules/dhd.ko").exists())) { //idk if softap would workthis.softapFirmwarePath = "/system/etc/wifi/bcmdhd_apsta.bin_b2";//gs3 / tab2 stuff - tab2 uses /libif(new File("/system/lib/modules/dhd.ko").exists()){this.wifiFinalDriverLoad = true;//this.wifiLoadCmd = "rmmod dhd;insmod /system/lib/modules/dhd.ko \"firmware_path=/system/etc/wifi/bcmdhd_apsta.bin nvram_path=/system/etc/wifi/nvram_net.txt\"";Configuration.wifiLoadCmd = "insmod /system/lib/modules/dhd.ko \"firmware_path=/system/etc/wifi/bcmdhd_apsta.bin nvram_path=/system/etc/wifi/nvram_net.txt\"";Configuration.wifiUnloadCmd = "/system/bin/rmmod dhd";Configuration.wifiFinalLoadCmd = "/system/bin/mfgloader -l /system/lib/modules/dhd.ko";}else if(new File("/lib/modules/dhd.ko").exists()){this.wifiFinalDriverLoad = true;//this.wifiLoadCmd ="rmmod dhd;insmod /lib/modules/dhd.ko \"firmware_path=/system/etc/wifi/bcmdhd_apsta.bin nvram_path=/system/etc/wifi/nvram_net.txt\"";Configuration.wifiLoadCmd = "insmod /lib/modules/dhd.ko \"firmware_path=/system/etc/wifi/bcmdhd_apsta.bin nvram_path=/system/etc/wifi/nvram_net.txt\"";Configuration.wifiUnloadCmd = "/system/bin/rmmod dhd";Configuration.wifiFinalLoadCmd = "/system/bin/mfgloader -l /lib/modules/dhd.ko";}} else {this.softapFirmwarePath = "";}if ((new File("/system/bin/ndc").exists())) {if (android.os.Build.VERSION.SDK_INT >= SDK_JB) {this.autoSetupMethod = "netdndc";}this.netdNdcSupported = true;}}//TODO:S4 stuff/** * Samsung GS4 */private void setupGS4() {this.wextSupported            = true;this.softapSupported         = false;this.softapSamsungSupported  = false;this.netdSupported          = false;this.hostapdSupported       = true;this.tiadhocSupported       = false;this.netdNdcSupported       = false;this.frameworkTetherSupported = true;this.wextInterface = "wlan0";this.netdInterface = "wlan0";this.softapInterface = "wlan0";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";this.autoSetupMethod = "hostapd";this.genericSetupSection = true;//hostapd mode might workif ((new File("/system/bin/hostapd")).exists() == true) {this.hostapdSupported   = true;this.hostapdPath        = "/system/bin/hostapd";this.hostapdInterface   = "wlan0";this.wifiFinalDriverLoad = true;this.hostapdTemplate    = "mini";this.hostapdLoaderCmd = "rmmod dhd;insmod /system/lib/modules/dhd.ko \"firmware_path=/system/etc/wifi/bcmdhd_apsta.bin nvram_path=/system/etc/wifi/nvram_net.txt\"";Configuration.wifiUnloadCmd = "/system/bin/rmmod dhd";Configuration.wifiFinalLoadCmd = "insmod system/lib/modules/dhd.ko \"firmware_path=/system/etc/wifi/bcmdhd_sta.bin nvram_path=/system/etc/wifi/nvram_net.txt\"";}}private void setupGenericNetdWlan1() {this.wextSupported          = true;this.softapSupported        = false;this.softapSamsungSupported = false;this.netdSupported          = true;this.hostapdSupported       = false;this.tiadhocSupported       = false;this.netdNdcSupported       = false;this.frameworkTetherSupported = true;this.wextInterface = "wlan1";this.netdInterface = "wlan1";this.softapInterface = "wlan1";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";this.softapFirmwarePath = "";this.autoSetupMethod = "netd";this.genericSetupSection = true;if ((new File("/system/bin/ndc").exists())) {if (android.os.Build.VERSION.SDK_INT >= SDK_JB) {this.autoSetupMethod = "netdndc";}this.netdNdcSupported = true;}}/** * Samsung Galaxy S *//*private void setupNetdSamsung() {this.wextSupported          = true;this.softapSupported        = false;this.softapSamsungSupported = false;this.netdSupported          = true;this.hostapdSupported       = false;this.tiadhocSupported       = false;this.wextInterface = "eth0";this.netdInterface = "wl0.1";this.softapInterface = "wl0.1";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";this.softapFirmwarePath = "/etc/wifi/bcm4329_aps.bin";this.autoSetupMethod = "netd";this.genericSetupSection = true;} *//** * Samsung Galaxy S */private void setupGTI9000() {this.wextSupported          = true;this.softapSupported        = true;this.softapSamsungSupported = false;this.netdSupported          = true;this.hostapdSupported       = false;this.tiadhocSupported       = false;this.netdNdcSupported     = false;this.frameworkTetherSupported = true;this.wextInterface = "eth0";this.netdInterface = "wl0.1";this.softapInterface = "wl0.1";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";this.softapFirmwarePath = "/etc/wifi/bcm4329_aps.bin";Configuration.wifiLoadCmd = "none";Configuration.wifiUnloadCmd = "/system/bin/mfgloader -u;/system/bin/rmmod dhd";this.autoSetupMethod = "softap";this.genericSetupSection = true;if ((new File("/system/bin/ndc").exists())) {if (android.os.Build.VERSION.SDK_INT >= SDK_JB) {this.autoSetupMethod = "netdndc";}this.netdNdcSupported = true;}}/** * Samsung Galaxy S2 SoftAP */private void setupGTI9100() {this.wextSupported          = true;this.softapSupported        = true;this.softapSamsungSupported = false;this.netdSupported          = true;this.hostapdSupported       = false;this.tiadhocSupported       = false;this.netdNdcSupported       = false;this.frameworkTetherSupported = true;this.wextInterface = "eth0";this.netdInterface = "wl0.1";this.softapInterface = "wl0.1";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";if (new File("/system/vendor/firmware/bcm4330_aps.bin").exists()) {this.softapFirmwarePath = "/system/vendor/firmware/bcm4330_aps.bin";}else if (new File("/system/etc/wifi/bcm4330_aps.bin").exists()) {this.softapFirmwarePath = "/system/etc/wifi/bcm4330_aps.bin";}else if (new File("/etc/wifi/bcm4330_aps.bin").exists()) {this.softapFirmwarePath = "/etc/wifi/bcm4330_aps.bin";}//this.wifiLoadCmd = "/system/bin/insmod /lib/modules/dhd.ko firmware_path=/system/etc/wifi/bcm4330_aps.bin nvram_path=/system/etc/wifi/nvram_net.txt";//this.wifiUnloadCmd = "/system/bin/rmmod dhd";Configuration.wifiLoadCmd = "none";Configuration.wifiUnloadCmd = "/system/bin/mfgloader -u;/system/bin/rmmod dhd";this.autoSetupMethod = "netd";this.genericSetupSection = true;if ((new File("/system/bin/ndc").exists())) {if (android.os.Build.VERSION.SDK_INT >= SDK_JB) {this.autoSetupMethod = "netdndc";}this.netdNdcSupported = true;}}/** * LG Optimus S - thunderc */private void setupThunderc() {this.wextSupported        = true;this.softapSupported      = true;this.softapSamsungSupported = false;this.netdSupported        = true;this.hostapdSupported     = false;this.tiadhocSupported      = false;this.frameworkTetherSupported = true;this.wextInterface = "eth0";this.netdInterface = "wl0.1";this.softapInterface = "wl0.1";this.encryptionIdentifier = "wpa2-psk";this.opennetworkIdentifier = "open";if (new File("/etc/wl/rtecdc-apsta.bin").exists()) {this.softapFirmwarePath = "/etc/wl/rtecdc-apsta.bin";this.autoSetupMethod = "softap";this.softapSupported = true;this.netdSupported = true;} else {this.autoSetupMethod = "wext";this.softapSupported = false;this.netdSupported = false;}this.genericSetupSection = true;}/** * LG OMAP3 WiLink6 */private void setupHostapLGomap3() {this.wextSupported          = false;this.softapSupported        = false;this.softapSamsungSupported = false;this.netdSupported          = false;this.tiadhocSupported       = false;this.frameworkTetherSupported = true;this.wextInterface = "tiwlan0";// hostapd supportif ((new File("/system/bin/hostapd")).exists() == true &&(new File("/system/bin/tiap_loader")).exists() == true &&(new File("/system/etc/wifi/softap/firmware_ap.bin")).exists() == true &&(new File("/system/etc/wifi/softap/tiwlan_ap.ini")).exists() == true) {this.hostapdSupported = true;this.hostapdPath      = "/system/bin/hostap";this.hostapdInterface = "tiap0";this.hostapdTemplate  = "droi";this.autoSetupMethod  = "hostapd";this.hostapdLoaderCmd = "/system/bin/tiap_loader -f /system/etc/wifi/softap/firmware_ap.bin -i /system/etc/wifi/softap/tiwlan_ap.ini -e /data/misc/wifi/nvs_map.bin";}else {this.hostapdSupported = false;this.autoSetupMethod = "wext";}this.netdInterface         = "tiap0";this.encryptionIdentifier  = "wpa";this.opennetworkIdentifier = "open";// Kernel-Modulethis.hostapdKernelModulePath = "/system/etc/wifi/softap/tiap_drv.ko";this.hostapdKernelModuleName = "tiap_drv";this.genericSetupSection = true;}/** * LG OMAP4 WiLink7 */private void setupHostapLGomap4() {this.wextSupported          = false;this.softapSupported        = false;this.softapSamsungSupported = false;this.netdSupported          = false;this.tiadhocSupported       = false;this.frameworkTetherSupported = true;this.wextInterface = "tiwlan0";// hostapd supportif ((new File("/system/bin/hostap")).exists() == true &&(new File("/system/bin/tiap_loader")).exists() == true &&(new File("/system/etc/wifi/softap/firmware_ap.bin")).exists() == true &&(new File("/system/etc/wifi/softap/tiwlan_ap.ini")).exists() == true) {this.hostapdSupported = true;this.hostapdPath      = "/system/bin/hostap";this.hostapdInterface = "tiap0";this.hostapdTemplate  = "droi";this.autoSetupMethod  = "hostapd";this.hostapdLoaderCmd = "/system/bin/tiap_loader -f /system/etc/wifi/softap/firmware_ap.bin -i /system/etc/wifi/softap/tiwlan_ap.ini -e /data/misc/wifi/nvs_map.bin";}else {this.hostapdSupported = false;this.autoSetupMethod = "wext";}this.netdInterface         = "tiap0";this.encryptionIdentifier  = "wpa";this.opennetworkIdentifier = "open";// Kernel-Modulethis.hostapdKernelModulePath = "/system/etc/wifi/softap/tiap_drv.ko";this.hostapdKernelModuleName = "tiap_drv";this.genericSetupSection = true;}/** * GENERIC */private void setupGeneric() {this.wextSupported        = true;this.hostapdSupported     = false;this.softapSupported      = false;this.netdSupported        = false;this.tiadhocSupported      = false;this.frameworkTetherSupported = true;this.autoSetupMethod      = "wext";this.encryptionIdentifier = "wep";this.genericSetupSection  = true;}// ===========================================================================public String getDevice() {return device;}public boolean isTiadhocSupported() {return tiadhocSupported;}public String getTiadhocInterface() {return tiadhocInterface;}public boolean isWextSupported() {return wextSupported;}public boolean isHostapdSupported() {return hostapdSupported;}public boolean isSoftapSupported() {return softapSupported;}public boolean isSoftapSamsungSupported() {return softapSamsungSupported;}public boolean isNetdSupported() {return netdSupported;}public boolean isNetdNdcSupported() {return netdNdcSupported;}public String getWextInterface() {return wextInterface;}public String getHostapdPath() {return hostapdPath;}public String getHostapdTemplate() {return hostapdTemplate;}public synchronized String getHostapdKernelModuleName() {return hostapdKernelModuleName;}public String getHostapdKernelModulePath() {return hostapdKernelModulePath;}public String getHostapdInterface() {return hostapdInterface;}public String getNetdInterface() {return netdInterface;}public String getSoftapInterface() {return softapInterface;}public String getEncryptionIdentifier() {return encryptionIdentifier;}public String getOpennetworkIdentifier() {return opennetworkIdentifier;}public boolean doWifiFinalDriverLoad() {return wifiFinalDriverLoad;}public boolean isFrameworkTetherSupported() {return frameworkTetherSupported;}public boolean isAutoInternalNetSetup() {return autoInternalNetSetup;}public void setAutoInternalConfig(boolean autoInternalConfig) {this.autoInternalNetSetup = autoInternalConfig;}public boolean isGenericSetupSection() {return genericSetupSection;}public String getSoftapFirmwarePath() {return softapFirmwarePath;}public String getAutoSetupMethod() {return autoSetupMethod;}    public String getHostapdLoaderCmd() {return hostapdLoaderCmd;}//TODO: hack for loading driver outside tetherpublic static String getWifiLoadCmd() {return wifiLoadCmd;}public void setWifiLoadCmd(String wifiLoadCmd) {Configuration.wifiLoadCmd = wifiLoadCmd;}public static String getWifiUnloadCmd() {return wifiUnloadCmd;}public static String getWifiFinalloadCmd() {return wifiFinalLoadCmd;}public void setWifiUnloadCmd(String wifiUnloadCmd) {Configuration.wifiUnloadCmd = wifiUnloadCmd;}    public static boolean hasKernelFeature(String feature) {        BufferedReader in = null;        FileInputStream fis = null;        GZIPInputStream gzin = null;        try {                File cfg = new File("/proc/config.gz");                if (cfg.exists() == false) {                        return true;                }                fis = new FileInputStream(cfg);                gzin = new GZIPInputStream(fis);                String line = "";                in = new BufferedReader(new InputStreamReader(gzin));                while ((line = in.readLine()) != null) {                        if (line.startsWith(feature)) {                                return true;                        }                }        } catch (IOException e) {        e.printStackTrace();        }        finally {            try {            gzin.close();            in.close();            } catch (IOException e) {                // Nothing            }}return false;}}



原创粉丝点击