WPA Supplicant 在Windows下的编译

Win环境网络组件编译指南
本文档详细介绍了如何在Windows环境下编译安装WinPcap、OpenSSL及WPASupplicant等网络相关组件。首先,指导下载并配置WinPcap;接着,针对OpenSSL的编译过程进行了详细说明,包括解决宏定义冲突的问题;最后,提供了WPASupplicant的下载与编译步骤。
一、下载WinPcap

下载WpdPack_4_0_2.zip,解压到C:\dev\WpdPack。


二、编译OpenSSL
1、    下载openssl-1.0.1e.tar.gz并解压。
2、    在\include\openssl\x509v3.h里添加:
  1. #ifdef OPENSSL_SYS_WIN32 
  2.     /* Under Win32 these are defined in wincrypt.h */ 
  3. #undef X509_NAME 
  4. #undef X509_CERT_PAIR 
  5. #undef X509_EXTENSIONS 
  6. #endif 
#ifdef OPENSSL_SYS_WIN32
    /* Under Win32 these are defined in wincrypt.h */
#undef X509_NAME
#undef X509_CERT_PAIR
#undef X509_EXTENSIONS
#endif
3、    安装ActivePerl
4、    打开VS命令提示行,进入OpenSSL路径,依次输入以下命令:
  1. perl Configure VC-WIN32 no-asm --prefix= C:\dev\OpenSSL 
  2. ms\do_ms 
  3. nmake -f ms\ntdll.mak 
  4. nmake -f ms\ntdll.mak install 
perl Configure VC-WIN32 no-asm --prefix= C:\dev\OpenSSL
ms\do_ms
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install


三、编译WPA Supplicant
1、    下载wpa_supplicant-0.7.3.tar.gz并解压。
2、    用VS2008打开vs2005\wpa_supplicant.sln,编译即可。

四、问题与解决
1、    OpenSSL的宏定义和VS的wincrypt.h的宏定义冲突,需要按上述方法取消宏定义。
2、    wpa_supplicant-2.0在Windows下编译有很多问题,用0.7.3版可以编译。
3、    VS2005在编译时会提示“调试信息损坏,请重新编译模块”,经查询是VS2005自身的bug(http://support.microsoft.com/kb/974193/zh-cn),改用VS2008可编译。

4、    将工程中需要用到libeay32MT.lib和 ssleay32MT.lib的地方,都换成libeay32.lib和ssleay32.lib

<think> 我们正在讨论如何从Android源码树中的external/wpa_supplicant_8目录编译wpa_supplicant。 根据Android的构建系统,我们通常使用Android.mk或Blueprint(Soong)来编译模块。wpa_supplicant_8目录下应该包含构建脚本。 步骤: 1. 确认环境:已经设置好Android编译环境(如source build/envsetup.sh, lunch选择目标设备)。 2. 查看external/wpa_supplicant_8目录下的Android.mk或.bp文件。在Android中,wpa_supplicant通常被定义为一个模块。 在Android 10及之后的版本中,wpa_supplicant编译由Soong(使用Android.bp)处理。但在external/wpa_supplicant_8中,我们可能会看到Android.bp文件。 3. 编译整个Android系统时,wpa_supplicant会作为依赖被编译。但也可以单独编译该模块。 单独编译wpa_supplicant的命令通常是: mmm external/wpa_supplicant_8 或者使用模块名编译(需要知道模块名): m wpa_supplicant 4. 模块名通常可以在Android.bp或Android.mk中找到。 参考引用[1]中提到了wpa_supplicant的main函数,这提示我们编译的入口点。但编译过程由构建系统控制。 根据引用[2]的上下文,我们看到了android11 wpa_supplicant_8的解析,说明在Android 11中该目录存在。 因此,我们假设在external/wpa_supplicant_8目录中存在一个Android.bp文件,其中定义了名为"wpa_supplicant"的cc_binary或cc_binary_host模块。 具体步骤: 步骤1:进入Android源码根目录。 步骤2:初始化构建环境(source build/envsetup.sh)。 步骤3:选择目标(lunch,选择目标设备)。 步骤4:使用mmm命令编译该目录,或者使用模块名。 如果使用mmm: mmm external/wpa_supplicant_8 如果使用模块名(假设模块名为wpa_supplicant): m wpa_supplicant 步骤5:编译输出通常在out/target/product/<device>/system/bin/wpa_supplicant(如果是目标设备可执行文件)或out/host/linux-x86/bin/wpa_supplicant(如果是主机可执行文件)。 注意:在Android.bp中,模块可能被命名为"wpa_supplicant",但有时可能会有变体(例如,针对不同API版本可能有不同的模块)。通常,模块名就是wpa_supplicant。 验证:在external/wpa_supplicant_8/Android.bp中查看。例如,可能包含类似: cc_binary { name: "wpa_supplicant", ... } 如果没有Android.bp,而是Android.mk,那么同样在Android.mk中查找LOCAL_MODULE := wpa_supplicant。 因此,核心命令就是使用mmm编译指定目录,或者使用m编译已知的模块名。 相关问题: 1. 如何单独编译Android中的某个模块? 2. Android构建系统中的mmm和m命令有什么区别? 3. 如何确定一个Android模块的模块名? 4. 如何查看Android.bp文件的内容? 5. 编译后的wpa_supplicant输出路径是什么? </think> ### 编译 `wpa_supplicant` 从 `external/wpa_supplicant_8` 的步骤 在 Android 源码树中编译 `wpa_supplicant` 需使用 Android 构建系统(Soong),以下是具体步骤: 1. **准备编译环境** 初始化构建环境并选择目标设备: ```bash source build/envsetup.sh lunch <device_codename>-userdebug # 替换为实际设备代号 ``` 2. **定位编译目标** `wpa_supplicant` 的模块定义通常在: ``` external/wpa_supplicant_8/wpa_supplicant/Android.bp ``` 文件中会声明模块名,通常为 `"wpa_supplicant"` 或 `"wpa_supplicant_<version>"`[^1][^2]。 3. **执行编译** 使用以下命令之一编译: ```bash # 方式1:通过模块名编译 m wpa_supplicant # 方式2:通过路径编译 mmm external/wpa_supplicant_8/wpa_supplicant ``` 4. **获取输出文件** 编译生成的二进制文件位于: ``` out/target/product/<device>/system/bin/wpa_supplicant ``` 如需调试版本,可在 `Android.bp` 中添加: ```python debug: true, # 启用调试符号 ``` 5. **验证编译结果** 通过以下命令检查版本: ```bash adb shell wpa_supplicant -v ``` **关键注意事项**: - **依赖项**:编译前需确保 `libnl` 和 `openssl` 等依赖已编译(通常由 `mmma external` 完成)。 - **交叉编译**:若需主机版本(`wpa_supplicant` for Linux),在 `Android.bp` 中设置: ```python host_supported: true, ``` - **配置调整**:修改 `wpa_supplicant/.config` 文件可定制功能(如 WPA3 支持)。 --- ### 相关问题 1. 如何为 `wpa_supplicant` 添加自定义驱动支持? 2. 调试 `wpa_supplicant` 运行时错误的方法有哪些? 3. Android 中 `wpa_supplicant` 与 `wificond` 的交互流程是怎样的? 4. 如何将自定义的 `wpa_supplicant` 集成到 Android 系统镜像中? 5. 交叉编译 `wpa_supplicant` 时如何处理第三方库依赖? [^1]: `wpa_supplicant` 初始化流程包含参数解析、接口注册和主循环启动。 [^2]: Android 11 中新增了 `SupplicantStaIfaceHal` 回调机制控制底层芯片交互。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值