问题标签 [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.

0 投票
1 回答
185 浏览

linux - 如何检测函数的调用线程是否已经是 RTAI 实时的?

我正在做一个在内核和用户空间中都使用 RTAI 的大型项目。我不会详细介绍该项目,但这里简要介绍了出现问题的地方。

在用户空间,我的项目提供了一个库,供其他人用来编写一些软件。这些程序本身可能具有 RTAI 实时线程。

现在,RTAI 中的一些函数要求它们的调用线程已经ed,所以如果我想在库中的函数中使用它们,我需要通过调用和 laterrt_thread_init临时使调用线程实时。rt_thread_initrt_task_delete

现在问题来了:

如果我的函数的调用线程已经是实时的,那么我rt_thread_init假设它只是失败了,但是然后我rt_task_delete并使该线程成为非实时的(除了当线程本身(假设我什么都没改变)再次rt_task_delete,RTAI 崩溃。

如果我的函数的调用线程不是实时的,一切都很好。

现在,我在函数中采用了一个参数,以便调用函数告诉库它是否是实时的。但是,我想知道 RTAI 是否有功能或其他东西,以便我可以用来自动检测当前线程是否是实时的。

不知道这里有没有 RTAI 用户(我当然没看到 RTAI 标签),但希望有。

0 投票
1 回答
171 浏览

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?

0 投票
2 回答
6636 浏览

linux-kernel - 如何从内核模块访问(打开/读取/等)/dev 设备?

我收到了一个驱动程序(PCI 卡的 PCAN 驱动程序,使用 rtdm),它创建 /dev/pcan0 并且 /dev/pcan1 被编译为 netdev 驱动程序。

该驱动程序附带了许多功能,但它们都针对读取 CAN 消息的用户级程序。然而,我需要的是从内核模块中读取这些消息。PCAN 驱动程序不导出任何变量/函数,这意味着它不提供内核级 API 供我使用。

我简要查看了代码并从 /dev 设备读取并写入它不使用copy_from_useror copy_to_user。因此,我认为从我的内核模块打开 /dev/pcan0 并从中读取应该是安全的。

现在我的问题是,如何从内核模块打开/读取 /dev 设备?

PS我想从RTAI实时线程从CAN总线读取,你认为这会导致问题吗(例如每次读取都通过linux内核并因此破坏实时条件?)

0 投票
4 回答
2631 浏览

c - 给定浮点数时如何避免FPU?

好吧,这根本不是一个优化问题。

我正在编写一个(目前)简单的 Linux 内核模块,我需要在其中找到一些位置的平均值。这些位置存储为浮点(即float)变量。(我是整件事的作者,所以我可以改变这一点,但我宁愿保持浮动的精确性,如果可以避免的话,不要参与其中)。

现在,这些位置值存储(或至少习惯于)在内核中只是为了存储。一个用户应用程序写入这些数据(通过共享内存(我使用的是 RTAI,所以是的,我在内核空间和用户空间之间有共享内存)),而其他应用程序则从中读取数据。我假设从浮点变量读取和写入不会使用 FPU,所以这是安全的。

安全,我的意思是避免在内核中使用 FPU,更不用说某些系统甚至可能没有 FPU。我不会使用kernel_fpu_begin/end,因为这可能会破坏我的任务的实时性。

现在在我的内核模块中,我真的不需要太多的精度(因为无论如何位置都是平均的),但我需要它达到 0.001。我的问题是,如何在不使用 FPU 的情况下将浮点数转换为整数(原始数字的 1000 倍)?

我考虑过手动从浮点数的位模式中提取数字,但我不确定这是否是个好主意,因为我不确定字节序如何影响它,或者即使所有架构中的浮点都是标准的。

0 投票
1 回答
287 浏览

linux - POSIX 实时信号可以产生软实时吗?

来自:https ://mail.rtai.org/pipermail/rtai/2012-April/024968.html

将会发生的情况是,当 Linux 发出真正的实时 RTAI 任务信号时,您将在未定义的时间段内失去实时。

RTAI 通常不支持 POSIX API。
那么,当 POSIX 实时信号发送到 RTAI 的实时任务时,控制权会转移到用户空间吗?但我认为,由于 POSIX 信号也是实时信号,它们可以写入内核模块(?).. 那么怎么能说它会导致软实时呢?

我不太确定引用的原因,请解释我遗漏的一点。

0 投票
2 回答
2094 浏览

c - 将用户空间代码移植到内核空间

到目前为止,我有一个主要用 C 语言编写的大型系统,它一直在用户空间中运行。现在我需要将代码编译为内核模块。为此,afaik,我至少应该重写代码并将函数替换为malloc, calloc, free,printf与它们的内核等效项,因为这些只是用户空间函数。然而,问题是我没有系统中使用的一些定制库的源代码,这些库malloc在它们的函数中调用等。所以,基本上,我可能需要重新实现整个库。

现在的问题是:如果我将自己的实现malloc作为包装器编写,这将是一个非常肮脏的黑客攻击,kmalloc如下所示:

然后将此实现链接到系统代码,这将消除模块错误中的所有未知符号。

实际上,我认为这将是一个常见问题,并且已经有人编写了这样的 kmalloc 包装器,但是我已经在谷歌上搜索了几天,没有发现任何有用的东西。

编辑:这样做的原因是我正在谈论的系统是在 VxWorks 实时操作系统上运行的实时应用程序,现在我们希望将其移植到 Linux RTAI 上使用,其中应用程序主要在内核空间中运行。但我想在用户空间也有可能实现实时,所以,我应该按照 Mike 的建议去做,将代码分成内核和用户空间部分,并通过共享内存在它们之间进行通信。

0 投票
0 回答
152 浏览

serial-port - 串口是写线程的人质

我有两个实时线程(linux)

第一个是通过串行端口(内核空间)发送字节

第二个是从串口读取相同的字节(因为我使用了环回设备)。

然而,第一个线程连续异步发送数据;

第二个线程无法打开串口读取..

我使用了信号量,但我想我的问题..不是同步问题,我的问题是串行端口仍在第一个线程手中。

我该如何克服这个问题..

我对你的建议持开放态度,

此致

0 投票
0 回答
355 浏览

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 消息,这与串行端口的大小有关吗?如果是的话,你能建议我一个阅读有关调整串行端口缓冲区大小的地方吗?你有什么建议我采取的行动吗?最好的

0 投票
1 回答
1859 浏览

linux - 串口:如何调整内核空间中的串口缓冲区大小

我需要知道如何调整内核空间中的串口缓冲区大小。ioctl 和类似的命令在内核空间中不起作用。我正在使用 RTAI 函数。rt_spopen,rt_spwrite else.. 我希望的原因依赖于通过空调制解调器电缆通过串行端口(COM1)发送大数据包(367 字节)。

最好的

0 投票
1 回答
831 浏览

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 奋进。规格如下。

请帮我!