iperf移植到ARM上出现问题的解决

2 篇文章 0 订阅
1 篇文章 0 订阅

最近要使用iperf测试wifi模块的延时,所以重点研究了一下iperf.

1.安装使用

我主要是使用的linux,安装和使用方法其他文档有很详细的介绍,在此不再赘述,具体可参考下面链接:

iperf命令

2.iperf移植到ARM

这里关键点事交叉编译的问题,我是添加了一个Makefile文件,具体如下:

CUR_DIR := $(shell pwd)
OSDRV_CROSS ?= arm-himix100-linux

################################################################################
#https://download.savannah.gnu.org/releases/freetype/freetype-2.9.1.tar.gz
BUILD := iperf-3.1.2
################################################################################
.PHONY: $(BUILD) clean distclean
defalut: $(BUILD)
################################################################################

download:
	#@if [ ! -f $(BUILD).tar.gz ]; then curl --insecure -O https://download.savannah.gnu.org/releases/****/$(BUILD).tar.gz; fi

$(BUILD): download
	@if [ ! -d  "$(BUILD)" ]; then\
		tar -xzf $(BUILD).tar.gz;\
		cd $(BUILD);./configure --prefix=$(CUR_DIR)/$(BUILD)/_INSTALL --host=$(OSDRV_CROSS);cd -;\
	fi

	make -C $(BUILD)
	make install -C $(BUILD)

clean:
	-make -C $(BUILD) clean

distclean: clean
	-rm -rf $(BUILD)

################################################################################

也就是在./configure 后面添加了一个指定的交叉编译工具链arm-himix100-linux  :--host=$(OSDRV_CROSS),因为我板子用的就是这个,如果ARM板用的是其他的编译工具链更换成对应的就行了。编译后直接报错:

/opt/hisi-linux/x86-arm/arm-himix100-linux/host_bin/../lib/gcc/arm-linux-uclibceabi/6.3.0/../../../../arm-linux-uclibceabi/bin/ld: cannot find gcrt1.o: No such file or directory

这个gcrt1.不知道是啥,然后osdrv的tool下工具对应的Makefile对比发现少了头文件路径的指定,所以加了LDFLAGS="$(OSDRV_CROSS_CFLAGS)" CFLAGS="$(OSDRV_CROSS_CFLAGS)",照猫画虎:
 

CUR_DIR := $(shell pwd)
OSDRV_CROSS ?= arm-himix100-linux
OSDRV_CROSS_CFLAGS ?= -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4

################################################################################
#https://download.savannah.gnu.org/releases/freetype/freetype-2.9.1.tar.gz
BUILD := iperf-3.1.2
################################################################################
.PHONY: $(BUILD) clean distclean
defalut: $(BUILD)
################################################################################

download:
	#@if [ ! -f $(BUILD).tar.gz ]; then curl --insecure -O https://download.savannah.gnu.org/releases/freetype/$(BUILD).tar.gz; fi

$(BUILD): download
	@if [ ! -d  "$(BUILD)" ]; then\
		tar -xzf $(BUILD).tar.gz;\
		cd $(BUILD);./configure --prefix=$(CUR_DIR)/$(BUILD)/_INSTALL LDFLAGS="$(OSDRV_CROSS_CFLAGS)" CFLAGS="$(OSDRV_CROSS_CFLAGS)"  --host=$(OSDRV_CROSS) ;cd -;\
	fi

	make -C $(BUILD)
	make install -C $(BUILD)

clean:
	-make -C $(BUILD) clean

distclean: clean
	-rm -rf $(BUILD)
#
################################################################################

然后继续编译:依然是那个错误,查询发现arm-himix200-linux中有这个,然后将OSDRV_CROSS 指定为arm-himix200-linux,发现没问题,竟然过了,接下来我想的是直接一步到位把ARM板的编译器直接改了,改成200的,结果发现make menuconfig中竟然不支持arm-himix200-linux,计划泡汤,继续修改程序吧,投机取巧失败。

完全不知道为什么出错的自己也很迷茫,然后各种找资料,然后在一篇文章中了解到需要把iperf中src/Makefile.in中第613行和第615中的参数-pg去掉,保留-g,编译试一下,竟然直接通过了。

解释如下:

调试选项-g和-pg

  GCC 支持数种调试和剖析选项,常用到的是 -g 和 -pg 。

 -g 选项告诉 GCC 产生能被 GNU 调试器使用的调试信息以便调试你的程序。GCC 提供了一个很多其他 C 编译器里没有的特性, 在 GCC 里你能使-g 和 -O (产生优化代码)联用。

 -pg 选项告诉 GCC 在编译好的程序里加入额外的代码。运行程序时, 产生 gprof 用的剖析信息以显示你的程序的耗时情况。

3.移植

移植之前还要先判断一下生成的iperf3是不是linux文件, 方法:objdump -a iperf3

结果显示
iperf3:     file format elf32-little
iperf3

而不是  x86

移植时一定要将lib下的libiperf.so移植走,注意这个是链接文件  拷贝是用cp -l

链接文件要放到板子的/usr/lib下面,方便执行。

 

 

前面为什么把-pg去掉就编译正常了,我也是懵懵的。不知道为什么,有知道的希望能留言告诉我。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怀想天空2011

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值