微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux USB gadget设备驱动解析(4)--编写一个gadget驱动

Linux USB gadget设备驱动解析(4)--编写一个gadget驱动

时间:08-06 来源:互联网 点击:

DGET_DUALSPEED

.speed = USB_SPEED_HIGH,

#else

.speed = USB_SPEED_FULL,

#endif

.function = (char *) longname,

.bind = zero_bind,

.unbind = __exit_p(zero_unbind),

.setup = zero_setup,

.disconnect = zero_disconnect,

//.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协议。不用看完所有的协议,重点关注一些概念、配置过程及数据包格式

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top