• I.MX6 Android iperf3 porting failed


    /*****************************************************************************
     *                    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. 最后这部分出现的问题,没找到解决办法,虽然参考文章里面有人说能解决,但我自己尝试那么做了,未解决。
  • 相关阅读:
    [LeetCode82]Remove Duplicates from Sorted List II
    IOS开发常见BUG和一些小技巧(PS:耐心看完,很实用)
    IOS-一步一步教你自定义评分星级条RatingBar
    iOS手机淘宝加入购物车动画分析
    iOS mac终端下的SQL语句
    iOS SQLite 数据库迁移
    iOS 判断两个日期之间的间隔
    iOS应用架构谈 本地持久化方案及动态部署
    用 SQLite 和 FMDB 替代 Core Data
    ios 消除 字符串 首尾空格
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5355553.html
Copyright © 2020-2023  润新知