0

アンテナから 40khz 信号を送信するプロジェクトを作成しています。信号があまり正確ではないことがわかったので、リアルタイム カーネルを試すことにしました。

Raspberry-Pi 2B で Raspbian Jessie を実行しています。クリーン インストール後、スクリプトは問題なく実行されます。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);

カーネルをコンパイルするときに何か見落としがありますか?

4

2 に答える 2

1

PREEMPT_RT を使用するには、次のことを行う必要があります。

  • 現在のカーネルの構成を取得します
  • カーネルソースを取得する
  • PREEMPT_RT パッチを使用してカーネル ソースにパッチを適用します (または、既にパッチが適用されたカーネルを取得します)。
  • 新しいカーネルを現在のカーネルとして設定します (つまり、 を使用make oldconfig)
  • カーネル構成で完全なプリエム性を有効にします (たとえば、 を実行してmake menuconfig)。
  • 標準的な方法でカーネルをコンパイルします
  • 新しいカーネルをインストールする

したがって、特別なアクションは必要ありません。

それでもパフォーマンスが十分でない場合は、特定の IRQ スレッドの優先度を調整することができます。

特定のエラーから、新しいカーネルが現在のカーネルとは異なる構成でコンパイルされているようです (GPIO が有効になっていないなど)。

于 2015-12-16T11:27:56.840 に答える