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交差相连,测量两者之间的通信延迟。
- altency:
-
实时设备模型(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 工具同时支持用户态实时任务、内核态实时任务、内核态定时器的延迟测试
973

被折叠的 条评论
为什么被折叠?



