2.3Xenomai3用户空间介绍

2.3 Xenomai3用户空间介绍

Xenomai 3 系统的安装目录位于 /usr/xenomai/,该目录结构如下所示:

/usr/xenomai/
|-- bin
|-- demo
|-- etc
|-- include
|-- lib
|-- sbin
`-- share
  • bin:这个目录包含了各种工具程序,这些工具通常用于辅助开发和测试。
  • demo:在这个目录中,存放了一系列的示例程序,开发者可以通过这些示例程序快速上手,理解Xenomai的基本用法和高级特性。
  • etc:etc目录下的文件主要用于系统的配置,目前在这个目录下只包括了与RTNET(Xenomai提供的实时网络协议栈)相关的配置文件。
  • include:include目录中包含了所有必要的头文件,这些头文件定义了Xenomai的API接口,开发者在编写应用程序时需要包含这些头文件。
  • lib:lib目录存放的是Xenomai的运行库文件,这些文件在应用程序运行时会被加载,提供了Xenomai的实时功能,如实时任务调度、实时互斥锁等。
  • sbin:sbin目录中的程序是系统级别的工具,这些工具主要用于设备管理、系统监控、系统设置和故障诊断。
  • share:share目录下存放的是共享资源文件。目前在这个目录下只包括了chkkconf工具所需的内核配置项检查文件kconf-checklist,该文件用于检查系统的内核配置是否满足运行Xenomai的需求。

通过这种组织方式,Xenomai 3 系统的文件结构既清晰又便于管理,开发者可以轻松找到所需的工具、示例、配置文件等资源。

2.3.1 /usr/xenomai/bin/

/usr/xenomai/bin/
|-- clocktest
|-- cmd_bits
|-- cmd_read
|-- cmd_write
|-- dohell
|-- gpiobench
|-- gpiotest
|-- insn_bits
|-- insn_read
|-- insn_write
|-- latency
|-- rtcanrecv
|-- rtcansend
|-- smokey
|-- smokey_net_server
|-- spitest
|-- switchtest
|-- wf_generate
|-- wrap-link.sh
|-- xeno
|-- xeno-config
|-- xeno-test
|-- xeno-test-run
`-- xeno-test-run-wrapper
  • 测试工具 (源码 testsuite/)

    • clocktest:Cobalt 实时内核与 Linux 内核之间时钟漂移测试工具。
    • gpiobench:GPIO 性能测试,测量 GPIO 操作延迟
    • gpiotest:GPIO 功能测试,验证 GPIO 引脚输入输出功能
    • latency: 延迟测试程序,同时支持用户态实时任务、内核态实时任务、内核态定时器的延迟测试
    • smokey: 综合测试框架,执行 Xenomai 核心功能的全方位测试
    • smokey_net_server: 网络测试服务器,用于测试实时网络协议栈
    • spitest: SPI 接口测试工具,验证 SPI 通信协议栈
    • switchtest: 上下文切换性能测试,测量任务切换耗时
    • xeno-test: 自动化测试套件入口,整合多个测试用例,包括smokey,clocktest,switchtest及带 dohell 负载的 latency 测试
      • xeno-test-run: 测试运行器核心,处理测试逻辑和结果收集
      • xeno-test-run-wrapper:实现测试运行时的进程间通信控制,基于 FIFO 实现
      • dohell: 负载生成工具,包括 CPU/IO/网络负载
  • 模拟量工具(源码 utils/analogy/)

    • cmd_bits:IO位的异步操作测试
    • cmd_read:模拟量连续采集(带缓冲)
    • cmd_write:模拟量波形输出(DMA模式),支持波形文件
    • insn_bits:IO位的同步操作测试
    • insn_read:单次模拟量同步读取
    • insn_write:单次模拟量同步输出
    • wf_generate:波形文件生成器,生成测试波形,如正弦波、方波等
  • CAN 总线工具(源码 utils/can/)

    • rtcanrecv:CAN 总线实时CAN帧接收工具
    • rtcansend:CAN 总线实时CAN帧发送工具
  • 开发工具(源码 scripts/)

    • xeno-config: 获取编译与链接参数
    • wrap-link.sh:支持静态程序的链接,也能兼容动态程序的链接
    • xeno:当用户输入 xeno 时,根据 Xenomai实际安装路径,找到对应命令的实际路径并执行

2.3.2 /usr/xenomai/sbin

/usr/xenomai/sbin
|-- analogy_calibrate
|-- analogy_config
|-- autotune
|-- chkkconf
|-- corectl
|-- hdb
|-- nomaccfg
|-- rtcanconfig
|-- rtcfg
|-- rtifconfig
|-- rtiwconfig
|-- rtnet
|-- rtping
|-- rtps
|-- rtroute
|-- slackspot
|-- sysregd
|-- tdmacfg
`-- version
  • 实时模拟量设备管理 (源码 utils/analogy/)
    • analogy_config:配置模拟量设备的参数
    • analogy_calibrate:生成模拟量设备的校准系数并保存到文件(可被 insn_read 使用)
  • 实时 CAN 设备管理 (源码 utils/can/)
    • rtcanconfig:实时 CAN 总线控制器配置(波特率、工作模式)
  • 实时网络管理 (源码 utils/net/)
    • rtnet:实时网络协议栈的加载与卸载控制(RTnet, RTmac/TMDA, RTcap)
    • rtcfg:用于管理实时网络配置的工具
    • rtifconfig:实时以太网接口配置(IP地址、激活状态),替代 ifconfig 命令
    • rtiwconfig:实时无线网络接口管理,替代 iwconfig 命令
    • rtroute:实时路由表管理,替代 route 命令
    • tdmacfg:RTmac/TDMA配置工具
    • nomaccfg:RTmac/NoMAC配置工具
    • rtping:实时网络连通性测试(ICMP echo),替代 ping 命令
  • 系统调优与诊断工具
    • autotune:自动调整延迟补偿 Gravity,以优化系统实时性能。
    • slackspot:用来解析 Cobalt 实时内核收集的实时任务切换到次模式的调用栈数据 /proc/xenomai/debug/relax
    • rtps:实时进程状态监控(调度策略、优先级等)
    • hdb:在启用 --enable-pshared 选项的情况下,用于查看共享堆内存的信息(只对 pSOS/vxWorks 有效)
    • sysregd:sysregd守护进程负责在用户层挂载并构建 /var/run/xenomai/ 目录,便于查看 alchemy/pSOS/vxWorks 实时进程的状态
  • 实时内核控制与查看
    • corectl:实时内核状态查看与控制工具,用于控制实时内核的启动、停止操作
    • version:version -a 查看 Xenomai 版本、编译参数、编译链等信息
    • chkkconf:根据 /usr/xenomai/share/kconf-checklist 检查内核配置项(/proc/config.gz)是否满足 Xenomai 要求

2.3.3 /usr/xenomai/lib

/usr/xenomai/lib/
|-- cobalt.wrappers
|-- dynlist.ld
|-- libalchemy.a
|-- libalchemy.la
|-- libalchemy.so -> libalchemy.so.0.0.0
|-- libalchemy.so.0 -> libalchemy.so.0.0.0
|-- libalchemy.so.0.0.0
|-- libanalogy.a
|-- libanalogy.la
|-- libanalogy.so -> libanalogy.so.1.0.0
|-- libanalogy.so.1 -> libanalogy.so.1.0.0
|-- libanalogy.so.1.0.0
|-- libcobalt.a
|-- libcobalt.la
|-- libcobalt.so -> libcobalt.so.2.0.0
|-- libcobalt.so.2 -> libcobalt.so.2.0.0
|-- libcobalt.so.2.0.0
|-- libcopperplate.a
|-- libcopperplate.la
|-- libcopperplate.so -> libcopperplate.so.0.0.0
|-- libcopperplate.so.0 -> libcopperplate.so.0.0.0
|-- libcopperplate.so.0.0.0
|-- libmodechk.a
|-- libmodechk.la
|-- libmodechk.so -> libmodechk.so.0.0.0
|-- libmodechk.so.0 -> libmodechk.so.0.0.0
|-- libmodechk.so.0.0.0
|-- libpsos.a
|-- libpsos.la
|-- libpsos.so -> libpsos.so.0.0.0
|-- libpsos.so.0 -> libpsos.so.0.0.0
|-- libpsos.so.0.0.0
|-- libsmokey.a
|-- libsmokey.la
|-- libsmokey.so -> libsmokey.so.0.0.0
|-- libsmokey.so.0 -> libsmokey.so.0.0.0
|-- libsmokey.so.0.0.0
|-- libtrank.a
|-- libtrank.la
|-- libtrank.so -> libtrank.so.0.0.0
|-- libtrank.so.0 -> libtrank.so.0.0.0
|-- libtrank.so.0.0.0
|-- libvxworks.a
|-- libvxworks.la
|-- libvxworks.so -> libvxworks.so.0.0.0
|-- libvxworks.so.0 -> libvxworks.so.0.0.0
|-- libvxworks.so.0.0.0
|-- modechk.wrappers
`-- xenomai
    |-- bootstrap-pic.o
    `-- bootstrap.o
  • 实时运行库(包括 .a 静态库和 .so 动态库)

    • libcobalt.*:Xenomai核心运行库,提供 POSIX 实时接口
    • libmodechk.*: 单独封装 malloc/free 接口,并提供主次模式检查功能
    • libcopperplate.*:实现了一个接口转换层,可以把其它RTOS实时接口转换为对POSIX实时接口的调用
    • libalchemy.*:提供 Alchemy 实时接口
    • libpsos.*:提供 pSOS+ API 实时接口
    • libvxworks.*:提供 VxWorks API 实时接口
    • libtrank.*:提供对 Xenomai 2/native 接口的兼容支持
  • 实时模拟量运行库

    • libanalogy.*:提供模拟量设备实时接口
  • 测试工具运行库

    • libsmokey.*:提供 Xenomai smokey 测试框架库
  • 开发工具链组件(通过 xeno-config 工具可获取编译链接参数,无需手动组合)

    • modechk.warppers:列出需要需要进行主次模式检查的接口,当前仅包括 malloc/free 接口,二者均在 libmodechk 中实现
    • cobalt.wrappers:列出所有 Xenomai 需要重新包装并完成实时化改造的接口,这些接口均在 libcobalt 中实现
    • dynlist.ld:当前仅列出了 main 函数,在链接时传递给 --dynamic-list 选项。与 -Wl,–wrap=main 选项配合,保证了 main 函数被符号包装后,依然可以正确地识别和调用原始的 main 函数。
    • xenomai/bootstrap.*:bootstrap 模块是 Xenomai 实时应用的启动代码,用于初始化 Xenomai 运行环境。
      • boostrap.o:用于静态链接的 bootstrap 模块,提供了 main 函数的符号包装接口 xenomai_main 并在其中完成初始化。
      • bootstrap-pic.o:用于共享库链接的 bootstrap 模块,不需要对 main 函数进行符号包装,而是在 C/C++ constructors 中完成初始化。

2.3.4 /usr/xenomai/include

/usr/xenomai/include/
|-- alchemy
|-- boilerplate
|-- cobalt
|-- copperplate
|-- psos
|-- rtdm
|-- smokey
|-- trank
|-- vxworks
|-- xeno_config.h
`-- xenomai

/usr/xenomai/include/ 目录包含了 Xenomai 运行库所需的头文件。

  • 运行库头文件
    • cobalt: libcobalt 头文件
    • rtdm: 实时设备模型(RTDM)头文件,对应的函数实现在 libcobalt 中
    • copperplate: libcopperplate 头文件
    • alchemy:libalchemy 头文件
    • psos: libpsos 头文件
    • vxworks: libvxworks 头文件
    • trank:libtrank 头文件
    • smokey:libsmokey 头文件
  • Xenomai 模块头文件
    • boilerplate:链表、哈希、堆、锁、debug等模块的头文件
    • xenomai:bootstrap 模块头文件
  • xeno_config.h:包含Xenomai 功能特性开关的宏定义,在编译 Xenomai 用户层代码时根据配置选项自动生成。

2.3.5 /usr/xenomai/demo

/usr/xenomai/demo/
|-- altency
|-- bufp-label
|-- bufp-readwrite
|-- can_rtt
|-- cross-link
|-- cyclictest
|-- eth_p_all
|-- gpiopwm
|-- iddp-label
|-- iddp-sendrecv
|-- xddp-echo
|-- xddp-label
`-- xddp-stream
  • Alchemy 实时API示例程序

    • altency:latency 的 Alchemy 版本,使用 Alchemy 实时 API 实现
    • cross-link:串口示例程序,两个实时串口设备通过RX-TX交差相连,测量两者之间的通信延迟。
  • 实时设备模型(RTDM)示例程序 (基于 POSIX 实时接口)

    • can_rtt:CAN 总线示例程序,实时CAN总线往返时间(Round-Trip-Time)测试工具,主要用于测量CAN通信的实时性能。
    • eth_p_all:网口示例程序,通过原始套接字(raw socket)捕获并显示所有经过指定网络接口的以太网数据包。
    • gpiopwm:GPIOPWM 控制示例程序,实现了多种控制模式来控制周期和占空比
  • RTIPC 实时 IPC 示例程序 (基于 POSIX 实时接口)

    • iddp-label
    • iddp-sendrecv
    • xddp-echo
    • xddp-label
    • xddp-stream
    • bufp-label
    • bufp-readwrite
  • cyclictest (基于 POSIX 实时接口)

    • Linux rt-tests套件中的 cyclictest 在 Xenomai 中的重新实现版本,提供用户态实时任务的延迟测试。方便对比 Xenomai 和 Linux 延迟测试结果。
    • Xenoami 的 latency 工具同时支持用户态实时任务、内核态实时任务、内核态定时器的延迟测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值