问题标签 [rtai]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 如何检测函数的调用线程是否已经是 RTAI 实时的?
我正在做一个在内核和用户空间中都使用 RTAI 的大型项目。我不会详细介绍该项目,但这里简要介绍了出现问题的地方。
在用户空间,我的项目提供了一个库,供其他人用来编写一些软件。这些程序本身可能具有 RTAI 实时线程。
现在,RTAI 中的一些函数要求它们的调用线程已经ed,所以如果我想在库中的函数中使用它们,我需要通过调用和 laterrt_thread_init
临时使调用线程实时。rt_thread_init
rt_task_delete
现在问题来了:
如果我的函数的调用线程已经是实时的,那么我rt_thread_init
假设它只是失败了,但是然后我rt_task_delete
并使该线程成为非实时的(除了当线程本身(假设我什么都没改变)再次rt_task_delete
,RTAI 崩溃。
如果我的函数的调用线程不是实时的,一切都很好。
现在,我在函数中采用了一个参数,以便调用函数告诉库它是否是实时的。但是,我想知道 RTAI 是否有功能或其他东西,以便我可以用来自动检测当前线程是否是实时的。
不知道这里有没有 RTAI 用户(我当然没看到 RTAI 标签),但希望有。
c++ - Should I join a thread that has been killed?
I have many joinable threads that at some point need to all stop. The threads are pthread, but are created through RTAI's user-space interface (never mind the RTAI though).
For each thread I have a variable that I can set to tell them to quit. So what I do is:
- set that variable for each thread so that they stop
- Wait at most one second
- join the threads
Now the thing is, since I am using RTAI, which uses a kernel-space buddy thread to the work for me, if something goes wrong, the thread may go unresponsive (It has never happened, but I have to be careful just in case something DOES go wrong). In such a case, I just kill the thread.
So, my question is, once you have a thread that is killed, should you join
on it or not?
linux-kernel - 如何从内核模块访问(打开/读取/等)/dev 设备?
我收到了一个驱动程序(PCI 卡的 PCAN 驱动程序,使用 rtdm),它创建 /dev/pcan0 并且 /dev/pcan1 被编译为 netdev 驱动程序。
该驱动程序附带了许多功能,但它们都针对读取 CAN 消息的用户级程序。然而,我需要的是从内核模块中读取这些消息。PCAN 驱动程序不导出任何变量/函数,这意味着它不提供内核级 API 供我使用。
我简要查看了代码并从 /dev 设备读取并写入它不使用copy_from_user
or copy_to_user
。因此,我认为从我的内核模块打开 /dev/pcan0 并从中读取应该是安全的。
现在我的问题是,如何从内核模块打开/读取 /dev 设备?
PS我想从RTAI实时线程从CAN总线读取,你认为这会导致问题吗(例如每次读取都通过linux内核并因此破坏实时条件?)
c - 给定浮点数时如何避免FPU?
好吧,这根本不是一个优化问题。
我正在编写一个(目前)简单的 Linux 内核模块,我需要在其中找到一些位置的平均值。这些位置存储为浮点(即float
)变量。(我是整件事的作者,所以我可以改变这一点,但我宁愿保持浮动的精确性,如果可以避免的话,不要参与其中)。
现在,这些位置值存储(或至少习惯于)在内核中只是为了存储。一个用户应用程序写入这些数据(通过共享内存(我使用的是 RTAI,所以是的,我在内核空间和用户空间之间有共享内存)),而其他应用程序则从中读取数据。我假设从浮点变量读取和写入不会使用 FPU,所以这是安全的。
安全,我的意思是避免在内核中使用 FPU,更不用说某些系统甚至可能没有 FPU。我不会使用kernel_fpu_begin/end,因为这可能会破坏我的任务的实时性。
现在在我的内核模块中,我真的不需要太多的精度(因为无论如何位置都是平均的),但我需要它达到 0.001。我的问题是,如何在不使用 FPU 的情况下将浮点数转换为整数(原始数字的 1000 倍)?
我考虑过手动从浮点数的位模式中提取数字,但我不确定这是否是个好主意,因为我不确定字节序如何影响它,或者即使所有架构中的浮点都是标准的。
linux - POSIX 实时信号可以产生软实时吗?
来自:https ://mail.rtai.org/pipermail/rtai/2012-April/024968.html
将会发生的情况是,当 Linux 发出真正的实时 RTAI 任务信号时,您将在未定义的时间段内失去实时。
RTAI 通常不支持 POSIX API。
那么,当 POSIX 实时信号发送到 RTAI 的实时任务时,控制权会转移到用户空间吗?但我认为,由于 POSIX 信号也是实时信号,它们可以写入内核模块(?).. 那么怎么能说它会导致软实时呢?
我不太确定引用的原因,请解释我遗漏的一点。
c - 将用户空间代码移植到内核空间
到目前为止,我有一个主要用 C 语言编写的大型系统,它一直在用户空间中运行。现在我需要将代码编译为内核模块。为此,afaik,我至少应该重写代码并将函数替换为malloc
, calloc
, free
,printf
与它们的内核等效项,因为这些只是用户空间函数。然而,问题是我没有系统中使用的一些定制库的源代码,这些库malloc
在它们的函数中调用等。所以,基本上,我可能需要重新实现整个库。
现在的问题是:如果我将自己的实现malloc
作为包装器编写,这将是一个非常肮脏的黑客攻击,kmalloc
如下所示:
然后将此实现链接到系统代码,这将消除模块错误中的所有未知符号。
实际上,我认为这将是一个常见问题,并且已经有人编写了这样的 kmalloc 包装器,但是我已经在谷歌上搜索了几天,没有发现任何有用的东西。
编辑:这样做的原因是我正在谈论的系统是在 VxWorks 实时操作系统上运行的实时应用程序,现在我们希望将其移植到 Linux RTAI 上使用,其中应用程序主要在内核空间中运行。但我想在用户空间也有可能实现实时,所以,我应该按照 Mike 的建议去做,将代码分成内核和用户空间部分,并通过共享内存在它们之间进行通信。
serial-port - 串口是写线程的人质
我有两个实时线程(linux)
第一个是通过串行端口(内核空间)发送字节
第二个是从串口读取相同的字节(因为我使用了环回设备)。
然而,第一个线程连续异步发送数据;
第二个线程无法打开串口读取..
我使用了信号量,但我想我的问题..不是同步问题,我的问题是串行端口仍在第一个线程手中。
我该如何克服这个问题..
我对你的建议持开放态度,
此致
linux - 串行端口 ; 看不懂我写的
我无法读取发送到串行端口的内容,当我随机生成数据时,我想通过 COM1 发送它,并使用两个不同的实时线程从 COM2 读取我使用 RTAI 函数,
可以说;我发送'H''E''L''L''O'一些随机字节和0x01; 但是我无法读取“H”“E”“L”“L”“O”某个字节和 0x01。我读取的值与通过串行端口发送的值不同。可能是什么原因?1-) 我在 COM1 和 COM2 之间使用空调制解调器电缆 2-) 我已经按顺序发布了写入器和读取器脚本。3-) 串行端口传输(写入端)为 rt_sperr 提供错误,很可能是溢出或缓冲区已满错误。4-) 我在用户空间复制了这个项目,我遇到了一个 RESOURCE TEMPORARY UNAVAILABLE 消息,这与串行端口的大小有关吗?如果是的话,你能建议我一个阅读有关调整串行端口缓冲区大小的地方吗?你有什么建议我采取的行动吗?最好的
linux - 串口:如何调整内核空间中的串口缓冲区大小
我需要知道如何调整内核空间中的串口缓冲区大小。ioctl 和类似的命令在内核空间中不起作用。我正在使用 RTAI 函数。rt_spopen,rt_spwrite else.. 我希望的原因依赖于通过空调制解调器电缆通过串行端口(COM1)发送大数据包(367 字节)。
最好的
linux - RTAI-3.8 安装堆叠在 ubuntu-12.04(x64)+linux-kernel-2.6.32.2
我无法在 ubuntu-12.04(x64)+linux-kernel-2.6.32.2 中完成 RTAI-3.8 的安装。
我正在尝试在新 PC 上安装 RTAI。使在另一台 PC 上运行良好的 linux 内核配置成功。但是,“make install”后重启失败。在 grub 中选择 RTAI-patched linux 后,具体症状没有到达登录屏幕。这与安全模式下的症状相同。
在linux内核配置中
即使在任何模式中,也没有成功的模式。CPU 核心数类似。
这是一种你不知道是什么原因的情况。或者会不会有硬件比如CPU或者主板RTAI不支持?我的电脑是 Pro5500-H 奋进。规格如下。
请帮我!