在WiFi调试过程中会用到iwpriv相关的工具。Android系统本身是不支持wireless_tools工具的。所以要移植wireless_tools。以下重点讲解移植过程:
1、 下载wireless_tools
下载地址: https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz
这里下载:wireless_tools.29.tar.gz
2、 解压wireless_tools.29.tar.gz到Android SDK的external目录下
$cd external
$tar -xvf wireless_tools.29.tar.gz
$mv wireless_tools.29 wireless_tools
3、创建Android.mk
$cd external/wireless_tools
$vim Android.mk
Android.mk增加以下内容:
LOCAL_PATH:=$(call my-dir)
# iwlib
include $(CLEAR_VARS)
LOCAL_SRC_FILES := iwlib.c
LOCAL_CFLAGS += -Wno-parentheses-equality -Wno-tautological-compare -Wno-self-assign \
-Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
-Winline -MMD -fPIC
LOCAL_STATIC_LIBRARIES := libcutils libc libm
LOCAL_MODULE := libiw
LOCAL_MODULE_TAGS :=optional
include $(BUILD_STATIC_LIBRARY)
# iwconfig
include $(CLEAR_VARS)
LOCAL_SRC_FILES := iwconfig.c
LOCAL_CFLAGS += -Wno-parentheses-equality -Wno-tautological-compare -Wno-self-assign \
-Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
-Winline -MMD -fPIC
LOCAL_STATIC_LIBRARIES := libcutils libc libm libiw
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE:= iwconfig
LOCAL_MODULE_TAGS :=optional
include $(BUILD_EXECUTABLE)
# iwevent
include $(CLEAR_VARS)
LOCAL_SRC_FILES := iwevent.c
LOCAL_CFLAGS += -Wno-parentheses-equality -Wno-tautological-compare -Wno-self-assign \
-Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
-Winline -MMD -fPIC
LOCAL_STATIC_LIBRARIES := libcutils libc libm libiw
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE:= iwevent
LOCAL_MODULE_TAGS :=optional
include $(BUILD_EXECUTABLE)
# iwgetid
include $(CLEAR_VARS)
LOCAL_SRC_FILES := iwgetid.c
LOCAL_CFLAGS += -Wno-parentheses-equality -Wno-tautological-compare -Wno-self-assign \
-Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
-Winline -MMD -fPIC
LOCAL_STATIC_LIBRARIES := libcutils libc libm libiw
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE:= iwgetid
LOCAL_MODULE_TAGS :=optional
include $(BUILD_EXECUTABLE)
# iwlist
include $(CLEAR_VARS)
LOCAL_SRC_FILES := iwlist.c
LOCAL_CFLAGS += -Wno-parentheses-equality -Wno-tautological-compare -Wno-self-assign \
-Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
-Winline -MMD -fPIC
LOCAL_STATIC_LIBRARIES := libcutils libc libm libiw
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE:= iwlist
LOCAL_MODULE_TAGS :=optional
include $(BUILD_EXECUTABLE)
# iwpriv
include $(CLEAR_VARS)
LOCAL_SRC_FILES := iwpriv.c
LOCAL_CFLAGS += -Wno-parentheses-equality -Wno-tautological-compare -Wno-self-assign \
-Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
-Winline -MMD -fPIC
LOCAL_STATIC_LIBRARIES := libcutils libc libm libiw
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE:= iwpriv
LOCAL_MODULE_TAGS :=optional
include $(BUILD_EXECUTABLE)
# iwspy
include $(CLEAR_VARS)
LOCAL_SRC_FILES := iwspy.c
LOCAL_CFLAGS += -Wno-parentheses-equality -Wno-tautological-compare -Wno-self-assign \
-Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual \
-Winline -MMD -fPIC
LOCAL_STATIC_LIBRARIES := libcutils libc libm libiw
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE:= iwspy
LOCAL_MODULE_TAGS :=optional
LOCAL_CFLAGS += -Wno-parentheses-equality -Wno-tautological-compare -Wno-self-assign
include $(BUILD_EXECUTABLE)
4、构建错误
4.1: “external/wireless_tools/iwlib.h:61:10: fatal error: ‘wireless.h’ file not found #include “wireless.h”
【解决方案】:
$mv wireless.22.h wireless.h
‘IW_EV_POINT_PK2_LEN’”
【解决方案】:
wireless.h文件最后增加以下两行:
#undef IW_EV_LCP_PK_LEN
#undef IW_EV_POINT_PK_LEN
unsigned int)’ [-Werror,-Wimplicit-function-declaration]”
【解决方案】:
修改iwlibh,增加以下定义:
#define bzero(buffer, size) memset(buffer, 0, size)
5、构建结果
构建生成的iwconfig/iwevent/iwgetid/iwlist/iwpriv/iwspy位于系统的system/bin目录下