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

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;
	}
	common_attr_thread_mutex(&Attr);
	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;
}


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值