2.2 Xenomai3源码介绍
xenomai
├── aclocal.m4
├── autom4te.cache
├── config
├── configure
├── configure.ac
├── CONTRIBUTING.md
├── debian
├── demo
├── doc
├── include
├── kernel
├── lib
├── Makefile.am
├── Makefile.in
├── README
├── scripts
├── testsuite
├── tracing
└── utils
Xenomai 采用分离源码模型,将内核空间支持与用户空间库解耦。其中,Xenomai 内核代码位于 kernel/ 目录,用户空间代码分别位于 lib/、 testsuite/、 utils/ 和 demo/ 目录。
scripts/ 目录包含了各类脚本,包括 Xenomai 编译、构建、测试等脚本。后续章节在使用到其中的脚本时,会具体介绍。
接下来,重点介绍几个最重要的目录。
1. Xenomai 内核代码
xenomai/kernel/
├── cobalt
└── drivers
kernel/ 子目录实现了 Cobalt 实时内核代码及实时驱动程序,被视为 Linux 内核的内置扩展。至于 Mercury 核心,属于单一内核,不需要内核空间中的 Xenomai 特定代码, 由于长时间得不到反馈,目前可能也运行不起来了。
Cobalt 实时内核代码依赖于 Dovetail 实时补丁。Dovetail 补丁通过中断管道技术,对 Linux 内核的中断子系统、时间子系统、系统调用、系统调度进行了改造,以支持 Cobalt 实时内核和 Linux 内核的双内核模型。Dovetail 源码在一个独立的代码库中,并没有在 Xenomai 源码库中。
使用 scripts/prepare-kernel.sh 脚本,可以将 Xenomai 实时内核源码安装到 Linux 内核源码树中。
Linux 内核源码树在先后安装了 Dovetail 实时补丁和 Cobalt 实时内核代码后,可以通过标准的 Linux 内核配置过程(例如 make menuconfig)来定义 Xenomai 内核组件的各种设置。配置完成后,可以通过标准的 Linux 内核编译方法完成双内核的统一编译(例如 make all),生成一个包含双内核的内核映像文件。
2. Xenomai 用户空间运行库
xenomai/lib
├── alchemy
├── analogy
├── boilerplate
├── cobalt
├── copperplate
├── Makefile.am
├── Makefile.in
├── mercury
├── psos
├── smokey
├── trank
└── vxworks
lib/ 子目录包含 Xenomai 框架导出给应用程序的各种用户空间库。此树与内核支持分开构建,库的构建是为了支持选定的核心,无论是 Cobalt 还是 Mercury。
Xenomai 用户空间库原生提供了 POSIX 兼容接口,应用程序可以调用这些接口实现实时任务的创建、调度、同步、通信等。在 POSIX 接口之上,Xenomai 还模拟出了 Alchemy/pSOS/VxWorks 接口,并提供了对应的用户空间运行库。除此之外, trank 目录是 Transition Kit的缩写,它提供了一个用户空间运行库,用于兼容 Xenomai 2/Native 接口。
最后,smokey 目录包含了 Xenomai 自身的单元测试框架和测试用例,与应用程序运行无关。
3. Xenomai 用户空间工具
-
xenomai/testsuite/:- Xenomai 测试套件,包括时钟漂移测试工具
clocktest、延迟测试工具latency、Smokey 单元测试工具,xeno-test 基准测试、硬件测试工具等。 - 最终安装到
/usr/xenomai/bin/目录。
- Xenomai 测试套件,包括时钟漂移测试工具
-
xenomai/utils/:- 包括开发测试、设备管理、系统监控、系统设置和故障诊断等工具
- 最终安装到
/usr/xenomai/bin/或/usr/xenomai/sbin/目录。
上述工具的具体作用和使用方法,参考后续章节介绍。
4. Xenomai 用户空间实时应用示例
xenomai/demo/ 目录包含了 Xenomai 实时应用示例,包括 POSIX 接口和 Alchemy 接口的示例。
按功能划分,包括实时设备模型(RTDM)示例程序、RTIPC进程间通信示例程序、Linux cyclictest 移植示例。
除了关注功能之外,还可以从这些源码中学习到实时线程创建、线程同步、信号初始化与捕捉、线程调度策略、线程优先级等最佳实践。
不足之处在于,这些示例程序的 makefile 是由 autoconf 统一生成的,所以这些示例程序并不适合直接作为一般的用户空间程序单独构建。
总之,开发者可以通过这些示例程序快速上手,理解Xenomai的基本用法和高级特性。
这些实时应用示例的源码,会在后续章节中根据需要进行分析。
5. Xenomai 用户空间构建相关文件与目录
用户空间代码的构建是单独进行的,不需要依赖内核源码。Xenomai 用户空间使用 GNU Autotools(也称为 Autoconf/Automake 工具链)进行自动配置和构建。
| 文件/目录 | 说明 |
|---|---|
Makefile.am | Automake 的输入文件,定义了如何构建目标(如可执行文件、库等)。 |
Makefile.in | 由 Makefile.am 生成的模板文件,configure 脚本会根据它生成最终的 Makefile。 |
aclocal.m4 | 由 aclocal 工具生成,包含 Autoconf 宏定义,供 autoconf 使用。 |
autom4te.cache/ | Autoconf/Automake 缓存目录,用于加速配置过程,通常不提交到版本库。 |
config/ | 配置相关的脚本等。 |
configure | 由 configure.ac 生成的 shell 脚本,用于检测系统环境并生成 Makefile。 |
configure.ac | Autoconf 的输入文件,定义了项目配置逻辑,如检测编译器、库、头文件等。 |
如果上述文件缺失,说明是直接从源码树 git clone 命令克隆。这种情况下,需要先运行 scripts/bootstrap 脚本。此脚本实际执行的是 autoreconf -fi 命令。
除此之外,debian 目录在的脚本和配置文件,用于将 Xenomai 用户空间构建并打包为 debian 软件包。
973

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



