ltp-ddt realtime_cpu_load涉及的cyclictest 交叉编译
阅读原文时间:2023年07月10日阅读:1

Cyclictest 是 rt-tests 下的一个测试工具,也是rt-tests 下使用最广泛的测试工具,一般主要用来测试使用内核的延迟,从而判断内核的实时性。

1.下载源码

git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git

一直没法连接上。

转而手动下载

https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git/snapshot/rt-tests-1.3.tar.gz

解压:tar -zxvf rt-tests-1.3.tar.gz

2.交叉编译

make CROSS_COMPILE=arm-linux-gnueabihf-

error:

In file included from src/cyclictest/cyclictest.c:39:0:
src/cyclictest/rt_numa.h:29:10: fatal error: numa.h: No such file or directory

解决方案,安装依赖包:

export PATH=/opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin:$PATH

编译出来的结果在psoc上执行报./cyclictest: cannot execute binary file: Exec format error

后来找到原因,which arm-linux-gnueabihf-gcc /opt/petalinux/tools/linux-i386/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-gcc
所以是i386的,当然无法执行。

make报错impossible constraint in 'asm'
src/queuelat/queuelat.c: In function ‘main_loop’:
src/queuelat/queuelat.c:269:8: error: impossible constraint in ‘asm’
        asm volatile("cpuid; rdtsc" : EAX_EDX_RET(val, low, high));
        ^ src/queuelat/queuelat.c:269:8: error: impossible constraint in ‘asm’         asm volatile("cpuid; rdtsc" : EAX_EDX_RET(val, low, high));         ^
经查发现是src/queuelat/queuelat.c 269行
asm volatile("cpuid; rdtsc" : EAX_EDX_RET(val, low, high));

cpuid; rdtsc是x86汇编,替换为“NOP” arm汇编就不会报错了。

目前先将这一行//注释掉

make CROSS_COMPILE=arm-linux-gnueabihf-还是用的cc

vi Makefile

VERSION = 1.3CC?=$(CROSS_COMPILE)gccAR?=$(CROSS_COMPILE)ar

将这两条#注释掉然后在后面的目标中加入@echo

$(OBJDIR)/%.o: %.c | $(OBJDIR)&nbsp;&nbsp;&nbsp; @echo $(CC)&nbsp;&nbsp;&nbsp; $(CC) -D VERSION=$(VERSION) -c $< $(CFLAGS) $(CPPFLAGS) -o $@打印出CC就是cc已经定义了。

CCC语言编译程序。默认命令是“cc”。

再来看?=

还有一个比较有用的操作符是“?=”,先看示例:FOO ?= bar其含义是,如果FOO没有被定义过,那么变量FOO的值就是“bar”,如果FOO先前被定义过,那么这条语将什么也不做,其等价于:ifeq ($(origin FOO), undefined)FOO = barendif

所以CC就是cc

于是将

VERSION = 1.3CC?=$(CROSS_COMPILE)gccAR?=$(CROSS_COMPILE)ar

改为

VERSION = 1.3CC?=$(CROSS_COMPILE)gccAR?=$(CROSS_COMPILE)ar

CC=/opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc AR=/opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar

export PATH=/opt/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin:$PATHmakemake install DESTDIR=.

另外发现一个问题,

run_cyclictest $latency -S -p98 -m -n -q -D 2m

有一个参数-n

VERSION = 1.3中并没有这个参数

于是又下载了v1.0确实有-n