您的位置:首页 > 其它

usbkbd.c浅析

2015-12-12 21:37 225 查看
先看入口函数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()调用简略过程:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: