【问题标题】:using BCM2835 with RT-PREEMPT kernel使用带有 RT-PREEMPT 内核的 BCM2835
【发布时间】:2016-03-22 11:59:18
【问题描述】:

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

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

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

这是代码sn-p:

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);

编译内核时有什么遗漏吗?

【问题讨论】:

  • 你能不能试着写一个除了delayMicroseconds什么都不做的程序并调试它?
  • 这是其他人报告几乎相同的问题(但后来它自行消失了):groups.google.com/forum/#!topic/bcm2835/ys4aWbllqjo
  • @JohnZwinck 我对C不熟悉。如何调试它?运行时错误是否有任何错误日志?谢谢。
  • #include #include #include #include #define PIN RPI_V2_GPIO_P1_07 int main(int argc, char *argv[ ]){ fprintf(stdout , "开始\n"); if( bcm2835_init()
  • 刚刚写了一个小脚本,第一个“SLEEP”之后就挂了……

标签: linux real-time raspbian preempt-rt


【解决方案1】:

要使用 PREEMPT_RT,您只需:

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

因此,不需要特别的行动。

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

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

【讨论】:

  • 对不起,我忘记发布我所指的教程的链接。这是链接frank-durr.de/?p=203 这些步骤“make menuconfig zcat config.gz > .config”是否与“make oldconfig”相同?感谢您的回答。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2021-07-17
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2013-06-18
    • 2014-04-26
    相关资源
    最近更新 更多