2

root 以外のユーザーが実行する組み込み Linux システムで GPIO にアクセスするための ac プログラムを作成しようとしています。既に sysfs (/sys/class/gpio) を介して GPIO にアクセスでき、mmap (/dev/mem/ を介して) を使用して GPIO を制御する簡単なプログラムを作成しました。ただし、/sys/class/gpio/ および /dev/mem/ に書き込むには、root 権限が必要です。root 以外のユーザーとして実行されるプログラムで GPIO にアクセスするための最も「正しい」または標準的な方法は何でしょうか?
デバイス ドライバーを作成しますか?
ユーザーに /sys/class/gpio/ への読み取り/書き込みアクセスを許可して、プログラムが sysfs を使用できるようにしますか?
または、ユーザーに /dev/mem/ への読み取り/書き込みアクセスを許可して、プログラムが mmap() を使用できるようにしますか?

ありがとう

4

2 に答える 2

1

考えられるオプションの 1 つは 、ビットを設定してプロセスをsetuidにすることです。s

例えば

chmod +s myExectuable

ただし、プロセスがルートとして実行されるため、これにはセキュリティ上の重大な影響があります。これにはすべての危険が伴います。ユーザー空間アプリを本当に信頼している場合のみのオプションであり、それでもリスクがあります。

カーネルをハッキングせずに sysfs のデフォルトの所有権とパーミッションを変更することは不可能だと思います。また、そうしても難しいでしょう: sysfs は Linux ドライバー モデルのオブジェクト モデルと複雑に関連しています。

のアクセス許可があれば、もっとうまくいくかもしれません/dev/

最終的に、この問題を解決する正しい方法は、カーネル モード ドライバーです。カーネル モード ドライバーでは、必要に応じてきめ細かいセキュリティ (またはその欠如) を実装できます。さらに、ユーザー モード アプリケーションがハードウェアを制御できるようにすることによる潜在的な悪影響に対する軽減策を実装できます。

于 2012-10-18T21:39:04.613 に答える
1

/sys/class/gpio の下で特に必要なノードへのアクセス権をカスタム ユーザー グループに付与することは、適切な場合にはかなり確実なソリューションです。これは、カーネル レベルのプログラミングを必要とせずに、ブート スクリプトから完全に実行できます。

于 2012-10-19T20:17:25.860 に答える