开源改变世界!!

据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在 #159

推推 grbl 2年前 (2023-01-29) 88次浏览
关闭
jepler 打开了这个问题 2016 年 9 月 6 日 · 5 条评论 · 由#184修复
关闭

据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在#159

jepler 打开了这个问题 2016 年 9 月 6 日 · 5 条评论 · 由#184修复

注释

据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在 #159
成员
杰普勒 评论了 2016 年 9 月 6 日  

请参阅https://forum.linuxcnc.org/forum/39-pncconf/30751-problems-with-prempt-rt-kernel-error-and-7i76e?limitstart=0上的主题

使用 PNCconf:我无法对任何轴电机或主轴使用测试/调整功能。尝试从 PNCconf 中调整任一轴步进驱动器时出现以下错误:

文件“/usr/bin/pncconf”,第 1630 行,在 check_for_rt
eLif Hal.is_rt 而不是 hal.kernel_version == actual_kernel:
AttributeError: ‘module’ object has no attribute ‘kernel_version’

我没有为自己测试这个,但我认为这是一个准确的错误报告,会影响任何 uspace 用户。

据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在 #159
成员作者

@c-morley你能看看这个吗?

据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在 #159
合作者

这个周末我会试着看看

克里斯


发件人:Jeff Epler notifications@github.com
发送时间:2016 年 9 月 6 日下午 4:07
收件人:LinuxCNC/linuxcnc
抄送:c-morley;提及
主题:回复:[LinuxCNC/linuxcnc] 据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在(#159

@c-morley https://github.com/c-morley 你能看看这个吗?

你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它 https://github.com/ /issues/159 #issuecomment-245001464,或将线程静音 https://github.com/notifications/unsubscribe-auth/AHBrNTRn0qNnip4vcaVmbbTGgV8YofaBks5qnY-tgaJpZM4J1WQn。

据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在 #159
合作者

我没有时间研究这个,但看错误消息似乎 python 模块 linuxcnc,with preempt_rt doesn’t have kernal_version as an attribute:
AttributeError: ‘module” object has no attribute ‘kernel_version’

我认为这可能是因为对内核版本没有硬性要求?
也许我们可以让它报告当前内核版本以便测试通过?

克里斯米

据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在 #159
成员作者

是的,uspace realtime 不依赖于一个特定的内核,所以这就是为什么我对它进行编码以便不定义 hal.kernel_version 除非 RTAPI_KERNEL_VERSION 是(参见提交2c5ed60 “让 python 知道所需的内核版本”):

#ifdef RTAPI_KERNEL_VERSION
    PyModule_AddStringConstant(m, "kernel_version", RTAPI_KERNEL_VERSION);
#endif

在 2.7 中,uspace 与“任何 RT-Preempt 内核”是实时的。在 2.8 中,除了内核之外,这将取决于编译时配置细节和运行时安装的包。例如,我可以这样写:

#ifdef RTAPI_KERNEL_VERSION
    PyModule_AddStringConstant(m, "kernel_version", RTAPI_KERNEL_VERSION);
#else
    if(rtapi_is_realtime())
    {
        uname(&uts);
        PyModule_AddStringConstant(m, "kernel_version", uts.release);
    }
    else
    {
        PyModule_AddStringConstant(m, "kernel_version",
            "Any RT-Preempt kernel"
#ifdef USPACE_RTAI
            " or any RTAI kernel with LXRT support"
#endif
#ifdef USPACE_XENOMAI
            " or any Xenomai kernel with posix skin support"
        );
    }
#endif

pncconf 和 stepconf 是的两个 in-tree 用户,hal.kernel_version所以我愿意做任何更有意义的事情:改变那些程序,这样他们就不会查询,hal.kernel_version除非 when rtapi_is_kernelspace(),或者改变我们的承诺,这样它hal.kernel_version总是被定义为something,如果我们可以定义那东西应该是什么。

据报道,pncconf 在 preempt-rt 上不起作用,因为 hal.kernel_version 不存在 #159
合作者

我认为我们应该让 hal.kernal_version 始终定义为某种东西。
如果抢占显示当前内核是有意义的(因为例如当前内核将始终工作)那么这似乎很好。
Pncconf 和 stepconf 只是真正想知道在测试调用时使用 HAL 系统是否有效,如果无效则提示用户。使用内核 RTAI,内核必须是正确的,否则系统会严重失败。
我们可以在 hal 模块中添加一个 HAL_SYSTEM_AVAILABLE 测试,它可以以任何需要的方式(现在或将来)测试当前正在使用的实时系统。
这似乎可以在未来大量证明问题并将问题留在一个地方。

克里斯米