摘要:
一、PCI简介PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总线上连接的所有设备可在同一时间收到所有的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。PCI是Pe... 阅读全文
posted @ 2015-07-26 18:16
zxiaocheng
阅读(618)
评论(0)
推荐(0)
摘要:
一:前言Pci,是Peripheral Component Interconnect的缩写,翻译成中文即为外部设备互联.与传统的总线相比.它的传输速率较高.能为用户提供动态查询pci deivce.和局部总线信息的方法,此外,它还能自动为总线提供仲裁.在近几年的发展过程中,被广泛应用于多种平台.pc... 阅读全文
posted @ 2015-07-26 18:14
zxiaocheng
阅读(2124)
评论(0)
推荐(1)
摘要:
Pci设备的I/O和内存是一个比较复杂的问题.如下的总线结构:在上图的总线结构中,ethernet设备和pci-pci bridge的同类型资源空间必须要是pci bus0的一个子集例如,pci bus 0的I/O端口资源是0x00CC~0x01CC. Ethernet设备的I/O范围的是0x00C... 阅读全文
posted @ 2015-07-26 18:13
zxiaocheng
阅读(2268)
评论(0)
推荐(0)
摘要:
一:前言经过上一节的分析,对pci有了一个大概的了解.我们今天来讨论一下pci设备的中断号确定,顺便解决上节中遗留的问题.二:pci interrupt routing我们在上面的分析过程中可以看到.pci的配置空间有两个寄存器,一个是IRQ_PIN.表示该pci设备所有的中断连接引脚.如果为0.说... 阅读全文
posted @ 2015-07-26 18:13
zxiaocheng
阅读(3008)
评论(0)
推荐(0)
摘要:
驱动工程师最关心就是如何编写PCI设备驱动了.经过前面的处理,所有设备及其信息都已经遍历出来了.在深入分析PCI驱动架构之前,我们来回顾一下前面遍历PCI设备时,对pci_dev->dev的一些重要成员的赋值.以及各结构在sysfs中的视图8.1:pci架构在sysfs中视图1:对于pci_devp... 阅读全文
posted @ 2015-07-26 18:12
zxiaocheng
阅读(2230)
评论(0)
推荐(0)
摘要:
外围设备互连(PCI)是一种将系统中外部设备以结构化与可控制方式连接到起来的总线标准,包括系统部件连接的电气特性及行为。本章将详细讨论Linux核心对系统中的PCI总线与设备的初始化过程。图6.1 一个基于PCI的系统示意图图6.1是一个基于PCI的系统示意图。PCI总线和PCI-PCI桥接器在连接... 阅读全文
posted @ 2015-07-26 18:11
zxiaocheng
阅读(1826)
评论(0)
推荐(0)
摘要:
接着上一篇看,第三大设备控制器的注册://Devices-msm8x60.c (arch\arm\mach-msm)//udc设备控制器注册static u64 dma_mask = 0xffffffffULL;struct platform_device msm_device_gadget_per... 阅读全文
posted @ 2015-07-26 18:10
zxiaocheng
阅读(246)
评论(0)
推荐(0)
摘要:
下面看下三大控制器的配合:/*在设备控制器注册的最后,调用了msm_otg_set_peripheral ()*/static int msm_otg_set_peripheral(struct otg_transceiver *xceiv, struct usb_gadget *gadget){s... 阅读全文
posted @ 2015-07-26 18:09
zxiaocheng
阅读(571)
评论(0)
推荐(0)
摘要:
下面继续看设备控制器,设备控制器的启动过程,以及枚举,充电的整个流程。//启动设备控制器msm_otg_start_peripheral(&dev->otg, 1);//启动设备控制器static void msm_otg_start_peripheral(struct otg_transceive... 阅读全文
posted @ 2015-07-26 18:08
zxiaocheng
阅读(689)
评论(0)
推荐(0)
摘要:
三大控制器已经分析一个啦,下面接着第一篇分析,这篇分析下usb主机控制器设备与驱动的注册://代码路径Devices-msm8x60.c (arch\arm\mach-msm)//主机控制器平台设备的注册#define IORESOURCE_MEM0x00000200#define IORESOUR... 阅读全文
posted @ 2015-07-26 18:07
zxiaocheng
阅读(456)
评论(0)
推荐(0)
摘要:
该系列博文是基于高通8260,android版本为相对较新的Android4.0.4,由于高通的整个android usb子系统是一个整体,所以有一个框架支撑着整个体系结构。下面先大致说下该框架的结构:该框架有以下三部分组成:1、otg控制器。2、主机控制器。3、设备控制器。三个控制器中,其中otg... 阅读全文
posted @ 2015-07-26 18:04
zxiaocheng
阅读(680)
评论(0)
推荐(0)
摘要:
下面是代码的设置流程://在init.c中int main(int argc, char **argv){ ...................... INFO("reading config file\n"); init_parse_config_file("/init.rc"); /* pul... 阅读全文
posted @ 2015-07-26 18:02
zxiaocheng
阅读(1115)
评论(0)
推荐(0)
摘要:
//分析高通平台裸机的usb处理流程APP_START(aboot) .init = aboot_init,//启动入口 APP_ENDvoid aboot_init(const struct app_descriptor *app){ unsigned usb_init = 0; ........... 阅读全文
posted @ 2015-07-26 18:02
zxiaocheng
阅读(959)
评论(0)
推荐(0)
摘要:
static struct platform_driver ehci_msm_driver = { .probe = ehci_msm_probe, .remove = __exit_p(ehci_msm_remove), .driver = {.name = "msm_hsusb_host", ... 阅读全文
posted @ 2015-07-26 18:01
zxiaocheng
阅读(931)
评论(0)
推荐(0)
摘要:
由于近来做的一个项目是基于android 2.3的版本,所以就对该版本的电源管理大致分析了下,跟大家分享,有错误之处,敬请指正,谢谢!针对的处理器是高通MSM8260,主要是针对一些挂起唤醒流程进行分析,以便对整个usb框架流程更好的理解。废话少说,开始分析。由于linux中的电源管理比较复杂,我就... 阅读全文
posted @ 2015-07-26 18:01
zxiaocheng
阅读(816)
评论(0)
推荐(0)
摘要:
//插入usb b cable前的状态是 OTG_STATE_B_IDLEstatic void msm_otg_sm_work(struct work_struct *w){ switch (state) { case OTG_STATE_UNDEFINED: { if (!dev->ot... 阅读全文
posted @ 2015-07-26 18:00
zxiaocheng
阅读(1144)
评论(0)
推荐(0)
摘要:
第一:逻辑结构1. 设备 usb_device //代表一个具有复合功能的设备2. 配置 usb_host_config //功能的组合3. 接口 usb_interface //一种功能4. 设置 usb_host_interface//一种功能的设置5. 端点 usb_host_endpoint... 阅读全文
posted @ 2015-07-26 17:59
zxiaocheng
阅读(335)
评论(0)
推荐(0)
摘要:
本分析基于android4.0.4代码,高通8260平台//插入usb a cable前的状态是 OTG_STATE_B_IDLEstatic void msm_otg_sm_work(struct work_struct *w){ switch (state) { case OTG_STATE_... 阅读全文
posted @ 2015-07-26 17:59
zxiaocheng
阅读(415)
评论(0)
推荐(0)
摘要:
下面跟踪进入设备控制器时的流程。static void msm_otg_start_peripheral(struct otg_transceiver *xceiv, int on){ struct msm_otg *dev = container_of(xceiv, struct msm_otg,... 阅读全文
posted @ 2015-07-26 17:58
zxiaocheng
阅读(545)
评论(0)
推荐(0)
摘要:
说明:由于分析时是在记事本上分析的,贴到这里出现了格式有点乱,看时请复制到记事本中,可以看到完整的格式。Bus Hound 5.00 capture. Complements of www.perisoft.net Device - Device ID (followed by the endpoi... 阅读全文
posted @ 2015-07-26 17:58
zxiaocheng
阅读(2099)
评论(0)
推荐(0)
摘要:
MSM8X60 USB控制器流程分析,其中去掉了没有用到的代码,以便把握整个主线不被干扰。/*没有插入usb线之前的流程*/static int msm_otg_set_peripheral(struct otg_transceiver *xceiv, struct usb_gadget *ga... 阅读全文
posted @ 2015-07-26 17:57
zxiaocheng
阅读(396)
评论(0)
推荐(0)
摘要:
用WARN_ON(1)分析otg runtime suspend/resume的整个流程。在需要跟踪流程的代码内加上WARN_ON(1),通过打印的WARNING,回溯栈跟踪代码流程。/*下面是在设备拔出的时候,加入WARN_ON(1)时打出的回溯栈*/[ 28.608405] ----------... 阅读全文
posted @ 2015-07-26 17:47
zxiaocheng
阅读(497)
评论(0)
推荐(0)
摘要:
下面的两个宏是PM8058的MMP11(R15),MMP12(P15)管脚。#define EXT_CHG_VALID_MPP 10#define EXT_CHG_VALID_MPP_2 11static struct pm8xxx_mpp_init_info isl_mpp[] = { PM805... 阅读全文
posted @ 2015-07-26 17:46
zxiaocheng
阅读(199)
评论(0)
推荐(0)
摘要:
(1)USB(2)Mini USBUSB设备分为三种:HOST,OTG,DEVICE。其中ID脚在OTG功能中才使用。A,如果你的系统自己仅仅是用做Slave,那么就使用B接口。任何时候都悬空,都做Slave。如果是OTG设备,它的系统控制器会判断外部设备的ID脚的电平,决定是什么样的设备插入:B,... 阅读全文
posted @ 2015-07-26 17:45
zxiaocheng
阅读(1282)
评论(0)
推荐(0)
摘要:
http://blog.csdn.net/ccwwff/archive/2011/06/10/6537452.aspx一、调试背景:我所使用的处理器有一个USB 1.1 host接口,但是速度太慢,最高速度12Mbps;另外还有一个OTG接口,兼容EHCI(host), device, OTG,通常... 阅读全文
posted @ 2015-07-26 17:44
zxiaocheng
阅读(978)
评论(0)
推荐(0)
摘要:
android里面的composite设备支持的功能。 3、ImplementationOn USB application, firmware, device driver and host application are closely related. It is desirable to m... 阅读全文
posted @ 2015-07-26 17:43
zxiaocheng
阅读(164)
评论(0)
推荐(0)
摘要:
近来一直在打酱油,闲暇之余分析了下usb gadget驱动。每天的工作就是扯,工作吧,你不扯还不行,哎,所以近来工作很郁闷,不过也该走啦。离开这个让我几乎窒息的华为,一直不明白为什么还有 那么多的人挤着要进华为,哎,好啦,不扯啦,开始言归正转,分析下代码,不过我也是现学现卖,欢迎高手拍砖。现总体看下... 阅读全文
posted @ 2015-07-26 17:42
zxiaocheng
阅读(237)
评论(0)
推荐(0)
摘要:
找了好几天,终于找到windows是如何处理android这样的复合设备啦,心里那叫一个爽!下面把该段英文贴出来,原文的出处在这里:http://www.cygnal.org/ubb/Forum9/HTML/001050.html感谢google大神!由于英文水平有限,怕翻译错误,就不翻译啦,自己搞... 阅读全文
posted @ 2015-07-26 17:42
zxiaocheng
阅读(160)
评论(0)
推荐(0)
摘要:
USB分为两个部分:主机,设备。他是一个树形的关系: 主机 设备 设备 设备主机里装的是主机控制器,设备中装的是设备控制器Host Controller 和 UDC从主机侧看从设备侧看USB设备驱动Gadget驱动USB核心Gadget APIUSB主机控制器驱动UDC驱动USB主机控制器USB设备... 阅读全文
posted @ 2015-07-26 17:40
zxiaocheng
阅读(213)
评论(0)
推荐(0)
摘要:
转眼间,看usb gadget代码看的有一段时间了,把其中的层次关系大致的理了一遍,就写出来和大家分享下,不对之处敬请指出,了解层次结构嘛,当然是代码越简单越好,俗话说“柿子专拣软的捏”,就拿最简单的zero.c开涮啦!首先说下整体流程:一个UDC(usb设备控制器)上面要挂一个usb_gadget... 阅读全文
posted @ 2015-07-26 17:39
zxiaocheng
阅读(422)
评论(0)
推荐(0)
摘要:
分析前还是先扯几句吧:今天有心情看点代码,就做一点笔记吧,不过android的usb gadget代码不多,但是层次复杂,再加上没人写这方便的文章,所以也没有什么可以参考的,只能自己悟啦,再看之前建议你把设备驱动模型搞懂,要不跟代 码会跟的你吐血的,设备驱动模型网上有很多啦,你花上几个小时跟下代码就... 阅读全文
posted @ 2015-07-26 17:37
zxiaocheng
阅读(751)
评论(0)
推荐(0)
摘要:
//Based on Linux v3.14 source code Linux设备树机制(Device Tree) 一、描述 ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm... 阅读全文
posted @ 2015-07-26 17:28
zxiaocheng
阅读(1036)
评论(0)
推荐(0)
摘要:
1. 等待队列数据结构等待队列由双向链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头(wait queue head),等待队列头是一个类型为wait_queque_head_t的数据结构:struct __wait_queue_head { spinlock_t lock;... 阅读全文
posted @ 2015-07-26 17:03
zxiaocheng
阅读(3604)
评论(0)
推荐(0)
摘要:
Workqueue机制中定义了两个重要的数据结构,分析如下:cpu_workqueue_struct结构。该结构将CPU和内核线程进行了绑定。在创建workqueue的过程中,Linux根据当前系统CPU的个数创建cpu_workqueue_struct。在该结构主要维护了一个任务队列,以及内核线程... 阅读全文
posted @ 2015-07-26 16:44
zxiaocheng
阅读(1576)
评论(0)
推荐(0)
摘要:
1、 typeoftypeof并非ISO C的关键字,而是gcc对C的一个扩展。typeof是一个关键字(类似sizeof),用于获取一个表达式的类型。举个简单的例子:char tt;typeof(tt) cc;则typeof(tt)等价于char,即相当于声明了char cc;2、 offseto... 阅读全文
posted @ 2015-07-26 16:15
zxiaocheng
阅读(505)
评论(0)
推荐(0)
浙公网安备 33010602011771号