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

时间:2012-08-06来源:网络

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

1 2 3 4 5

关键词: gadget 一个 驱动 编写 设备驱动 USB Linux 解析

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版