共 28 篇文章 |
|
Linux设备驱动子系统第四弹-USB gadget.比如手机用USB线插入PC后,手机就是USB Gadget。gadget文件夹里存放了各芯片厂商支援的USB Gadget控制器驱动,比如支持Mavell的PXA9XX系列的USB Gadget驱动为mv_gadget.c,其架构如下图所示,通过platform_data和resource的到gadget芯片物理地址,中断号等 (橙色)初始化gadget芯片和相关数据 (浅灰色)... 阅44 转0 评0 公众公开 15-05-04 09:19 |
USB子系统初始化的时候就会注册usb_generic_driver, 它的结构体类型是usb_device_driver,它是USB世界里唯一的一个USB设备驱动,区别于struct usb_driver USB驱动。HCD解析urb,拿到数据与USB设备通信。hub_port_connect_change()是核心函数,以端口发现有新的USB设备插入为例,USB Hub为USB设备做了以下几步重要的工作,注意这里所谓的USB设备... 阅291 转1 评0 公众公开 15-05-04 09:18 |
linux-2.6.25/drivers/usb/core/driver.c中,我们可以找到两种register driver的方式,分别为usb_register_driver()和usb_register_device_driver()。其实,对于usb_register_driver()可以看作是usb设备中的接口驱动,而usb_register_device_driver()是一个单纯的USB设备驱动。首先,可以通过container_of()将封装的struct device, s... 阅1244 转2 评0 公众公开 14-02-02 11:10 |
//这个是在设备控制器初始化的时候注册中断处理程序的语句:retval = request_irq(IRQ_USBD, s3c2410_udc_irq, IRQF_DISABLED, gadget_name, udc); 最后一个参数udc是一个struct s3c2410_udc.udc_write(tmp, S3C2410_UDC_EP_INT_REG);//以上代码才真正的将urt的数据写入USB设备控制器端点0的FIFO,这里有一个条件就是S3C2410_UDC_EP0_CSR_IPKRD... 阅375 转3 评0 公众公开 13-10-10 11:49 |
struct usb_gadget *gadget = cdev->gadget;以四个数据结构为基础:struct usb_composite_driver struct usb_composite_dev struct usb_gadget_driver struct usb_gadget 两个register函数为导向: usb_composite_register(&zero_driver) usb_gadget_register_driver(&composite_driver)(2) 过程方向 UDC层-->USB... 阅303 转2 评0 公众公开 13-10-10 11:48 |
Linux USB Gadget--软件结构Linux USB Gadget--软件结构 2013-07-22 16:06:36 标签:linux usb gadget USB Gadget是分层的软件结构,本文分析的是2.6.32.2版本的Gadget软件结构,这个软件结构与以前版本的变化很大。struct usb_gadget gadget;而struct usb_gadget_driver是在USB设备层中初始化的,他是通过usb_gadget_register_d... 阅299 转4 评0 公众公开 13-10-10 11:17 |
s3c2410_udc_mach_info结构在udc.h中定义:struct s3c2410_udc_mach_info { void (*udc_command)(enum s3c2410_udc_cmd_e); void (*vbus_draw)(unsigned int ma); unsigned int vbus_pin; unsigned char vbus_pin_inverted; }; 那么这个指针又是什么时候赋值的,是在s3c2410_udc_probe函数中。所以在注册g... 阅116 转2 评0 公众公开 13-10-10 10:54 |
struct bus_type usb_serial_bus_type = { .name = "usb-serial", .match = usb_serial_device_match, .probe = usb_serial_device_probe, .remove = usb_serial_device_remove, .drv_attrs = drv_attrs,};至此,打开设备和读设备的流程已经写完 最后看serial_write函数,该函数对应了usb_serial_generic_writeint usb_serial_gen... 阅1059 转3 评0 公众公开 13-10-10 04:55 |
int usb_register_dev(struct usb_interface *intf, struct usb_class_driver *class_driver){//如果创建usb设备错误,则清空usb_minors if (IS_ERR(intf->usb_dev)) { down_write(&minor_rwsem); usb_minors[minor] = NULL; intf->minor = -1; up_write(&minor_rwsem); retval = PT... 阅419 转1 评0 公众公开 13-10-10 03:59 |
设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)。USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)的区别是什么?比如鼠标驱动程序,usb_mouse_init 函数将通过 usb_register(&usb_mouse_driver) 将鼠标驱动程序注册到 ... 阅63 转1 评0 公众公开 13-10-10 03:58 |