使用带有RT-PREEMPT内核的BCM2835

时间:2015-12-16 11:11:45

标签: linux real-time raspbian preempt-rt

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

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

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

这是代码段:

class myNavigationController: UINavigationController {

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
...

编译内核时是否会遗漏任何内容?

2 个答案:

答案 0 :(得分:1)

要使用PREEMPT_RT,您只需:

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

因此,不需要采取特别行动。

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

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

答案 1 :(得分:1)

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