免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2880 | 回复: 0
打印 上一主题 下一主题

移植iperf到android [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-04 14:29 |只看该作者 |倒序浏览


软件环境:linux2.6.28 + android 1.5

由于iperf使用了autoconf,所以iperf的编译借助了另一个编译器(arm-none-linux-gnueabi)来生成config.h、Makefile等配置

1.    下载iperf-2.0.4.tar.gz

2.    解压到mydroid/external/iperf

3.    使用autoconf自动配置,并生成config.h,先确保gnueabi编译器可以正确编译
$ export PATH=/usr/local/arm-none-linux-gnueabi/bin:$PATH
$ ./configure --host=arm-none-linux-gnueabi ac_cv_func_malloc_0_nonnull=yes
必须添加ac_cv_func_malloc_0_nonnull=yes,否则编译时会报错undefined reference to `rpl_malloc'

4.    创建Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := \
  compat/Thread.c \
  compat/error.c \
  compat/delay.cpp \
  compat/gettimeofday.c \
  compat/inet_ntop.c \
  compat/inet_pton.c \
  compat/signal.c \
  compat/snprintf.c \
  compat/string.c

LOCAL_SRC_FILES += \
  src/Client.cpp \
  src/Extractor.c \
  src/Launch.cpp \
  src/List.cpp \
  src/Listener.cpp \
  src/Locale.c \
  src/PerfSocket.cpp \
  src/ReportCSV.c \
  src/ReportDefault.c \
  src/Reporter.c \
  src/Server.cpp \
  src/Settings.cpp \
  src/SocketAddr.c \
  src/main.cpp \
  src/sockets.c \
  src/stdio.c \
  src/tcp_window_size.c \
  src/gnu_getopt.c \
  src/gnu_getopt_long.c \
  src/service.c

LOCAL_C_INCLUDES +=       \
    $(LOCAL_PATH)         \
    $(LOCAL_PATH)/include

LOCAL_CFLAGS  +=  -O2
LOCAL_CFLAGS += -DHAVE_CONFIG_H

LOCAL_LDLIBS           += -lpthread

LOCAL_SHARED_LIBRARIES := libc libm libcutils libnetutils

LOCAL_MODULE := iperf

#LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
#LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED)
#LOCAL_MODULE_TAGS := eng user

include $(BUILD_EXECUTABLE)

5.    编译
$ cd mydroid
$ source build/envsetup.sh
$ mmm external/iperf

编译报错:
external/testtools/iperf/compat/signal.c:135: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'my_signal'

经查原因为:iperf/include/util.h与bionic/libc/include/util.h冲突导致
解决方法:因搞不清如何改变include的先后顺序,所以用稍笨一点但很简单的方法进行解决,将util.h另存一份为util_iperf.h,同时将所有包含util.h的地方改为util_iperf.h

再次编译仍有报错:
external/testtools/iperf/src/Listener.cpp:382: error: 'struct ipv6_mreq' has no member named 'ipv6mr_interface'

经查bionic/libc/kernel/common/linux/In6.h中的定义为
struct ipv6_mreq {
struct in6_addr ipv6mr_multiaddr;
int ipv6mr_ifindex;
};
确实不存在ipv6mr_interface了,所以将382行改为mreq.ipv6mr_ifindex = 0;

至此编译完成,下载到目标板上,可以执行。还未使用此工具进行性能测试,未知上述方法编译的程序是否存在问题。待验证


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/97236/showart_1955023.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP