私はioctlを学び始めました
私はこの例を得ました
http://tldp.org/LDP/lkmpg/2.6/html/x892.html
ioctal の完全な動作が得られましたが、ドライバーの ioctal を定義する必要がある理由と場所がわかりません。
その例では
呼び出す代わりに
ioctl(file_desc, IOCTL_SET_MSG, message);
直接使用できない理由
device_write(file, message, size, 0);
私はioctlを学び始めました
私はこの例を得ました
http://tldp.org/LDP/lkmpg/2.6/html/x892.html
ioctal の完全な動作が得られましたが、ドライバーの ioctal を定義する必要がある理由と場所がわかりません。
その例では
呼び出す代わりに
ioctl(file_desc, IOCTL_SET_MSG, message);
直接使用できない理由
device_write(file, message, size, 0);
それはチュートリアルの性質によるものだと確信しています。の使い方を紹介しようとしていますioctl
。実際にioctl
は、デバイス ドライバーまたはその背後にあるデバイスの構成に使用され、「通常の」方法 (おそらくwrite
) を使用してデータを書き込みます。
実際、それはあなたが提供したリンクでコードが行うことであり、データをカーネル空間にコピーした後device_write
にカーネルが行うことに関する情報を渡すだけです。
ポイントは、ioctl はユーザー空間から呼び出すことができますが、device_write はカーネル内からしか呼び出せないということです。
はioctl
主に、デバイス レジスタの読み取りや書き込みなど、デバイスに関する特定のパラメータやフラグを設定または取得するために使用されます。
古いフロッピー ドライブがあるとします。「モーターのオン/オフ」、「セクターあたりのビット数」などを制御するための特別なレジスターがあります。これらのレジスターを設定するには、ioctl
関数を使用します。実際のディスクに書き込むには、たとえばdevice_write
.