Xenomai 3.1 mercury运行demo报线程prologue failed EINVAL错误
问题原因排查及解决思路
该报错不是底层操作系统基础依赖缺失导致,主要和内核配置、架构适配、编译参数冲突相关,可按以下步骤逐一排查:
- 内核配置校验
Xenomai 3.1的mercury核心依赖带PREEMPT-RT补丁的实时内核,同时需开启高精度定时器配置。先执行uname -a查看当前内核是否带有rt后缀,无实时内核的情况下需先编译安装适配Debian 10的PREEMPT-RT内核再运行测试。
另外VirtualBox虚拟机默认不开启高精度定时器透传,需关闭虚拟机后在设置页取消启用VT-x/AMD-V嵌套分页选项,同时给内核启动参数追加clocksource=tsc highres=on,避免定时器精度不足导致线程创建失败。 - 32位运行时依赖校验
你在64位Debian系统上编译了32位目标的Xenomai,需要先安装完整的32位运行时库:
sudo dpkg --add-architecture i386 sudo apt update sudo apt install libc6:i386 libgcc1:i386 libstdc++6:i386
安装完成后再尝试运行demo。
- 编译参数修正
你当前配置的--enable-lores-clock参数会禁用高精度时钟,和altency demo要求的微秒级定时场景直接冲突,会触发参数校验返回EINVAL。可重新编译Xenomai,去掉该参数后重新安装再测试。 - 权限配置校验
除了用sudo运行外,也可将当前用户加入xenomai用户组避免权限异常:
sudo groupadd xenomai sudo usermod -aG xenomai $USER
执行后重新登录用户再测试即可。
内容的提问来源于stack exchange,提问作者Romano Signorelli
相关产品推荐
相关产品推荐

