USB
Linux学习之路
这个作者很懒,什么都没留下…
展开
-
USB主机控制器驱动——OHCI分析
首先,整个驱动框架的开始,是基于 platform 平台总线的。struct platform_device s3c_device_usb = { .name = "s3c2410-ohci", .id = -1, .num_resources = ARRAY_SIZE(s3c_usb_resource), .resource = s3c_usb_resource,原创 2016-07-18 22:34:05 · 9730 阅读 · 1 评论 -
UVC 摄像头驱动(三)配置摄像头,实时数据采集
前面分析了 UVC 摄像头的硬件模型和描述符,对于一个 usb 摄像头来说,内部大概分为一个 VC 接口和一个 VS 接口,VC 接口内部有许多 unit 和 terminal 用来“控制”摄像头,比如我们可以通过 Process unit 设置白平衡、曝光等等。对于 VS 接口来说,标准 VS 接口往往含有许多个设置,每一个设置都包含一个实时传输端点,虽然它们的端点地址可能相同,但是它们的最大传输原创 2016-11-25 22:15:12 · 25453 阅读 · 0 评论 -
uboot dnw 源码分析
dnw 是 bootloader 中一个比较实用的工具,使用 usb 线就可以下载文件到指定的内存,那么它是如何实现的呢?其实原理并不复杂,以2440为例,它有三个USB口,其中两个是 usb host ,另一个为usb slave相当于一个普通的USB设备,因此主机可以像操作U盘一样来给我们的设备发送文件。 USB 通过D-,D+ 信号的状态判断设备的插入,如下图所示,D+ 接上拉电阻为全速原创 2016-12-03 22:09:16 · 2671 阅读 · 3 评论 -
UVC 摄像头驱动(二)描述符分析
当一个 usb 设备接入时,usb 主机控制器会与设备交互,读取出设备的所有的描述符,并且调用相应 usb_driver 的 probe 函数,同时传入一个接口的指针,因为一个接口代表一个逻辑上的 usb 设备。如果 usb 设备含有多个接口,同时都被这个 usb_driver 支持的话,probe 函数就会被调用多次。 对于一个 usb 设备来说,首先它有一个设备描述符,一个设备可能会拥有多原创 2016-11-14 20:29:25 · 12212 阅读 · 3 评论 -
移植fastboot到2440
前面分析过 dnw 的源码,发现 dnw 是将 usb 设备设置为 slave 模式,主机通过端点 0 来获取我们设置好的描述符,如果认为这些描述符符合 dnw 标准的话,便可以通过一个批量 Out 端点进行发送数据了。 那么 fastboot 是什么东西,看上去非常复杂的样子,我在 tiny4412 上使用 fastboot 来刷各种东西 kernel system bootloader ,原创 2016-12-11 20:47:56 · 2216 阅读 · 0 评论 -
USB驱动函数总结
pipe 管道 管道是USB设备通信的通道,内核中提供了创建管道的宏,从宏中我们可以分析出,管道是一个 int 型的变量,由设备号、端点地址、端点类型组合而成。 usb_[snd|rcv][ctrl|int|bulk|isoc]pipe(dev, endpoint) 例: struct usb_device *dev = interface_to_usbdev(intf)原创 2016-11-18 20:46:47 · 4123 阅读 · 0 评论 -
USB驱动——描述符、URB、管道
大家常说,一个设备通常有多个配置,配置通常有多个接口,接口通常有多个端点。接口代表逻辑上的设备,比如声卡分为 录音和播放。访问设备时,访问的是某个接口(逻辑设备)。除了端点0之外,每个端点只支持一个传输方向,一种性质的传输传输数据时,读写某个端点,端点是数据通道。 本文首先分析设备、配置、接口、设置、端点之间的关系,然后根据 2440-ochi 驱动程序,分析一个设备注册到内核时,它的这原创 2016-07-19 11:44:03 · 8427 阅读 · 0 评论 -
UVC 摄像头驱动(一)硬件描述
虚拟摄像头驱动vivi内核中使用 video_device 结构来描述一个 video 设备,以虚拟摄像头驱动 vivi 为例,整体框架无非是:分配一个 video_device设置 video_device 的众多的 ioctl 等注册 video_register_device对于一个虚拟摄像头驱动来说,上层应用程序无论是来查询视频格式,还是设置格式,我们都是伪造的,视频缓冲区的数据也更原创 2016-11-12 23:12:53 · 9786 阅读 · 2 评论 -
USB驱动——键盘驱动(控制传输)
本文以 usbkbd.c 为例,分析 usb 键盘驱动程序。static int __init usb_kbd_init(void){ int result = usb_register(&usb_kbd_driver); if (result == 0) printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" DRIV原创 2016-07-21 12:25:56 · 5620 阅读 · 2 评论 -
USB驱动——鼠标驱动程序(中断传输)
本文以 usbmouse.c 为例,简单分析usb鼠标驱动程序。static int __init usb_mouse_init(void){ int retval = usb_register(&usb_mouse_driver); if (retval == 0) printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"原创 2016-07-20 17:46:19 · 3770 阅读 · 0 评论 -
ath9k usb wifi 网卡驱动浅析
ieee80211 802.11协议簇是国际电工电子工程学会(IEEE)为无线局域网络制定的标准。概述nl80211: 用于对无线设备进行配置管理,它是一个基本Netlink的用户态协议(User态)cfg80211: 用于对无线设备进行配置管理。与FullMAC, mac80211和nl80211一起工作。(Kernel态)mac80211: 是一个driver开发者可用于为SoftMAC原创 2016-12-15 23:06:54 · 6426 阅读 · 1 评论