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