<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PREEMPT_RT on TiJet</title><link>https://www.tainuohc.com/tags/preempt_rt/</link><description>Recent content in PREEMPT_RT on TiJet</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Tue, 21 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.tainuohc.com/tags/preempt_rt/index.xml" rel="self" type="application/rss+xml"/><item><title>驯服 Linux 抖动：PREEMPT_RT + Xenomai 实现 50µs 硬实时闭环控制</title><link>https://www.tainuohc.com/blog/2026-07-21-linux-rt/</link><pubDate>Tue, 21 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.tainuohc.com/blog/2026-07-21-linux-rt/</guid><description>&lt;h2 id="1-挑战在-30-美元的-soc-上跑软-plc">1. 挑战：在 30 美元的 SoC 上跑软 PLC&lt;/h2>
&lt;p>泰诺下一代运动控制器需要在单颗 SoC 上运行软 PLC 运行时，同时对六个伺服轴执行 20kHz 的闭环 PID 控制。目标硬件：售价约 30 美元的全志 A40i（四核 Cortex-A7）。没有 FPGA，没有专用 DSP——只有普通的 ARM 核跑 Linux。&lt;/p>
&lt;p>问题显而易见：标准 Linux 即使配置了 &lt;code>SCHED_FIFO&lt;/code>，在这类硬件上仍会出现 200~500µs 的调度抖动。对于周期仅 50µs 的 20kHz 控制环来说，这完全不可接受。错过截止时间意味着相位误差累积，最终导致机械系统失稳。&lt;/p>
&lt;h2 id="2-preempt_rt-地基">2. PREEMPT_RT 地基&lt;/h2>
&lt;p>第一步很直接：应用 &lt;code>PREEMPT_RT&lt;/code> 补丁集，配置内核 &lt;code>CONFIG_PREEMPT_RT_FULL=y&lt;/code>。这几乎将所有 Spinlock 临界区转换为可抢占的互斥锁，让内核实现近乎完全可抢占。&lt;/p>
&lt;p>关键内核配置：&lt;/p>
&lt;pre tabindex="0">&lt;code>CONFIG_PREEMPT_RT_FULL=y
CONFIG_HZ=1000
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
CONFIG_NO_HZ_FULL=y
&lt;/code>&lt;/pre>&lt;p>仅凭 &lt;code>PREEMPT_RT&lt;/code>，最差调度延迟从 ~480µs 降至 ~80µs。有改善，但仍达不到 50µs 的预算。&lt;/p>
&lt;h2 id="3-引入-xenomai-4evl-核">3. 引入 Xenomai 4（EVL 核）&lt;/h2>
&lt;p>Xenomai 4 的 EVL 核与 Linux 并行运行一个独立的实时核心，在中断到达 Linux 内核之前就进行拦截。实时线程由 EVL 核直接调度，完全绕过 Linux 调度器。&lt;/p></description></item></channel></rss>