使用带有 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,问题立马解决,没有任何问题。
为您的任务使用正确的工具非常重要!
我正在做一个从天线发出 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,问题立马解决,没有任何问题。 为您的任务使用正确的工具非常重要!