问题标签 [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.
rtai - RTAI:编写数据结构的模块内核
我正在尝试使用 rtai 编写一个内核模块,该模块允许我编写数据结构。数据结构包含在 .h 文件中,并包含有关任务的信息,例如
文件.h
我以这种方式构造了表格
我遇到的问题是,这样我只初始化了数据结构的值,如何传递与几个任务相关的值并确保这些被另一个正确编写的内核模块读取?
c - 什么会导致 C 代码在声明时初始化数组时崩溃,但如果被循环清零则不会崩溃?
最近在我从事的一个项目中“修复”了一个错误,但到目前为止,没有人能够解释修复工作的原因。(那么它真的是一个修复吗?)代码是在实时系统下的内核空间中运行的,所以这个问题会导致系统完全锁定。这也使得调试比平常更难。
此版本使系统崩溃:
这个版本不崩溃
真正令人困惑的是,这个实验版本也崩溃了
你可以在这里看到提交和周围的代码: https ://github.com/LinuxCNC/linuxcnc/commit/ef6f36a16c7789af258d34adf4840d965f4c0b10
c - 这个函数如何在不写入“发送器寄存器”的情况下进行“写入”操作?
这是来自的代码rt_imx_uart.c
:
我了解此功能是在用户空间程序想要写入设备时使用的。但是我不明白这个函数是如何做到的,因为我们在程序中没有任何地方写入发送器寄存器。使用的 start_tx 函数仅启用一个标志,仅此而已。
PS:这里是这个驱动的链接:链接到驱动
linux - 在故障转储中,我应该如何解释指令指针偏移量?
我正在尝试调试内核模块。我已经用 -g 编译了它,并且我正在使用 netconsole 进行日志记录。
在输出中我看到:
[ 575.335966] RIP: 0010:switch_rtai_tasks+0x329/0x428 [rtai_sched]
我理解的意思是问题
[575.335942] general protection fault: 0000 [#1] PREEMPT SMP PTI
发生在函数 switch_rtai_tasks 函数启动后的 0x329 字节处。Objdump 给了我:
329: 48 0f ae 0a fxrstor64 (%rdx)
(到目前为止,在三起崩溃中,它始终指向 fxstor64,但随着添加更多调试和重新编译,我无法确定它是否相同)但是,我在该函数中有调试 printk 语句,这些语句没有被输出。所以我不完全相信问题出在那个函数上。
addr2line 不同意,这让我更加缺乏信心:
这将问题放在“rt_find_task_by_pid”中,它(还)不包含任何调试 printk。
那么,我应该相信谁?(switch_rtai_tasks+0x329/0x428 中 / 之后的第二个偏移量是多少?
为了完整起见,更多的转储: