usb 驱动实例

这是一个简单的LinuxUSB驱动程序,展示了如何在设备插入和断开时进行操作。my_usb_probe()在设备插入时被调用,my_usb_disconnect()在设备断开时执行。驱动注册和注销通过usb_register和usb_deregister完成,并使用USB设备ID0x1234:0x5678进行匹配。要实现完整的驱动,还需处理URB(USB请求块)以进行不同类型的USB传输。
摘要由CSDN通过智能技术生成
#include <linux/module.h>
#include <linux/usb.h>

static struct usb_device_id my_usb_table[] = {
    { USB_DEVICE(0x1234, 0x5678) },
    {} /* Terminating entry */
};

MODULE_DEVICE_TABLE (usb, my_usb_table);

static int my_usb_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
    printk(KERN_INFO "USB device %04X:%04X plugged\n", id->idVendor, id->idProduct);
    return 0;
}

static void my_usb_disconnect(struct usb_interface *interface)
{
    printk(KERN_INFO "USB device disconnected\n");
}

static struct usb_driver my_usb_driver = {
    .name = "my_usb_driver",
    .probe = my_usb_probe,
    .disconnect = my_usb_disconnect,
    .id_table = my_usb_table
};

static int __init my_usb_init(void)
{
    int result;

    result = usb_register(&my_usb_driver);
    if (result < 0) {
        printk(KERN_ERR "Failed to register USB driver\n");
        return -1;
    }

    printk(KERN_INFO "USB driver registered\n");
    return 0;
}

static void __exit my_usb_exit(void)
{
    usb_deregister(&my_usb_driver);
    printk(KERN_INFO "USB driver deregistered\n");
}

module_init(my_usb_init);
module_exit(my_usb_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple USB driver example");

这是个简单的usb驱动程序实例,使用了USB设备ID为0x1234:0x5678的USB设备。当这个设备被插入时,my_usb_probe()函数将被调用。当设备被断开时,my_usb_disconnect()函数将被调用。

要想实现完整的usb 驱动,还需要根据自己的需要完成urb

urb 申请usb_alloc_urb

异步方式:

控制传输初始化usb_fill_control_urb

中断传输初始化usb_fill_int_urb

批量传输初始化usb_fill_bulk_urb

提交urb usb_submit_urb

同步方式:

usb_bulk_msg

usb_interrupt_msg

usb_control_msg

取消urb

usb_unlink_urb

usb_kill_urb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值