问题标签 [preempt-rt]
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 - 带/不带 PREEMPT-RT 补丁的 Linux Kernel 5.10 的区别
使用当前版本 5.10 的 vanilla linux 内核,可以将内核配置为低延迟版本,因为主线已经接受了来自 Preempt-rt 补丁团队的多个合并请求。但是,如果使用相关的 preempt-rt 补丁版本修补 vanilla 内核,则可以将内核配置为完全可抢占。
但是这个完全可抢占的配置有什么变化呢?
- 中断处理程序的硬 IRQ 部分(上半部分/关键部分)现在也可抢占吗?
有没有人有正确论文或文档的链接,因为我在 linux 基金会网站的官方 Wiki 页面上没有找到任何搜索内容,我也没有在 ieee xplore 上找到论文。
我预先感谢您的帮助。
linux-kernel - lockdep 在 preempt-rt linux 内核中有用吗?
我给 linux 内核打了 4.14.103-rt55 preempt-rt 补丁。并通过设置 Y 启用 lockdep
而且我收到了带有不一致锁定统计信息的 lockdep 警告:
================================
警告:不一致的锁定状态
4.14.98-rt55 #1 污染:GS\不一致的 {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} 用法。
cpuhp/0/17 [HC1 1 :SC0[0]:HE0:SE1] 采用:
((pendingb_lock).lock){?.+.},在:[<ffffff80080c69d4>] queue_work_on+0x6c/0x150
{HARDIRQ-ON -W} 状态注册于:
lock_acquire+0x244/0x274
rt_spin_lock+0x50/
0x64 queue_delayed_work_on+0x70/0x15c
init_mm_internals+0x13c/0x258
kernel_init_freeable+0x13c/0x2bc kernel_init
+0x18/0x114
ret_from_fork+0x18 0x10
事件戳:
在 (179) 启用:[<ffffff80088de500>] trusty_irq_cpu_up+0x164/0x16c
hardirqs 最后在 (180) 禁用:[<ffffff8008082a3c>] el1_irq+0x7c/0x144
softirqs last enabled at (0): [<ffffff80080a1f8c>] copy_process.isra.6.part.7+0x4c8/0x17ec
softirqs last disabled at (0): [< (null)>] (null)
其他可能对我们有帮助的信息调试这个:
可能的不安全锁定场景:
CPU0
----
lock((pendingb_lock).lock);
<中断>
lock((pendingb_lock).lock);
*** DEADLOCK ***
cpuhp/0/17 持有的 1 个锁:
#0: (cpuhp_state-up){+.+.},位于:[<ffffff80080a680c>] cpuhp_thread_fun+0xd4/0x1e0
堆栈回溯:
CPU:0 PID:17 通讯:cpuhp/0 污染:GS 4.14.98-rt55 #1
硬件名称:板 (DT)
调用跟踪:
[<ffffff800808ae10>] dump_backtrace+0x0/0x240
[<ffffff800808b074>] show_stack+0x24/0x30
[<ffffff8008b9aba0>] dump_stack+0x94/0xd0
[<ffffff8008115d20>] print_usage_bug+0x1e8/0x29c
[<ffffff80081161e0>] mark_lock+0x40c/0x618
[<ffffff80081169cc>] __lock_acquire+0x3dc/0x14e4
[<ffffff80081184e8>] lock_acquire+0x244/0x274
[<ffffff8008bb530c>] rt_spin_lock+0x50/
0x64 [<ffffff80080c69d4>] queue_work_on+0x6c/0x150
[<ffffff80088dc3f4>] trusty_enqueue_nop+0x9c/0xdc
[<ffffff80088dd3ac>] trusty_irq_handler+0xb0/0x1e0
[<ffffff800812c2f8>] handle_percpu_devid_irq+0x23c/0x478
[<ffffff8008090dc0>] handle_custom_ipi_irq+0x6c/0x70
[<ffffff80081263fc>] generic_handle_irq+0x2c/0x44
[<ffffff8008126b2c>] __handle_domain_irq+0xf0/0xf4
[<ffffff80080916b4>] handle_IPI+0x194/0x3a8
[<ffffff8008081184>] gic_handle_irq+0x160/0x164
Exception stack(0xffffff800a70ba90 to 0xffffff800a70bbd0)
ba80: ffffffc0f953b680 ffffff8009e9c1c8
baa0: fffffffffffffeb0 0000000000000000 ffffff80095b5000 ffffff80095b51e8
bac0: ffffff80097ac1bc 0000000000009645 0000000000000000 0000000000009643
bae0: 0000000000009644 ffffff80097ac1bc 0000000000000028 00000040f6cd4000
bb00 :FFFFFF80095C4880 00000000000000000000000000000000000000000000000000000000000000000000000000000000
来不起
BB20:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000来
bb60: ffffff80088de39c 00000040f6cd4000 0000000000000000 ffffff800a70bcd0
bb80: ffffff80088de500 ffffff800a70bcd0 ffffff80088de504 0000000060c00145
bba0: ffffff8008126c30 00000000000001c0 ffffffffffffffff ffffffc0f276bd48
bbc0: ffffff800a70bcd0 ffffff80088de504
[<ffffff8008082a7c>] el1_irq+0xbc/0x144
[<ffffff80088de504>] trusty_irq_cpu_up+0x168/0x16c
[<ffffff80080a5938>] cpuhp_invoke_callback+0x54c /0xe18
[<ffffff80080a6804>] cpuhp_thread_fun+0xcc/0x1e0
[<ffffff80080d3308>] smpboot_thread_fn+0x254/0x270
[<ffffff80080ceaa0>] kthread+0x124/0x134 [<ffffff8001808497c>] 0x_from808497x10x
+
锁未决b_lock 已修补
rt-linux/community/0307-workqueue-Use-local-irq-lock-instead-of-irq-disable-.patch
此补丁使用local_lock_irqsave代替local_irq_save,也用于其解锁功能。
我从https://www.kernel.org/doc/html/latest/locking/locktypes.html获得了一些信息,local_lock * 函数不会禁用preempt-rt kernel中的抢占和中断。
所以我理解了lockdep警告:
- 进程A获取锁pendingb_lock
- hardirq 中断 B
- 中断 B 需要获取 lock pendingb_lock
然后内核将与 ABA 死锁。
但是,preempt-rt 内核中断处理程序不应该在线程中而不是在 hardirq 上下文中执行?
如果 Interrupt_B 的处理程序 thread_B 没有获得锁 A,它不应该被调度出 cpu 并执行 Process A continue 吗?为什么会出现死锁?
lockdep 在 preempt-rt linux 内核中有用吗?或者我有什么问题?
期待您的回复,谢谢。
matlab - 是否可以将 Matlab 与 Preempt_RT 一起使用?
我参与了一个项目,我应该使用 Raspberry PI 和 Simulink Embedded Coder 作为编译器,但系统由于延迟而导致问题。我建议 Preempt_RT 但即使我搜索了很长时间,我也不明白我是否可以为 Simulink 调整 RT 补丁,还是应该使用 Xenomai 来做?在这种情况下,我是初学者,所以很少有帮助。
linux - 抢占 RT linux 构建过程失败
我按照本指南https://docs.ros.org/en/foxy/Tutorials/Building-Realtime-rt_preempt-kernel-for-ROS-2.html
在构建时(make -j nprocdeb-pkg)我收到一个错误,我想我按照本指南的第二个答案解决了(https://askubuntu.com/questions/1327749/error-in-compiling-installing-realtime -kernel-on-ubuntu-20-04-2-lts )
当我重新启动电脑时,我收到一个错误,我认为我在本指南的第一个答案禁用安全启动后解决了(https://askubuntu.com/questions/1081472/vmlinuz-4-18-12-041812-generic-has -无效签名)
现在当我打开电脑时,它可以启动 linux 内核以抢占 rt,但启动后它卡在光标上,我无法在黑屏上移动。
我怎么解决这个问题?
linux - 补丁错误:在为 ubuntu 安装 RT Linux 补丁期间
我尝试将我的 Ubuntu 转换为实时 Ubuntu 我遵循 RT Linux 的步骤,但在补丁步骤中出现错误。
sr@pc:~/patches$ 补丁 -p1 < ../patch-5.4.129-rt61.patch
在输入第 5 行找不到要修补的文件 也许您使用了错误的 -p 或 --strip 选项?导致此的文本是:|diff --git a/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.html b/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited- Grace-Periods.html |index 57300db4b5ff..31c99382994e 100644 |--- a/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.html |+++ b/Documentation/RCU/Design/Expedited -Grace-Periods/Expedited-Grace-Periods.html -------------------------- 要修补的文件:
linux-kernel - linux preemptRT 的硬件要求
安装和运行 Linux 补丁以抢占 rt 是否有任何硬件要求?我之所以这么问是因为在我安装了新的补丁内核后,当我尝试引导到抢占 rt 内核时,引导后出现一个只有光标的黑屏(我不能移动)。我从具有 linux 内核 5.8 的 Ubuntu 20.04 开始,并安装了带有补丁 5.6.19 的 linux 内核 5.6.19。哪个可能是问题?我该如何解决?
linux-kernel - 如何使用自定义内核 5.10 (PREEMPT RT) 构建 raspbian
我正在尝试在 Linux 内核 5.10 中启用 PREEMPT RT(完全抢占模型)。但是,从自定义内核映像引导时出现黑屏,我不知道为什么会发生这种情况。任何帮助是极大的赞赏。这是我的所有步骤:
以下所有文件均可在https://github.com/remusmp/rpi-rt-kernel
. 只需克隆并运行make
.
- 我用码头工人建造。这是我的 Dockerfile:
- 脚本
build.sh
:
我得到了一个自定义的 .config 文件,我在运行
make menuconfig
并启用完全 PREEMPT RT 后从容器中复制了该文件。我必须先禁用 KVM 才能显示 Full PREEMPT RT 选项,但这对我的用例来说没问题。这是我对内核所做的唯一定制,仅此而已。结果是一个压缩的 sd 卡图像,然后我将其解压缩并
dd
使用以下命令保存到 sdcard:
我是否在上述过程中遗漏了一些东西,或者我应该从哪里获得一个工作的自定义 Linux 内核映像?我按照指南进行操作https://www.raspberrypi.org/documentation/computers/linux_kernel.html
,如果我设置香草,它可以正常工作kernel8.img
,config.txt
但我的启用抢占 rt 的自定义内核不起作用。
非常感谢!
linux - Porteus Linux 内核问题
我尝试在 32 位计算机上安装 Porteus v4.0,并使用测试工具 Cyclictest 进行延迟测试。最大延迟值在24ms左右,不符合实时程序想要达到的值。
请问Porteus v4.0内置的Linux内核(Linux porteus 4.16.3-porteus #1 SMP PREEMPT)是否和PREEMPT_RT补丁有相同的PREEMPT效果
linux - Linux内核中标志SCA_MIGRATE_ENABLE/DISABLE中“SCA”的含义
这些标志在 kernel/sched/sched.h 中定义,并在为 core.c 中的任务启用/禁用迁移时使用。通过查看代码或补丁说明,我无法确定 SCA 的简称。