usbkbd.c浅析

本文详细解析了USB键盘驱动的加载过程,从入口函数usb_kbd_init开始,介绍了如何通过usb_register函数向USB核心注册驱动,并说明了在注册过程中probe函数的作用及调用流程。

先看入口函数usb_kbd_init

/**
    在入口函数中,只做了注册键盘驱动 一件事情。
*/
static int __init usb_kbd_init(void)
{
    /**
        既然是注册驱动,那么底层一定会经过driver_register()这个函数。

        优先会调用bus上提供的probe()函数(原理:请见我的另一篇博文)
        如果bus没有提供probe()函数,那么就会调用驱动提供的probe()函数

        usb总线:
        struct bus_type usb_bus_type = {
            .name =     "usb",
            .match =    usb_device_match,
            .uevent =   usb_uevent,
        };
        usb总线没有提供probe函数,那么就会调用驱动中提供的probe函数:

        static struct usb_driver usb_kbd_driver = {
            .name =     "usbkbd",
            .probe =    usb_kbd_probe,
            .disconnect =   usb_kbd_disconnect,
            .id_table = usb_kbd_id_table,
        };
        usb_kbd_probe()函数会被调用
    */
    int result = usb_register(&usb_kbd_driver);//注册usb键盘驱动
    /**
        usb_register会调用usb_register_driver()函数向usb 核心注册一个usb接口驱动。
        成功 返回 0 ,失败返回负数
    */
    if (result == 0) 
    {
        printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"DRIVER_DESC "\n");
    }   
    return result;
}

probe()调用简略过程:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值