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 工具同时支持用户态实时任务、内核态实时任务、内核态定时器的延迟测试
相关推荐
无聊到发博客的菜鸟15 小时前
STM32 手册寄存器属性
stm32·单片机·嵌入式·rtos·寄存器
aspirestro三水哥15 小时前
5.3RTDM用户层驱动
rtos·xenomai
无聊到发博客的菜鸟16 小时前
STM32 RTC时钟不准的问题
stm32·嵌入式·rtc·rtos
aspirestro三水哥3 天前
4.7POSIX进程与线程实例
rtos·xenomai
无聊到发博客的菜鸟3 天前
使用STM32对SD卡进行性能测试
stm32·单片机·rtos·sd卡·fatfs
切糕师学AI6 天前
Azure RTOS ThreadX 简介
microsoft·嵌入式·azure·rtos
切糕师学AI9 天前
FreeRTOS是什么?
嵌入式·rtos
aspirestro三水哥10 天前
3.5启动QEMUARM64虚拟机
rtos·xenomai
时光の尘12 天前
嵌入式面试八股文(十九)·裸机开发与RTOS开发的区别
linux·stm32·单片机·iic·rtos·spi
aspirestro三水哥13 天前
3.2编译Xenomai内核
rtos·xenomai