gpt4 book ai didi

c - USB 的简单内核模块

转载 作者:太空狗 更新时间:2023-10-29 15:41:22 26 4
gpt4 key购买 nike

我正在尝试熟悉 Linux 内核模块。所以我写了这个在 usb 上工作的最简单的模块。我不确定我错过了什么。正在加载模块。同样在 dmesg 上我可以看到这个:

   [27245.911387] usbcore: registered new interface driver testusb
[27245.911392] testusb: driver registered successfully

但是当我插入 USB 内存棒时,我的 testusb_probe 函数没有被调用。知道我哪里出错了。这是模块的代码:

   #include <linux/kernel.h>
#include <linux/module.h>
#include <linux/usb.h>


static int testusb_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
printk("testusb: probe module\n");
return 0;
}


static void testusb_disconnect(struct usb_interface *interface)
{
printk("testusb: disconnect module\n");
}


static struct usb_driver testusb_driver = {
name: "testusb",
probe: testusb_probe,
disconnect: testusb_disconnect,
};

static int __init testusb_init(void)
{
int result;

result = usb_register(&testusb_driver);
if (result) {
printk("testusb: registering driver failed");
} else {
printk("testusb: driver registered successfully");
}

return result;
}


static void __exit testusb_exit(void)
{
usb_deregister(&testusb_driver);
printk("testusb: module deregistered");
}

module_init(testusb_init);
module_exit(testusb_exit);

MODULE_AUTHOR("Dal Chand");
MODULE_LICENSE("GPL");

最佳答案

您的测试驱动程序未启用 USB 热插拔。

http://www.linuxjournal.com/node/4786/print

/* Define these values to match your devices */
#define USB_VENDOR_ID 0xfff0
#define USB_PRODUCT_ID 0xfff0

/* table of devices that work with this driver */
static struct usb_device_id test_table [] = {
{ USB_DEVICE(USB_VENDOR_ID, USB_PRODUCT_ID) },
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE (usb, test_table);

USB_VENDOR_ID 和 USB_PRODUCT_ID 是您的 U 盘 ID。如果您不知道 ID,请在插入棒时检查 dmesg 消息。

关于c - USB 的简单内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com