私は現在、CでLinuxカーネルモジュールを作成中です。このモジュールは、USBライト用の非常に基本的なドライバーを提供します(デバイスは3つの色付きLEDで構成されています)。ドライバーを問題なくロードおよびアンロードし、デバイス(、、など)を作成することができまし/dev/wn0
た/dev/wn1
。ただし、デバイスに書き込もうとするとエラーが発生し続けます。
$ echo "1" >/dev/wn0
bash: echo: write error: Broken pipe
モジュールのコード全体はここにあります。ただし、興味深い部分はwn_set_color()
関数です。
/* Create the data buffer to be sent to the device. */
u8 buf[8] = {
red, green, blue, 0, 0, 0, 0x1F, 0x05
};
/* Send the data to the device. */
return usb_control_msg(udev,
usb_sndctrlpipe(udev, 0),
0, 0, 0, 0,
buf, 8, 0);
何らかの理由で-32
、データをデバイスに送信する代わりに戻ります。
私はLinuxカーネルプログラミングにまったく慣れていないので、ばかげたことをしている可能性があります。これに少しでも光を当てることができれば、大いにありがたいです。
編集:ここにいくつかの詳細情報があります: