5

我正在开发一个嵌入式 Linux 项目,使用可能在 3.3 版左右的 arago 发行版。

我已经配置了一个高分辨率的 Linux 计时器,每毫秒唤醒一次我的进程。这工作正常,但时间有两个问题:

  1. 唤醒时间的抖动
  2. 尽管进程完成的处理是恒定的,但清醒时处理时间的可变性。

我将这些问题归咎于 Linux 的实时性能不佳。但我需要研究提高实时性能的方法。

我检查了内核是否配置了 CONFIG_PREEMPT 内核选项,这对实时很有用。

我还将 SCHED_FIFO 调度类应用于我的进程:

struct sched_param schedparm;
memset(&schedparm, 0, sizeof(schedparm));
schedparm.sched_priority = 1; // lowest rt priority
sched_setscheduler(0, SCHED_FIFO, &schedparm);

但这并没有什么不同。

我想一个合乎逻辑的步骤是将 PREEMPT_RT 补丁应用于内核构建,但我还没有确定如何做到这一点。

我还能做些什么来改善抖动/持续时间的可变性吗?

或者任何人都可以建议一个关于如何应用 PREEMPT_RT 补丁的可访问教程?

4

2 回答 2

1

看来 PREEMPT_RT 是合乎逻辑的下一步。你试过这个教程吗?

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO

更新:我建议你看看其他人如何构建抢占式内核,例如: https ://aur.archlinux.org/packages/linux-rt/

您可以阅读 PKGBUILD 以了解所做的工作。

于 2012-12-05T12:11:30.730 回答
0

如果您使用 Debian 测试或 LMDE,他们在 x86 和 amd64 架构的存储库中有一个预编译的 PREEMPT_RT 内核。

apt-get install linux-image-rt-686-pae

或者

apt-get install linux-image-rt-amd64
于 2013-04-26T16:33:23.047 回答