I.MX6 Android iperf3 porting failed

简介: /***************************************************************************** * I.MX6 Android iperf3 porting failed * 说明: * 本来想移植一下iperf3到Android系统上测试一下网卡,可能是版本高了点,最后 * 运行客户端的时候会报错,也找了一些解决办法,但还是未能解决。
/*****************************************************************************
 *                    I.MX6 Android iperf3 porting failed
 * 说明:
 *     本来想移植一下iperf3到Android系统上测试一下网卡,可能是版本高了点,最后
 * 运行客户端的时候会报错,也找了一些解决办法,但还是未能解决。
 *
 *                                          2016-4-5 深圳 南山平山村 曾剑锋
 ****************************************************************************/


一、参考文档:
    1. sys/fcntl.h : no such file while cross compiling pcsclite for Android?
        http://stackoverflow.com/questions/12384353/sys-fcntl-h-no-such-file-while-cross-compiling-pcsclite-for-android
    2. Iperf for Android-4.1 移植 
        http://blog.chinaunix.net/uid-24410388-id-3669153.html
    3. unable to create a new stream: No such file or directory
        https://github.com/esnet/iperf/issues/374
    4. How to compile iperf3 for Windows
        http://www.embeddedsystemtesting.com/2014/08/how-to-compile-iperf3-for-windows.html

二、download:
    url: https://github.com/esnet/iperf

三、解决缺少头文件的问题:
    由于直接编译Android shell程序的时候会出现缺少.h文件,于是先执行下面这行代码,貌似可以解决头文件的问题:
           ./configure --host=arm-none-linux-gnueabi CXX=arm-none-linux-gnueabi-g++ CXXFLAGS=-static CC=arm-none-linux-gnueabi-gcc CFLAGS=-static

四、get .c file
    zengjf@zengjf:~/ipref/iperf-master/src$ ls -al *.c | awk '{print $9}' | sed -e "s/^/src\//" -e "s/$/\\\/"
    src/cjson.c\
    src/iperf_api.c\
    src/iperf_client_api.c\
    src/iperf_error.c\
    src/iperf_locale.c\
    src/iperf_sctp.c\
    src/iperf_server_api.c\
    src/iperf_tcp.c\
    src/iperf_udp.c\
    src/iperf_util.c\
    src/main.c\
    src/net.c\
    src/tcp_info.c\
    src/tcp_window_size.c\
    src/timer.c\
    src/t_timer.c\
    src/t_units.c\
    src/t_uuid.c\
    src/units.c\
    zengjf@zengjf:~/ipref/iperf-master/src$ 

五、compile for Android:
    cat Android.mk
        # external/i2c-tools/Android.mk
        LOCAL_PATH:= $(call my-dir)
        include $(CLEAR_VARS)
        
        LOCAL_SRC_FILES += \
        src/cjson.c\
        src/iperf_api.c\
        src/iperf_client_api.c\
        src/iperf_error.c\
        src/iperf_locale.c\
        src/iperf_sctp.c\
        src/iperf_server_api.c\
        src/iperf_tcp.c\
        src/iperf_udp.c\
        src/iperf_util.c\
        src/main.c\
        src/net.c\
        src/tcp_info.c\
        src/tcp_window_size.c\
        src/timer.c\
        src/units.c\
        #src/t_timer.c\            # 这里有main函数,需要另外写可执行脚本
        #src/t_units.c\            # 这里有main函数,需要另外写可执行脚本
        #src/t_uuid.c\            # 这里有main函数,需要另外写可执行脚本
         
        LOCAL_C_INCLUDES +=       \
            $(LOCAL_PATH)         \
            $(LOCAL_PATH)/include \
            $(LOCAL_PATH)/src
         
        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)

六、编译结果:
    ......
    target thumb C: iperf <= /home/zengjf/c_program/ipref/iperf-master/src/cjson.c
    target Executable: iperf (out/target/product/sabresd_6dq/obj/EXECUTABLES/iperf_intermediates/LINKED/iperf)
    target Symbolic: iperf (out/target/product/sabresd_6dq/symbols/system/xbin/iperf)
    target Strip: iperf (out/target/product/sabresd_6dq/obj/EXECUTABLES/iperf_intermediates/iperf)
    Install: out/target/product/sabresd_6dq/system/xbin/iperf
    make: Leaving directory `/home/zengjf/myandroid'
    zengjf@zengjf:~/myandroid$ 
        
七、执行效果:
    1. root@android:/data/local # ./iperf                                           
        iperf3: parameter error - must either be a client (-c) or server (-s)

        Usage: iperf [-s|-c host] [options]
               iperf [-h|--help] [-v|--version]

        Server or Client:
          -p, --port      #         server port to listen on/connect to
          -f, --format    [kmgKMG]  format to report: Kbits, Mbits, KBytes, MBytes
          -i, --interval  #         seconds between periodic bandwidth reports
          -F, --file name           xmit/recv the specified file
          -A, --affinity n/n,m      set CPU affinity
          -B, --bind      <host>    bind to a specific interface
          -V, --verbose             more detailed output
          -J, --json                output in JSON format
          --logfile f               send output to a log file
          --forceflush              force flushing output at every interval
          -d, --debug               emit debugging output
          -v, --version             show version information and quit
          -h, --help                show this message and quit
        Server specific:
          -s, --server              run in server mode
          -D, --daemon              run the server as a daemon
          -I, --pidfile file        write PID file
          -1, --one-off             handle one client connection then exit
        Client specific:
          -c, --client    <host>    run in client mode, connecting to <host>
          -u, --udp                 use UDP rather than TCP
          -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited)
                                    (default 1 Mbit/sec for UDP, unlimited for TCP)
                                    (optional slash and packet count for burst mode)
          -t, --time      #         time in seconds to transmit for (default 10 secs)
          -n, --bytes     #[KMG]    number of bytes to transmit (instead of -t)
          -k, --blockcount #[KMG]   number of blocks (packets) to transmit (instead of -t or -n)
          -l, --len       #[KMG]    length of buffer to read or write
                                    (default 128 KB for TCP, 8 KB for UDP)
          --cport         <port>    bind to a specific client port (TCP and UDP, default: ephemeral port)
          -P, --parallel  #         number of parallel client streams to run
          -R, --reverse             run in reverse mode (server sends, client receives)
          -w, --window    #[KMG]    set window size / socket buffer size
          -C, --congestion <algo>   set TCP congestion control algorithm (Linux and FreeBSD only)
          -M, --set-mss   #         set TCP/SCTP maximum segment size (MTU - 40 bytes)
          -N, --no-delay            set TCP/SCTP no delay, disabling Nagle's Algorithm
          -4, --version4            only use IPv4
          -6, --version6            only use IPv6
          -S, --tos N               set the IP 'type of service'
          -L, --flowlabel N         set the IPv6 flow label (only supported on Linux)
          -Z, --zerocopy            use a 'zero copy' method of sending data
          -O, --omit N              omit the first n seconds
          -T, --title str           prefix every output line with this string
          --get-server-output       get results from server
          --udp-counters-64bit      use 64-bit counters in UDP test packets

        [KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-

        iperf3 homepage at: http://software.es.net/iperf/
        Report bugs to:     https://github.com/esnet/iperf
        1|root@android:/data/local # 
    2. root@android:/data/local # ./iperf -s &                       
        [1] 13511
        -----------------------------------------------------------
        Server listening on 5201
        -----------------------------------------------------------
        root@android:/data/local # 
    3. root@android:/data/local # ./iperf -c 127.0.0.1 -i 1 -w 1M                 
        Connecting to host 127.0.0.1, port 5201
        iperf3: error - unable to create a new stream: No such file or directory
        Accepted connection from 127.0.0.1, port 49340
        iperf3: the client has unexpectedly closed the connection
        -----------------------------------------------------------
        Server listening on 5201
        -----------------------------------------------------------
        1|root@android:/data/local # 
    4. 最后这部分出现的问题,没找到解决办法,虽然参考文章里面有人说能解决,但我自己尝试那么做了,未解决。

 

目录
相关文章
|
Java Android开发 C语言
I.MX6 android mkuserimg.sh
/************************************************************************** * I.MX6 android mkuserimg.sh * 说明: * 修改了android源代码中的一些内容之后,如果内容过多,不能确定到底修改 * 了system目录下的哪些文件,于是可能要重新make,但这实在是让人难以接受, * 因为等待的时间会很长,于是从make命令最后看到mkuserimg.sh是用来最后对文件 * 系统进行打包的,先记录,以后再解读。
1265 0
|
Android开发
I.MX6 Android backlight modify by C demo
/************************************************************************** * I.MX6 Android backlight modify by C demo * 说明: * 因为一些特殊情况,需要添加一个这个简单的控制程序来控制android背光 * 亮度,个人感觉是没有必要的,但是应要求还是加上。
793 0
|
Android开发 测试技术 Linux
I.MX6 Android netperf
/***************************************************************************** * I.MX6 Android netperf * 说明: * 之前移植iperf3网络测试工具不成功,本来想再移植一个iperf2来试一下,但是 * 在检查Android源码系统的时候不小心看到netperf文件夹,查了点资料,貌似可以实 * 现iperf的功能,于是又省了点事。
1010 0
|
Shell Linux Android开发
I.MX6 Android Linux shell MMPF0100 i2c 设置数据
#!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 设置数据 # 说明: # 本文主要记录通过shell脚本来设置MMPF0100的数据。
862 0
|
Shell Linux Android开发
I.MX6 Android Linux shell MMPF0100 i2c 获取数据
#!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 获取数据 # 说明: # 本文主要记录通过shell脚本来获取MMPF0100的数据,更多的是为了更为 # 方便的获取到数据,在进行一些调试的时候能够更有效。
721 0
|
Android开发 Linux
I.MX6 Android i2c-tools porting
/************************************************************************** * I.MX6 Android i2c-tools porting * 说明: * 判断I2C总线设备是否存在,每次都去查dmesg,实在是烦了,于是还是移植 * 一个i2c-tools比较好,不用翻那长长内核信息。
1189 0
|
Android开发
I.MX6 android shutdown 内核崩溃
/**************************************************************************** * I.MX6 android shutdown 内核崩溃 * 说明: * 本文主要是记录解决I.MX6的关机会进入halt模式,导致内核崩溃。
864 0
|
Java Android开发
I.MX6 android 禁止低电量自动关机
/************************************************************************ * I.MX6 android 禁止低电量自动关机 * 说明: * 记录如何禁止Android低电量自动关机的功能。
1147 0
|
Android开发
I.MX6 android 移除shutdown功能
/************************************************************************ * I.MX6 android 移除shutdown功能 * 说明: * 有时候,我们可能会只是不需要android中的shutdown功能。
882 0
|
Java Android开发 数据格式
I.MX6 Android 移除 Settings wifi功能
/********************************************************************* * I.MX6 Android 移除 Settings wifi功能 * 说明: * 本文主要记录如何修改Android Settings中的主选项,初衷是有些 * 设置并不是我们需要,隐藏掉还是比较好的。
932 0