Xenomai4 入门

天狼星 2022-05-28 02:12:02

第1章 使用Xemomai前的准备工作

1.1 EVL/libevl内核源码获取

首先请登录xenomai4官网:https://evlproject.org/下载稳定版本:linux-evl-v5.15.18-evl1-rebase.tar.gz和libevl-r31.tar.gz。

 

 

1.2 windows与linux之间传输文件工具WinSCP

通过winscp工具把本地windows磁盘上下载好的linux-evl-v5.15.18-evl1-rebase.tar.gz和libevl-r31.tar.gz上传到linux目录下:

 

 

 

1.3 内核配置选项注意事项

make menuconfig以后在生成的.config文件里面禁掉一下选项,否则会导致编译出错!

CONFIG_SYSTEM_TRUSTED_KEYS=""

CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""

CONFIG_SYSTEM_REVOCATION_KEYS=""

CONFIG_MODULE_SIG_KEY="certs/1 signing_key.pem"

1.4 meson 编译libevl环境准备

1.4.1 meson Ninja概述

如何使用 Ninja 和 Meson 构建Linux下Build 编译程序这是两个很棒的构建工具。

如果说Ninja是linux下Make的替代品,那末Meson是CMake的替代品。

就像您使用CMake(创建CMakeLists.txt文件)生成Makefile文件然后使用make命令一样。

虽然您也可以使用 CMake for Ninja。您使用Meson(创建meson.ninja文件)生成ninja.build文件,然后使用ninja命令。

但是怎么做呢?

如何使用 Ninja 编译程序?

Ninja是一个专注于速度的小型构建系统。从本质上讲,Ninja 是Make的替代品。Ninja 被多个项目使用,其主要客户端为Google Chrome和Android,并且被大多数从事LLVM工作的开发人员使用。

与 Make 不同,必须使用“构建生成器”来生成 Ninja 构建文件。Gyp、CMake、Meson和gn是流行的构建管理软件工具,支持为 Ninja 创建构建文件。

该过程与Make的过程非常相似。

在C中编译单个文件:假设您在C :中有此代码( Hello, World!)

在此示例中,我们使用命令 [gcc]https://en.terminalroot.com.br/gnu-autotools-ultimate-tutorial-for-beginners/) 编译单个文件,vim main.c

#include<stdio.h>

int main(int argc, char **argv) {

  printf("Hello, World!\n");

  return 0;

}

 

 

 

 

要使用 Ninja 进行编译,您需要创建一个具有以下内容的 ** build.ninja ** 文件:vim build.ninja

 

 

rule cc

  command = gcc -c -o $out $in

  description = CC $out

 

rule link

  command = gcc -o $out $in

  description = LINK $out

 

build src.o: cc main.c

build demo-c: link src.o

 

 

分析上面的文件,根据之前对Make的了解,我们注意到将要编译的文件我们定义为:main.c,临时文件我们称为src.o,最终的二进制文件我们命名为demo-c 。

 

现在,只需在您保存的目录中并通过命令行运行:

 

然后运行程序:

 

 

 

 

有几个选项,例如清理临时文件和其他选项,有关更多详细信息,请访问手册。

https://ninja-build.org/manual.html

下面我们用C++编译多个文件:

对于这个例子,我们将使用Dec2Bin ,这是一个在C++中将十进制转换为二进制的小程序。在这个例子中,我们使用命令g++来编译多个文件。有3 个文件,其中1 个只是一个.hpp库:

vim main.cpp

 

 

 

 

#include <iostream>

#include <string>

#include "dectobin.hpp"

 

int main( int argc , char** argv ) {

  Dectobin db;

  std::cout << ( argc > 1 ? db.dtob( argv[1] ) : db.get_m_help() ) << "\n";

  return 0;

}

 

 

vim dectobin.hpp

 

 

#ifndef DEC_TO_BIN_H

#define DEC_TO_BIN_H

class Dectobin{

    public:

        std::string dtob( char * num );

        void set_m_help();

        std::string get_m_help();

 

    private:

        const static int m_max{20};

        int m_number;

        int m_modules[ m_max ];

        int m_i;

        std::string m_output;

        std::string m_help;

};

#endif

 

 

 vim dectobin.cpp

 

 

#include <iostream>

#include <string>

#include "dectobin.hpp"

 

std::string Dectobin::dtob( char * num ){

      m_number = std::stoi( num );

      if ( m_number == 0 ) {

        m_output = "0";

      }else{

        for (m_i = 0; m_number > 0; m_i++) {

          m_modules[m_i] = m_number % 2;

          m_number = m_number / 2;

        }

        for (m_i = m_i - 1; m_i >= 0; m_i--) {

          m_output += std::to_string( m_modules[m_i] );

        }

      }

    return m_output;

}

 

void Dectobin::set_m_help(){

    m_help = "Enter a number.";

}

 

std::string Dectobin::get_m_help(){

    set_m_help();

    return m_help;

}

与上一个方法相同,我们将创建一个文件build.ninja,仅具有以下设置:

 

 

 

 

rule cc

  command = g++ -c -o $out $in

  description = CC $out

 

rule link

  command = g++ -o $out $in

  description = LINK $out

 

build source1.o: cc main.cpp

build source2.o: cc dectobin.cpp

build program-cpp: link source1.o source2.o

然后只需运行ninja命令,program-cpp文件将在同一目录中准备好。请参阅下图中的输出,我们使用程序将十进制数:8转换为二进制数:1000:

 

 

 

如何使用 Meson Build 编译程序?

 

 

Meson是一种软件工具,用于自动构建(编译)软件。他是ninja的前端。Meson 是在 Apache 许可证 2.0 下用 Python 编写的免费开源软件。

Meson支持语言C、C++、CUDA、D、Objective-C、Fortran、Java、C#、Rust 和 Vala,并有一种处理依赖关系的机制称为 Wrap。

Meson 支持 GNU Compiler Collection、Clang、Microsoft Visual Studio 等。

如何用Meson编译程序?

为了简单的理解,我们创建一个程序Hello, World!的示例。在C++中。假设您有以下文件:

 

 

 

#include <iostream>

int main(){

    std::cout << "Hello, World! Meson Build!" << '\n';

    return 0;

}

在与您的代码文件/项目相同的目录中,您应该创建一个名为meson.build的文件:vim meson.build

 

 

 

 

让我们创建文件:tutorial,语言是cpp (C++),最终的二进制文件的名称是:demo,我们要编译的文件是main.cpp。

完成后,下一步是运行命令:meson builddir

 

输出将如下所示:

aaron@aaron-virtual-machine:~/meson/cplusplushelloworld$ meson builddir

The Meson build system

Version: 0.53.2

Source dir: /home/aaron/meson/cplusplushelloworld

Build dir: /home/aaron/meson/cplusplushelloworld/builddir

Build type: native build

Project name: tutorial

Project version: undefined

C++ compiler for the host machine: c++ (gcc 9.4.0 "c++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0")

C++ linker for the host machine: c++ ld.bfd 2.34

Host machine cpu family: x86_64

Host machine cpu: x86_64

Build targets in project: 1

 

Found ninja-1.10.0 at /usr/bin/ninja

它将创建一个名为builddir的目录,我们需要输入它来进行构建:ninja

 

 

之后只需运行生成的可执行文件:./demo

 

 

有关更多信息和详细信息,请参阅官方文档。

 

https://mesonbuild.com/Tutorial.html

接下来我们就要利用 meson ninja来编译运行xenomai4了

 

第2章 编译并安装EVL内核

2.1 编译前的准备⼯作

要从源代码构建 Linux 内核,您需要几个工具:git、make、gcc、libssl-dev 和(可选)ctags、cscope 和/或 ncurses-dev。这些工具包在您的 Linux 发行版中可能被称为其他名称,因此您可能需要搜索该包。如果您“make menuconfig”或“make nconfig”,则使用 ncurses-dev 工具。

在 Ubuntu 上,您可以通过运行以下命令获得这些工具:

sudo apt-get install libncurses5-dev gcc make git exuberant-ctags bc libssl-dev

在 Fedora、Scientific Linux 和 CentOS 等基于 Red Hat 的系统上,您可以运行:

sudo yum install gcc make git ctags ncurses-devel openssl-devel

在基于 SUSE 的系统(如 SLES 和 Leap)上,您可以运行:

sudo zypper 在 git gcc ncurses-devel libopenssl-devel ctags cscope

 

2.2 编译内核与模块

如果您需要对配置进行任何更改,可以运行以下命令之一。这些需要安装 curses 工具。

解压缩内核文件:

tar -zxvf linux-evl-v5.15.18-evl1-rebase.tar.gz

进入到内核解压缩目录:

 

 

make menuconfig

 

 

或者

make nconfig

检查生成的.config文件是否包含了CONFIG_EVL配置选项,如果不包含需要重新编译配置!

 

 

make成功!

接下来sudo make modules_install install

 

 

最后make install

 

 

 

第3章 运⾏与测试EVL内核

3.1 运行新编译的内核

sudo update-grub2

 

3.2 重启系统

 

 

3.3 检查新内核是否安装成功

 

 

dmesg | grep EVL

 

 

可以看到 EVL core 已经成功开启。

 

第4章 libevl库的编译与安装

4.1 编译前的准备

首先安装先安装pip包管理工具

sudo apt-get install python3-pip

sudo apt-get install git

然后更新pip工具:

sudo pip3 install  pip --upgrade

然后安装最新版本的meson工具和依赖的ninja工具:

sudo pip3 install meson

sudo pip3 install ninja

检查meson是否安装成功

meson --version

 

 

如果显示版本号说明meson安装成功!

解压缩libevl库源码包

 

 

4.2 配置

首先需要先明确配置格式:

meson setup -Dbuildtype=[编译类型] -Duapi=[EVL内核源码目录] [构造目录] [libevl源码目录]

其次确认好自己的evl内核目录路径,要创建编译目录/home/aaron/libevl_build,生成的目标路径等。

 meson setup -Dbuildtype=release -Dprefix=/opt -Duapi=/home/aaron/linux-evl-v5.15.18-evl1-rebase /home/                                                                   aaron/libevl_build /home/aaron/libevl-r31 --reconfigure

 

 

 

4.3 编译与安装

 

 meson compile -v

 

 

 

root@aaron-Default-string:/home/aaron/libevl_build# sudo meson install

 

ninja: Entering directory `/home/aaron/libevl_build'

[2/18] Generating eshi/git_stamp.h with a custom command

Installing lib/libevl.so.0.0.1 to /opt/lib/x86_64-linux-gnu

Installing lib/libevl.a to /opt/lib/x86_64-linux-gnu

Installing eshi/libeshi.so.0.0.1 to /opt/lib/x86_64-linux-gnu

Installing eshi/libeshi.a to /opt/lib/x86_64-linux-gnu

Installing benchmarks/latmus to /opt/bin

Installing benchmarks/hectic to /opt/bin

Installing utils/evl to /opt/bin

Installing utils/evl-ps to /opt/libexec

Installing utils/evl-check to /opt/libexec

Installing tests/basic-xbuf to /opt/tests

Installing tests/clock-timer-periodic to /opt/tests

Installing tests/clone-fork-exec to /opt/tests

Installing tests/detach-self to /opt/tests

Installing tests/duplicate-element to /opt/tests

Installing tests/element-visibility to /opt/tests

Installing tests/fpu-preload to /opt/tests

Installing tests/fpu-stress to /opt/tests

Installing tests/heap-torture to /opt/tests

Installing tests/mapfd to /opt/tests

Installing tests/monitor-deadlock to /opt/tests

Installing tests/monitor-event to /opt/tests

Installing tests/monitor-flags to /opt/tests

Installing tests/monitor-pi to /opt/tests

Installing tests/monitor-pi-deadlock to /opt/tests

Installing tests/monitor-pp-dynamic to /opt/tests

Installing tests/monitor-pp-lower to /opt/tests

Installing tests/monitor-pp-nested to /opt/tests

Installing tests/monitor-pp-pi to /opt/tests

Installing tests/monitor-pp-raise to /opt/tests

Installing tests/monitor-pp-tryenter to /opt/tests

Installing tests/monitor-pp-weak to /opt/tests

Installing tests/monitor-steal to /opt/tests

Installing tests/monitor-wait-multiple to /opt/tests

Installing tests/observable-hm to /opt/tests

Installing tests/observable-inband to /opt/tests

Installing tests/observable-master to /opt/tests

Installing tests/observable-onchange to /opt/tests

Installing tests/observable-oob to /opt/tests

Installing tests/observable-race to /opt/tests

Installing tests/observable-thread to /opt/tests

Installing tests/poll-close to /opt/tests

Installing tests/poll-flags to /opt/tests

Installing tests/poll-many to /opt/tests

Installing tests/poll-multiple to /opt/tests

Installing tests/poll-nested to /opt/tests

Installing tests/poll-observable-inband to /opt/tests

Installing tests/poll-observable-oob to /opt/tests

Installing tests/poll-sem to /opt/tests

Installing tests/poll-xbuf to /opt/tests

Installing tests/proxy-echo to /opt/tests

Installing tests/proxy-eventfd to /opt/tests

Installing tests/proxy-pipe to /opt/tests

Installing tests/proxy-poll to /opt/tests

Installing tests/sched-quota-accuracy to /opt/tests

Installing tests/sched-tp-accuracy to /opt/tests

Installing tests/sem-close-unblock to /opt/tests

Installing tests/sem-timedwait to /opt/tests

Installing tests/sem-wait to /opt/tests

Installing tests/simple-clone to /opt/tests

Installing tests/stax-lock to /opt/tests

Installing tests/stax-warn to /opt/tests

Installing tests/thread-mode-bits to /opt/tests

Installing tests/fault to /opt/tests

Installing tests/ring-spray to /opt/tests

Installing tests/clock-timer-periodic.eshi to /opt/tests/eshi

Installing tests/detach-self.eshi to /opt/tests/eshi

Installing tests/heap-torture.eshi to /opt/tests/eshi

Installing tests/monitor-event.eshi to /opt/tests/eshi

Installing tests/monitor-wait-multiple.eshi to /opt/tests/eshi

Installing tests/monitor-flags.eshi to /opt/tests/eshi

Installing tests/poll-nested.eshi to /opt/tests/eshi

Installing tests/poll-sem.eshi to /opt/tests/eshi

Installing tests/proxy-eventfd.eshi to /opt/tests/eshi

Installing tests/proxy-pipe.eshi to /opt/tests/eshi

Installing tests/sem-timedwait.eshi to /opt/tests/eshi

Installing tests/sem-wait.eshi to /opt/tests/eshi

Installing tidbits/oob-net-icmp to /opt/bin

Installing tidbits/oob-spi to /opt/bin

Installing /home/aaron/libevl-r31/include/evl/atomic.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/clock.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/compiler.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/event.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/evl.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/flags.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/heap.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/list.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/mutex.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/observable.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/poll.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/proxy.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/ring_ptr.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/sched.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/sem.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/syscall.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/thread.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/timer.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/tube.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/xbuf.h to /opt/include/evl

Installing /home/aaron/libevl-r31/include/evl/atomic.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/evl/heap.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/evl/list.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/clock.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/event.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/evl.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/flags.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/mutex.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/poll.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/proxy.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/sched.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/sem.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/syscall.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/thread.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/timer.h to /opt/include/eshi

Installing /home/aaron/libevl-r31/include/eshi/evl/uapi.h to /opt/include/eshi

Installing /home/aaron/libevl_build/include/uapi/evl/xbuf.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/signal.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/fcntl.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/devices/latmus.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/devices/gpio.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/devices/spidev.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/devices/hectic.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/sched.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/thread.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/poll.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/syscall.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/types.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/observable.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/mutex.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/factory.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/net/sched.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/net/socket.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/proxy.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/control.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/clock.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/monitor.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/include/uapi/evl/trace.h to /opt/include/uapi/evl

Installing /home/aaron/libevl_build/meson-private/evl.pc to /opt/lib/x86_64-linux-gnu/pkgconfig

Installing /home/aaron/libevl-r31/utils/evl-gdb to /opt/libexec

Installing /home/aaron/libevl-r31/utils/evl-help to /opt/libexec

Installing /home/aaron/libevl-r31/utils/evl-start to /opt/libexec

Installing /home/aaron/libevl-r31/utils/evl-stop to /opt/libexec

Installing /home/aaron/libevl-r31/utils/evl-test to /opt/libexec

Installing /home/aaron/libevl-r31/utils/evl-trace to /opt/libexec

Installing /home/aaron/libevl-r31/utils/trace.evl to /opt/libexec

Installing /home/aaron/libevl-r31/utils/trace.irq to /opt/libexec

Installing /home/aaron/libevl-r31/utils/trace.timer to /opt/libexec

Installing /home/aaron/libevl-r31/utils/kconf-checklist.evl to /opt/libexec

Installing symlink pointing to libevl.so.0.0.1 to /opt/lib/x86_64-linux-gnu/libevl.so.0

Installing symlink pointing to libevl.so.0 to /opt/lib/x86_64-linux-gnu/libevl.so

Installing symlink pointing to libeshi.so.0.0.1 to /opt/lib/x86_64-linux-gnu/libeshi.so.0

Installing symlink pointing to libeshi.so.0 to /opt/lib/x86_64-linux-gnu/libeshi.so

Running custom install script '/bin/sh /home/aaron/libevl-r31/meson/post-install.sh'

 

4.4 检查是否安装成功

 sudo su
# export PATH=$PATH:/opt/bin
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/lib
# evl test

 

 

 

root@aaron-Default-string:/opt/lib# export PATH=$PATH:/opt/bin

root@aaron-Default-string:/opt/lib# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/lib

root@aaron-Default-string:/opt/lib# cd

root@aaron-Default-string:~# evl test

basic-xbuf: OK

clock-timer-periodic: OK

clone-fork-exec: OK

detach-self: OK

duplicate-element: OK

element-visibility: OK

fault: OK

fpu-preload: OK

fpu-stress: OK

heap-torture: OK

mapfd: OK

monitor-deadlock: OK

monitor-event: OK

monitor-flags: OK

monitor-pi: OK

monitor-pi-deadlock: OK

monitor-pp-dynamic: OK

monitor-pp-lower: OK

monitor-pp-nested: OK

monitor-pp-pi: OK

monitor-pp-raise: OK

monitor-pp-tryenter: OK

monitor-pp-weak: OK

monitor-steal: OK

monitor-wait-multiple: OK

observable-hm: OK

observable-inband: OK

observable-master: OK

observable-onchange: OK

observable-oob: OK

observable-race: OK

observable-thread: OK

poll-close: OK

poll-flags: OK

poll-many: OK

*** stack smashing detected ***: terminated

Aborted (core dumped)

** poll-multiple: BROKEN

root@aaron-Default-string:~#

 

查看evl依赖那些库:

root@aaron-Default-string:/opt/bin# ldd evl

        linux-vdso.so.1 (0x00007fff6758a000)

        libevl.so.0 => /opt/lib/x86_64-linux-gnu/libevl.so.0 (0x00007f1b8a142000)

        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1b8a11f000)

        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1b89f2d000)

        /lib64/ld-linux-x86-64.so.2 (0x00007f1b8a16b000)

接着就可以测试 latency:

root@aaron-Default-string:/opt/bin# ./latmus

warming up on CPU0 (not isolated)...

RTT|  00:00:01  (user, 1000 us period, priority 98, CPU0-noisol)

RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst

RTD|      2.225|      2.309|      5.755|       0|     0|      2.225|      5.755

RTD|      1.805|      1.857|      4.794|       0|     0|      1.805|      5.755

RTD|     -1.602|      2.130|     15.951|       0|     0|     -1.602|     15.951

RTD|      1.797|      1.869|      4.047|       0|     0|     -1.602|     15.951

RTD|      1.793|      1.847|      3.657|       0|     0|     -1.602|     15.951

RTD|      1.766|      1.827|      2.765|       0|     0|     -1.602|     15.951

RTD|      1.783|      2.187|      3.752|       0|     0|     -1.602|     15.951

RTD|      1.796|      1.993|      4.160|       0|     0|     -1.602|     15.951

RTD|      1.799|      1.845|      3.323|       0|     0|     -1.602|     15.951

RTD|      1.782|      1.844|      2.859|       0|     0|     -1.602|     15.951

RTD|     -1.714|      2.055|      7.935|       0|     0|     -1.714|     15.951

RTD|      1.785|      1.931|      4.483|       0|     0|     -1.714|     15.951

RTD|      1.777|      1.831|      3.338|       0|     0|     -1.714|     15.951

RTD|      1.776|      1.841|      2.826|       0|     0|     -1.714|     15.951

RTD|      1.784|      2.182|      4.286|       0|     0|     -1.714|     15.951

RTD|      1.788|      2.282|      4.079|       0|     0|     -1.714|     15.951

RTD|      1.784|      1.847|      3.515|       0|     0|     -1.714|     15.951

RTD|      1.791|      1.845|      2.910|       0|     0|     -1.714|     15.951

RTD|      1.778|      2.185|      3.882|       0|     0|     -1.714|     15.951

RTD|      1.780|      1.849|      3.667|       0|     0|     -1.714|     15.951

RTD|      1.772|      1.841|      3.221|       0|     0|     -1.714|     15.951

---|-----------|-----------|-----------|--------|------|-------------------------

RTS|     -1.714|      1.974|     15.951|       0|     0|    00:00:21/00:00:21

 

 

平均2us,最差15.9us

软硬件环境:

处理器:root@aaron-Default-string:~# lscpu
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
CPU(s):                          8
On-line CPU(s) list:             0-7
Thread(s) per core:              2
Core(s) per socket:              4
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           94
Model name:                      Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
Stepping:                        3
CPU MHz:                         3400.000
CPU max MHz:                     4000.0000
CPU min MHz:                     800.0000
BogoMIPS:                        6799.81
Virtualization:                  VT-x
L1d cache:                       128 KiB
L1i cache:                       128 KiB
L2 cache:                        1 MiB
L3 cache:                        8 MiB
NUMA node0 CPU(s):               0-7
Vulnerability Itlb multihit:     Processor vulnerable
Vulnerability L1tf:              Mitigation; PTE Inversion
Vulnerability Mds:               Mitigation; Clear CPU buffers; SMT vulnerable
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full generic retpoline, IBPB conditional, IBRS_FW, STIBP conditional, RSB filling
Vulnerability Srbds:             Mitigation; Microcode
Vulnerability Tsx async abort:   Mitigation; TSX disabled
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts
                                 rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_t
                                 imer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2
                                 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d
root@aaron-Default-string:~#

操作系统:Ubuntu20.04.4

 

...全文
4274 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhiyaormb 2022-10-26
  • 打赏
  • 举报
回复 1

您好,问一下,meson setup -Dbuildtype=[编译类型] -Duapi=[EVL内核源码目录] [构造目录] [libevl源码目录]这里:
meson setup -Dbuildtype=release -Dprefix=/opt -Duapi=/home/xxx/linux-evl-v5.15.64-evl1-rebase /home/xxx/libevl_build /home/xxx/libevl-r38 --reconfigure
提示:
Directory does not contain a valid build tree:
/home/xxx/libevl_build。
meson版本0.63.3。libevl_build是个空文件夹。

lhl2303456 2022-11-17
  • 举报
回复
@zhiyaormb 我和你遇到了同样的问题,所以就比较好奇这个libevl_build 有什么要求,是要指向Linux内核的某个目录,还是随便新加的目录就可以?
lallbj23 2023-05-30
  • 举报
回复
@lhl2303456 就是你编译的目录,一般是在libevl源码下新建一个build目录,让编译的结果都在build目录下,这样目录位置就是{llibevl目录}/build
winter_hater 2022-08-12
  • 打赏
  • 举报
回复

evl test 时
*** stack smashing detected ***: terminated

Aborted (core dumped)

** poll-multiple: BROKEN
是什么意思啊

131

社区成员

发帖
与我相关
我的任务
社区描述
Xenomai中文社区。 Upstream - xenomai.org Mirror - gitee.com/Xenomai CSDN - bbs.csdn.net/forums/Xenomai
社区管理员
  • Xenomai
  • legonext
  • Cajb
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧