環境信息:
SDK版本信息(LiteOS開發包):
Hi3516EV200R002C05SPC011\01.software\board\Hi3516EV200_SDK_V5.0.1.1
LiteOS版本信息:
version : Huawei LiteOS V200R002C00SPC050B012
open-version : Huawei LiteOS 3.2.3
Iperf 是一個網絡性能測試工具。Iperf可以測試最大TCP和UDP帶寬性能,具有多種參數和UDP特性,可以根據需要調整,可以報告帶寬、延遲抖動和數據包丟失
您可以按照下述流程一步步完成iperf的移植,也可以直接使用6.8.2.5 (就是下方的編譯環節)編譯。
Iperf源碼包可以從下面網址下載“iperf-2.0.5.tar.gz”,版本號爲2.0.5。下載地址: https://sourceforge.net/projects/iperf/
運行./configure對iperf進行配置,並生成相關的Makefile文件
修改文件:修改頂層Makefile
修改說明:適配liteos的工具鏈和LITEOS_FLAGS,增加Makefile進行iperf源碼編譯,生成庫文件。文件內容可參考如下:
# A simple Makefile for lib(libxxx.a)
# By Late Lee(http://www.latelee.org)
include $(LITEOSTOPDIR)/config.mk
INCLUDE_PATH += -I include -I oss_inc/
ifeq ($(LOSCFG_COMPILER_HIMIX100_64), y)
CMNFLAGS:=-Wall -Wpointer-arith -Wundef -Wno-write-strings \
$(LITEOS_ARM_ARCH) -O2 -ffunction-sections -fdata-sections \
-fno-short-enums $(INCLUDE_PATH)
else
CMNFLAGS:=-Wall -Wpointer-arith -Wundef -Wno-write-strings \
-mno-thumb-interwork \
$(LITEOS_ARM_ARCH) -O2 -ffunction-sections -fdata-sections \
-fno-short-enums $(INCLUDE_PATH)
endif
CFLAGS += $(LITEOS_CMACRO) $(CMNFLAGS) -Wstrict-prototypes -fno-builtin
CXXFLAGS := $(LITEOS_CMACRO) $(CMNFLAGS) -Woverloaded-virtual -fno-rtti -fpermissive -fno-builtin -fexceptions
ARFLAGS = cr
LIBOUT = $(BUILD)/iperf
LIB_IPERF = $(OUT)/lib/libiperf.a
all: $(LIBOUT) $(LIB_IPERF)
RM = -rm -rf
LIB_IPERF_CPPSRC = src/Client.cpp \
src/Launch.cpp \
src/List.cpp \
src/Listener.cpp \
src/main.cpp \
src/PerfSocket.cpp \
src/Settings.cpp \
src/Server.cpp
LIB_IPERF_CSRC = src/Extractor.c \
src/ReportCSV.c \
src/ReportDefault.c \
src/Reporter.c \
src/SocketAddr.c \
src/sockets.c \
src/Locale.c \
src/stdio.c \
src/tcp_window_size.c \
src/gnu_getopt.c \
src/gnu_getopt_long.c \
src/iperf_shell.c \
compat/error.c \
compat/string.c \
compat/Thread.c
LIB_IPERF_CSRC += oss_adapt/oss_list.c \
oss_adapt/oss_string.c \
oss_adapt/oss_memfile.c \
oss_adapt/oss_timer.c \
oss_adapt/os_support.c
LIB_IPERF_COBJ = $(patsubst %.c,$(LIBOUT)/%.o,$(LIB_IPERF_CSRC))
LIB_IPERF_CPPOBJ = $(patsubst %.cpp,$(LIBOUT)/%.o,$(LIB_IPERF_CPPSRC))
LIB_IPERF_OBJ = $(LIB_IPERF_COBJ) $(LIB_IPERF_CPPOBJ)
$(LIB_IPERF_OBJ): $(LIBOUT)
$(LIB_IPERF_COBJ): $(LIBOUT)/%.o : %.c
@$(CC) $(CFLAGS) $(LITEOS_INCLUDE) -c $< -o $@
$(LIB_IPERF_CPPOBJ): $(LIBOUT)/%.o : %.cpp
@$(GPP) $(CXXFLAGS) $(LITEOS_INCLUDE) -c $< -o $@
$(LIB_IPERF): $(LIB_IPERF_OBJ)
@$(AR) $(ARFLAGS) $@ $(LIB_IPERF_OBJ)
$(LIBOUT):
mkdir -p $(LIBOUT)/src $(LIBOUT)/compat
mkdir -p $(LIBOUT)/oss_adapt
clean:
@$(RM) $(LIBOUT) $(LIB_IPERF) *.bak *~
.PHONY: all clean
-
-
-
- 修改.c源文件
-
-
主要修改思路:
完成上述修改的源碼包和解壓後未經修改的源碼包相比,差異patch如下,供參考。
https://download.csdn.net/download/spy_007_/12317835
也可跳過上述修改步驟,直接將.patch文件放到iperf2.0.5源碼的根目錄下,執行patch 命令:
patch -p2 < iperf-2.0.5.patch 即可
- 將iperf源碼包放在liteos主目錄下的tools目錄下
- 在build/mk/los_config.mk中增加
ifeq ($(LOSCFG_TOOLS_IPERF), y)
LITEOS_LD_OPTS += -uiperf_shellcmd
LITEOS_BASELIB += -liperf
LIB_SUBDIRS += tools/iperf-2.0.5
endif
- 在tools/menuconfig/extra/Configs/Config.in中增加:
source "../../tools/iperf-2.0.5/Kconfig"
- 通過make menuconfig選擇iperf
Debug->Enable a Debug Version->Enable Shell->Enable Iperf-2.0.5
注意,Hi3518ev300的Liteos內核(3.2.3)起始已經刪除了對iperf的支持,所以纔會有以下額外的移植操作
- 在LiteOS源碼主目錄下make生成系統鏡像。
----------以下爲Hi3518ev300 LiteOS內核實際操作的額外筆記---------------------------------------------------------------------------------
Hi3518ev300爲了移植iperf所做的改動,參照Hi3516ev100 的內核:
搜索關鍵詞LOSCFG_TOOLS_IPERF
Hi3516ev100:
[root@localhost liteos]#
[root@localhost liteos]# grep -r "LOSCFG_TOOLS_IPERF"
.config:LOSCFG_TOOLS_IPERF=y
tools/menuconfig/sys_config.h:#define __LOSCFG_TOOLS_IPERF__ 1
tools/scripts/module_coupling/module_decouple.sh: echo "LOSCFG_TOOLS_IPERF=y" >> .config
tools/scripts/module_coupling/module_decouple.sh: sed -i "s/LOSCFG_TOOLS_IPERF=y/LOSCFG_TOOLS_IPERF=n/g" .config
tools/iperf-2.0.5/src/iperf_shell.c:#ifdef LOSCFG_TOOLS_IPERF
tools/iperf-2.0.5/iperf-2.0.5.patch:+config LOSCFG_TOOLS_IPERF
tools/iperf-2.0.5/iperf-2.0.5.patch:+#ifdef LOSCFG_TOOLS_IPERF
tools/iperf-2.0.5/Kconfig:config LOSCFG_TOOLS_IPERF
config_hi3516cv300:# LOSCFG_TOOLS_IPERF is not set
build/mk/los_config.mk:ifeq ($(LOSCFG_TOOLS_IPERF), y)
build/mk/los_config.mk: LITEOS_CMACRO += -DLOSCFG_TOOLS_IPERF
[root@localhost liteos]#
[root@localhost liteos]#
Hi3518ev300:
[root@localhost liteos]# grep -r "LOSCFG_TOOLS_IPERF"
tools/iperf-2.0.5/src/iperf_shell.c:#ifdef LOSCFG_TOOLS_IPERF
tools/iperf-2.0.5/iperf-2.0.5.patch:+config LOSCFG_TOOLS_IPERF
tools/iperf-2.0.5/iperf-2.0.5.patch:+#ifdef LOSCFG_TOOLS_IPERF
tools/iperf-2.0.5/Kconfig:config LOSCFG_TOOLS_IPERF
build/mk/los_config.mk:ifeq ($(LOSCFG_TOOLS_IPERF), y)
[root@localhost liteos]#
Hi3518ev300對照上方Hi3516ev100的差異項一項一項去補充好。
最後設備APP項目編譯時(gcc編譯)應加上 -lstdc++ ,因爲iperf裏邊有一部分是g++編譯的
之後iperf測試可參照該篇博客(安裝以及使用):
https://www.cnblogs.com/saneri/p/11169926.html
windows下的iperf3打開方式(包括運行時閃退的問題):
----------注意事項------------------------------------------------------------------------------------------------
server 端和 client 端的iperf版本儘量保持一致,否則可能出現測試異常,
各平臺 iperf3 版本下載:https://iperf.fr/iperf-download.php