同じタスクを実行する別の方法がある場合、組み込みシステムの一部の特定のデバイス(GPIOなど)のデバイスドライバを作成することの利点を完全に理解していないと思います。
sysfsとデバイスツリーを介してGPIOにアクセスできます。
- 新しいデバイスツリーオーバーレイを作成して有効にします。
- /sys/class/gpioに移動
- 必要なピンをエクスポートして使用を開始します(単純なシェル呼び出しまたはc / C ++アプリケーション内)。
独自のドライバを作成してみてください。
- 実際の機能コードを書いてみてください。
- ユーザースペース (/dev/tty など) のノードにドライバーを公開します。
- ドライバにアクセスするための別のc / C ++コードを書く(簡単なシェル呼び出しでもアクセス可能)
- 新機能が必要な場合は、まずドライバを変更してからコードを変更してください。 (なぜ?)
/dev/memを直接使用してください。
- mman.hを含み、/ dev / memオブジェクトを使用してGPIOステータスを設定または取得します。
だから、
- 1 -> 廃止され、速度が遅くなります。 (もちろん迅速なプロトタイピングには良いです)
- 2 -> 1よりどれくらい速いですか?最初のものも別のGPIOドライバではありませんか?
- 3 - >これが最良かつ最速の方法ではありませんか?
上記でいくつか質問しましたが、これが最大の質問です。なぜ3番目のソリューションを使用しないのですか?
答え1
オプション2の利点は、単一の場所で要求を確認できることです。食器洗い機の場合、水を入れる前にドアセンサーがドアが閉じていることを示すことを確認できます。もちろん、人々に水を放出する前に連絡先の状態を確認するように言うことができますが、それらはすべてそうしますか?
オプション1と3の潜在的な欠点は特権です。これは、組み込みデバイスの複雑さによって異なりますが、異なるタスクを実行する異なるユーザーIDを持っている場合があります。たとえば、ホームルーターには、Web UIを実行しているhttpサーバーを実行する異なるuidと、Web UIを操作する異なるデーモンがあります。フロントパネルLED。 GPIOドライバはきめ細かいアクセス制御を持つことができますが、ほとんどのドライバは全部または全面的なアプローチを取ります。オプション2を使用すると、どのユーザーがどの施設にアクセスできるかを詳細に決定できます。
オプション2の欠点は、より複雑で、一般的にカーネルにコードが必要であることです。