使用带有 RT-PREEMPT 内核的 BCM2835

using BCM2835 with RT-PREEMPT kernel

我正在做一个从天线发出 40khz 信号的项目。 我发现信号不太准确,所以我决定尝试实时内核。

我 运行 Raspbian Jessie 在我的 Raspberry-Pi 2B 上。 全新安装后,脚本 运行 没有任何问题。 bcm2835_delayMicroseconds 可能是 运行.

我按照这个教程http://www.frank-durr.de/?p=203编译并安装了RT内核。 但是,脚本无法再 运行 成功。 显示"HIGH SLEEP"后,被举起

这是代码片段:

fprintf(stdout , "HIGH\n");
bcm2835_gpio_write(PIN, HIGH);
fprintf(stdout , "SLEEP\n");
bcm2835_delayMicroseconds(12);
fprintf(stdout , "LOW\n");
bcm2835_gpio_write(PIN, LOW);
fprintf(stdout , "SLEEP\n");
bcm2835_delayMicroseconds(12);

我在编译内核的时候有没有遗漏什么?

要使用 PREEMPT_RT,您只需:

  • 检索当前内核的配置
  • 检索内核源代码
  • 使用 PREEMPT_RT 补丁修补内核源代码(或获取已打补丁的内核)
  • 将新内核配置为当前内核(即使用make oldconfig
  • 在内核配置中启用完全可抢占性(例如,通过 运行 make menuconfig)。
  • 以标准方式编译内核
  • 安装新内核

因此,不需要特别的操作。

然后,如果性能仍然不够,您可能需要调整特定 IRQ 线程的优先级。

从您的具体错误来看,新内核似乎是使用与当前内核不同的配置编译的(例如,未启用 GPIO)。

我刚刚看到并记住了这个帖子。 大约半年前,我想从 Raspberry 生成 40khz。 但最后我发现我用错了工具。 我相信 Raspberry 无法处理这样的任务,因为它是 运行 和 OS。 我换成Arduino,问题立马解决,没有任何问题。 为您的任务使用正确的工具非常重要!