[解決済み] IOCTL Linuxデバイスドライバ [終了しました]
2022-03-13 21:43:15
質問
どなたか説明してください。
-
とは何ですか?
IOCTL
? - 何に使うのですか?
- どのように使用するのですか?
-
と同じ働きをする新しい関数を定義することはできないのでしょうか?
IOCTL
?
解決方法は?
について
ioctl
は、デバイス固有のシステムコールの一種であり、入出力制御を意味します。Linuxには300~400のシステムコールがありますが、デバイス固有の機能をすべて表現することはできません。そこで、ドライバはioctlを定義して、ユーザ空間のアプリケーションから命令を送れるようにすることができます。しかし、ioctl はあまり柔軟性がなく、少し乱雑になりがちです(何十もの "magic numbers" これらはただ動くかどうか...)また、バッファをカーネルに渡すので、安全でないこともあります - 悪い処理をすると簡単に壊れてしまいます。
代替案として
sysfs
インターフェイスで、ファイルを
/sys/
を作成し、それを読み書きしてドライバとの情報を取得します。設定方法の一例です。
static ssize_t mydrvr_version_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
return sprintf(buf, "%s\n", DRIVER_RELEASE);
}
static DEVICE_ATTR(version, S_IRUGO, mydrvr_version_show, NULL);
そして、ドライバのセットアップ時。
device_create_file(dev, &dev_attr_version);
この場合、デバイス用のファイルを
/sys/
例えば、以下のようになります。
/sys/block/myblk/version
はブロックドライバの場合です。
もっとヘビーに使うならnetlinkという方法もあります。これはIPC(プロセス間通信)で、BSDのソケット・インターフェースを使ってドライバと会話する方法です。これは、例えばWiFiドライバで使用されています。そして、ユーザースペースから
libnl
または
libnl3
のライブラリーを使用します。
関連
-
Centos7 dns service named installation, encountered ** server can't find xxx.com: NXDOMAIN問題
-
[解決済み] gzip: stdin: gzip 形式ではありません tar: 子プロセスはステータス 1 を返しました。エラーは回復不可能: 現在終了中
-
[解決済み] cronは内部でどのようにジョブをスケジューリングしているのですか?
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Linux で grep を使ってファイル名だけを表示するにはどうしたらいいですか?
-
[解決済み] POSIX」の意味を教えてください。
-
[解決済み] bashで "cat << EOF "はどのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linux ddコマンド詳細説明:データのバックアップ、およびバックアッププロセスでのフォーマット変換のケース
-
Centos7のインストールと展開無料のconfluence wikiの(知識ベース)詳細な操作手順
-
deepin20の不正確な時刻表示を調整する方法は?Deepinの時刻補正方法
-
deepin20のデフォルトブラウザを設定するには?deepinにデフォルトブラウザを追加するためのヒント
-
ubuntu 12.04 eclipse でプログラム g++ がパスに見つからなかったと報告される。
-
リクエスト・エンティティが大きすぎる問題の解決策
-
[解決済み] CPAN.pmが@INCに見つからない(@INCには含まれています。/usr/local/lib/perl5 /usr/local/share/perl5。
-
[解決済み] gzip: stdin: gzip 形式ではありません tar: 子プロセスはステータス 1 を返しました。エラーは回復不可能: 現在終了中
-
[解決済み] エラーです。Can't open display: (null)と表示されることがあります。
-
[解決済み] Linuxのディレクトリ内のファイルを再帰的にカウントする