Linux USB gadget设备驱动解析(4)--编写一个gadget驱动
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协议。不用看完所有的协议,重点关注一些概念、配置过程及数据包格式
gadget 一个 驱动 编写 设备驱动 USB Linux 解析 相关文章:
- 关于spiflash存储器读写一个字节的问题方案(11-27)
- 第1节:单片机到底是学什么?我的两个比喻和一个规则(11-22)
- 汇编入门学习笔记 (三) —— 第一个程序(11-09)
- DIY一个MSP430F149最小系统的设计(07-22)
- 视频显示卡直接写屏的一个实例(09-14)
- 单片机c语言教程:建立你的第一个KeilC51项目(09-11)