http://blog.csdn.net/darkengine/article/details/7024459
最近在调试WIFI softap功能,发现netd源码中包含"iwpriv"相关的注释,这个工具应该会对WIFI调试非常有用,于是准备将其移植到Android上。
首先到这里下载源码,然后解压,按照网上搜出来的方法,把目录里头Makefile的CC,AR等改成交叉编译所用的,但是发现make all的时候报缺少头文件错误。用-I将头文件引入之后在ld阶段又报缺少crt0.o。折腾了半天之后依然无果,于是决定直接在目录下加个Android.mk用Android的make来编译。
一次尝试之后竟然成功了,泪流满面,以下是具体步骤:
1,在目录下cp -f wirless.29.h wirelss.h (自带的Makefile就是这么干的,根据版本选择头文件,我下载的是.29版本)
2,在目录下加入Android.mk,内容如下:
- # Copyright (C) 2008 The Android Open Source Project
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- LOCAL_PATH := $(call my-dir)
- ifneq ($(TARGET_SIMULATOR),true)
- include $(CLEAR_VARS)
- LOCAL_MODULE := libiw
- LOCAL_MODULE_TAGS := eng
- LOCAL_SRC_FILES := iwlib.c
- LOCAL_C_INCLUDE += LOCAL_PATH
- #LOCAL_SHARED_LIBRARIES := libiw
- LOCAL_PRELINK_MODULE := false
- include $(BUILD_SHARED_LIBRARY)
- #================================================
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := eng
- LOCAL_SRC_FILES := iwpriv.c
- LOCAL_SHARED_LIBRARIES := libiw
- LOCAL_MODULE := iwpriv
- include $(BUILD_EXECUTABLE)
- #================================================
- #================================================
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := eng
- LOCAL_SRC_FILES := iwlist.c
- LOCAL_SHARED_LIBRARIES := libiw
- LOCAL_MODULE := iwlist
- include $(BUILD_EXECUTABLE)
- #================================================
- #================================================
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := eng
- LOCAL_SRC_FILES := iwconfig.c
- LOCAL_SHARED_LIBRARIES := libiw
- LOCAL_MODULE := iwconfig
- include $(BUILD_EXECUTABLE)
- #================================================
- #================================================
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := eng
- LOCAL_SRC_FILES := iwspy.c
- LOCAL_SHARED_LIBRARIES := libiw
- LOCAL_MODULE := iwspy
- include $(BUILD_EXECUTABLE)
- #================================================
- #================================================
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := eng
- LOCAL_SRC_FILES := iwgetid.c
- LOCAL_SHARED_LIBRARIES := libiw
- LOCAL_MODULE := iwgetid
- include $(BUILD_EXECUTABLE)
- #================================================
- #================================================
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := eng
- LOCAL_SRC_FILES := iwevent.c
- LOCAL_SHARED_LIBRARIES := libiw
- LOCAL_MODULE := iwevent
- include $(BUILD_EXECUTABLE)
- #================================================
- endif # !TARGET_SIMULATOR
3,在目录下mm,将生成的libiw.so用adb push到/system/lib,其他的iwxxx push到/system/bin。
PS: 有用自带的Makefile编译成功的同学请指点一下啊。
-
2楼
wupenghuinice 2012-06-08 15:32发表
-
你好,我想向你了解下怎么获得连接到softap上的用户列表?目前的话我只看到了netd跟dnsmasq交互,会把connected的列表写到dnsmasq.leases中,但是我得到的这个表不会自动更新,看下楼主有什么其他见解没
-
Re:
TechStone 2012-06-08 18:02发表
- 这个比较难,其他设备连接进来的时候还好说,一旦连接成功就会更新dnsmasq.leases,但是别的设备断开连接的时候不会马上就反映出来,而是会有经过一个超时才会确认离开,然后把这个设备的信息清除更新列表回复wupenghuinice:
-
1楼
geraint0923y 2012-05-29 21:28发表
-
我倒是能够直接用Makefile编译,能在android上运行,不知道楼主说的用Android.mk编译使用哪个命令?是ndk-build吗?
-
Re:
TechStone 2012-05-30 18:27发表
- 没有改动过东西直接就能编译通过?我时把这些放到高通的源码上,然后用mm命令编译的,不是ndk-build。不过用ndk-build编译这个应该也可以回复geraint0923y: