Linux USB gadget设备驱动解析(4)--编写一个gadget驱动
.disconnect = zero_disconnect,
本文引用地址:https://www.eepw.com.cn/article/148655.htm//.suspend = zero_suspend, //不考虑电源管理的功能
//.resume = zero_resume,
.driver = {
.name = (char *) shortname,
.owner = THIS_MODULE,
},
};
MODULE_AUTHOR(David Brownell);
MODULE_LICENSE(GPL);
static int __init init(void)
{
return usb_gadget_register_driver(zero_driver); //注册驱动,调用bind绑定到控制器
}
module_init(init);
static void __exit cleanup(void)
{
usb_gadget_unregister_driver(zero_driver); //注销驱动,通常会调用到unbind解除绑定, //在s3c2410_udc.c中调用的是disconnect方法
}
module_exit(cleanup);
三、总结
时间关系,上面的代码没有做太多的优化,但功能都是测试通过。希望能给大家的学习提供一点帮助。最后想谈谈学习USB驱动的一些方法。
USB驱动比较难掌握,主要原因是:
复杂的USB协议,包括USB基本协议、类规范等
控制器包括主机端、设备端。控制器本身相对复杂,其对应的主、从控制器驱动比较复杂
Hub功能及驱动、管理程序比较复杂
需要专业的硬件测试工具,硬件信号调试较困难
主、从端上层驱动程序本身不难,但由于对硬件不理解,及不好编写测试程序。所以往往望而却步。 我觉得学习USB驱动前应该有一个比较好的思路,个人建议可以按下面的过程学习
熟悉USB协议。不用看完所有的协议,重点关注一些概念、配置过程及数据包格式
linux操作系统文章专题:linux操作系统详解(linux不再难懂)linux相关文章:linux教程
评论