Hi3518ev300(Huawei LiteOS 3.2.3)內核移植 iperf 工具所做的改動,參照Hi3516ev100的內核(支持iperf)

環境信息:

SDK版本信息(LiteOS開發包):

Hi3516EV200R002C05SPC011\01.software\board\Hi3516EV200_SDK_V5.0.1.1

LiteOS版本信息:

version : Huawei LiteOS V200R002C00SPC050B012

open-version : Huawei LiteOS 3.2.3

    1. iperf
      1. 概述

Iperf 是一個網絡性能測試工具。Iperf可以測試最大TCP和UDP帶寬性能,具有多種參數和UDP特性,可以根據需要調整,可以報告帶寬、延遲抖動和數據包丟失

      1. 移植流程

您可以按照下述流程一步步完成iperf的移植,也可以直接使用6.8.2.5 (就是下方的編譯環節)編譯。

        1. 源碼獲取

Iperf源碼包可以從下面網址下載“iperf-2.0.5.tar.gz”,版本號爲2.0.5。下載地址: https://sourceforge.net/projects/iperf/

        1. 配置./configure

運行./configure對iperf進行配置,並生成相關的Makefile文件

        1. 修改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

        1. 修改.c源文件

主要修改思路:

  1. 刪除不必要的源碼文件;
  2. 刪除與系統有衝突接口定義或聲明,直接引用系統接口;
  3. 根據系統適配,刪除不支持接口的調用或移植不支持的接口;
        1. 編譯

完成上述修改的源碼包和解壓後未經修改的源碼包相比,差異patch如下,供參考。

https://download.csdn.net/download/spy_007_/12317835

也可跳過上述修改步驟,直接將.patch文件放到iperf2.0.5源碼的根目錄下,執行patch 命令:

                                patch -p2 < iperf-2.0.5.patch 即可

 

具體編譯鏈接步驟如下:

  1. 將iperf源碼包放在liteos主目錄下的tools目錄下
  2. 在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

  1. 在tools/menuconfig/extra/Configs/Config.in中增加:

source "../../tools/iperf-2.0.5/Kconfig"

  1. 通過make menuconfig選擇iperf

Debug->Enable a Debug Version->Enable Shell->Enable Iperf-2.0.5

注意,Hi3518ev300的Liteos內核(3.2.3)起始已經刪除了對iperf的支持,所以纔會有以下額外的移植操作

  1. 在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打開方式(包括運行時閃退的問題):

https://blog.csdn.net/weixin_43914200/article/details/88966108#%E4%B8%80.%E8%BD%AF%E4%BB%B6%E4%B8%8B%E8%BD%BD

----------注意事項------------------------------------------------------------------------------------------------

server 端和 client 端的iperf版本儘量保持一致,否則可能出現測試異常,

各平臺 iperf3 版本下載:https://iperf.fr/iperf-download.php

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章