我目前正在用 C 编写一个 Linux 内核模块。该模块为 USB 灯提供了一个非常基本的驱动程序(该设备由三个彩色 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 内核编程完全陌生,所以我可能会做一些愚蠢的事情。如果您能对此有所了解,将不胜感激。
编辑:这里有一些进一步的信息: