红联Linux门户
Linux帮助

使用cygwin工具将linux环境中运行的hostapd移植到windows中

发布时间:2015-11-17 09:56:32来源:linux网站作者:oria2006

1.安装cygwin,安装程序,以及教程http://www.cygwin.com/中有详细说明

2.cygwin安装好之后,将hostapd代码包拷贝到cygwin中的home目录,运行cygwin之后,在home目录下就可以看到hostapd了

3.如果已经在cygwin中安装好了GCC,就可以直接make编译了,(如果还没有安装GCC,cygwin中有GCC安装包,可以通过setup.exe安装程序安装GCC)

4.直接make编译,会出现出错,错误的原因有很多,最主要的是有些头文件找不到,结构类型没有定义之类的

5.因为windows平台不支持抓取二层数据包,所以hostapd中的RAW_SOCKET在windows平台上不能正常使用的,需要在WINDOWS平台上安装第三方抓包软件WINPCAP

6.hostapd中支持对pcap库的使用,使用pcap库需要定义宏CONFIG_DNET_PCAP

7.在编译hostapd时会发现有些头文件如pcap/pcap.h无法找到,这些头文件可以从WpdPack_4_1_2,libpcap-1.3.0,linux代码包中找到,直接将头文件拷贝到cygwin的include目录下

8.hostapd编译过程中需要pcap的库,也可以在WpdPack_4_1_2,libpcap-1.3.0中找到

9.完成以上几个步骤基本就可以编译通过了

10.在cygwin中编译通过的可执行文件,在windows平台上运行时,可能会出现问题,这些问题都是和具体的功能相关的,需要根据遇到的实际情况,具体解决问题。


在这段时间的移植过程中我主要遇到以下几个问题:

1.windows平台的raw_socket无法抓取mac层的数据包----------改用第三方抓包软件实现,通过调用pcap库中的接口函数实现

2.windows不支持linux平台的local_packet类型的socket协议

3.使用cygwin编译的进程在windows平台上运行时发现pthread_mutex_lock不起作用,该函数返回错误码45,而该代码在linux环境下编译运行时可以的

为了解决该问题,特地查看了cygwin和linux的源代码,发现cygwin对锁属性的初始化值不一样,在linux代码基础上增加了设置属性值的代码,就可以解决该问题了。

uint8_t common_create_thread_mutex(common_thread_mutex *the_mutex) 

pthread_mutexattr_t Attr; 
 
if (the_mutex == NULL) 

return FALSE; 

<span style="color:#ff0000;">common_attr_thread_mutex(&Attr); 
</span> switch(pthread_mutex_init(the_mutex, &Attr)) { 
case 0: // success 
break; 
default: 
return FALSE; 

return TRUE; 
}
uint8_t common_attr_thread_mutex(pthread_mutexattr_t *the_mutex) 

if (the_mutex == NULL) 

return FALSE; 

pthread_mutexattr_init(the_mutex); 
switch(pthread_mutexattr_settype(the_mutex, PTHREAD_MUTEX_NORMAL)) { 
case 0: // success 
break; 
default: 
 
return FALSE; 

return TRUE; 
}


cygwin的安装使用:http://www.linuxdiyf.com/linux/14321.html

cygwin下模拟linux的nautilus命令:http://www.linuxdiyf.com/linux/13966.html

在cygwin的环境下使用linux命令:http://www.linuxdiyf.com/linux/13577.html

如何在Windows中通过Cygwin来使用Linux命令行:http://www.linuxdiyf.com/linux/8311.html

使用Cygwin通过ssh命令行来访问Windows 7:http://www.linuxdiyf.com/linux/8310.html