usb_hcd_omap_probe (const struct hc_driver *driver) (dev/ohci/ohci-omap.c)

在模块初始化时被platform_driver_register()调用,用来初始化与ohci_hcd_omap_driver

相匹配的usb主控制器.

->usb_create_hcd(driver); 创建一个代表host-controller的数据结构(struct usb_hcd)并初始化 core/hcd.h

->hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL); 为struct usb_hcd分配一块内存

->usb_bus_init (struct usb_bus *bus); (hcd.c) 初始化代表usb bus的数据结构(struct usb_bus)

->初始化struct usb_hcd的定时器,工作队列

->填充struct usb_hcd的rsrc_start字段:host-controller memory/io的起始物理地址

rsrc_len字段:host-controller memory/io的长度

regs字段:host-controller memory/io映射的内核虚拟地址。

->ohci_hcd_init(struct ohci_hcd *ohci); (dev/ohci/ohci-mem.c)

->usb_add_hcd(struct usb_hcd *hcd,unsigned int irqnum, unsigned long irqflags) (/core/hcd.h)

完成struct usb_hcd剩余的初始化工作

->hcd_buffer_create(hcd):创建dmapool

->usb_register_bus(usb_bus):注册usb bus

->usb_alloc_dev(NULL, &hcd->self, 0): (core/usb.c)

处理主控制器hcd上的根Hub(hcd->self.root_hub),这里做的就是为Root Hub申请了一个struct usb_device结构体,并且初始化, 将返回值赋给指针rhdev. Root Hub的parent指针指向了Controller本身.

->ohci_omap_init:完成omap硬件的init工作

->otg_get_transceiver();

->otg_set_host(ohci->transceiver, &ohci_to_hcd(ohci)->self);

针对OTG特性进行的初始化,后面分析

->ohci_init(struct ohci_hcd *ohci); (host/ohci-hcd.c)

->为ohci->hcca分配空间

->ohci_mem_init() 创建ohci->td_cache和ohci->ed_cache的dma_pool

->request_irq(irqnum, &usb_hcd_irq, irqflags,hcd->irq_descr, hcd)

注册中断处理函数.其中中断号是irqnum, 中断服务程序是usb_hcd_irq(struct usb_hcd *hcd) (ohci-hcd.c).

根据usb2.0 spec定义的中断类型有:usb_hcd_irq()根据具体类型执行相应操作,后面分析.

#define OHCI_INTR_SO (1 << 0) /* scheduling overrun */

#define OHCI_INTR_WDH (1 << 1) /* writeback of done_head */

#

linux usb代码,Linux USB Host Controller的初始化代码框架分析相关推荐

  1. linux v4l2系统详解,Linux摄像头驱动学习之:(一)V4L2_框架分析

    这段时间开始搞安卓camera底层驱动了,把以前的的Linux视频驱动回顾一下,本篇主要概述一下vfl2(video for linux 2). 一. V4L2框架: video for linux ...

  2. 嵌入式Linux——音频设备驱动(1):uda1341音频设备驱动框架分析

    简介: 本文主要分析uda1341音频设备驱动的框架,通过分析这个框架了解如何操作音频设备.而本文将分为两部分,第一部分总体介绍uda1341音频设备的框架,而第二部分会结合详细代码分析设备操作流程. ...

  3. XHCI host controller/device 初始化

    1.host controller初始化步骤 Initialize the xHC using MSI-X as the interrupt mechanism 1) 初始化system I/O me ...

  4. usb驱动 linux,Linux usb驱动

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 初期教育应是一种娱乐,这样才更容易发现一个人天生的爱好. -- 柏拉图 深深赞同柏拉图的这个观点,人是有天性的,教育无非 ...

  5. 4g上网卡托 linux,openwrt/LEDE通过USB连接4G网卡或者手机移动网络共享上网(RNDIS)...

    本帖最后由 w1634w 于 2017-11-11 13:33 编辑 按照楼主的方法.设置步骤,最终无法实现用本人的小米note顶配版安卓手机通过USB共享网络上网,求解????????????? r ...

  6. linux 查看usb日志,Linux中显示系统中USB信息的lsusb命令

    Linux中显示系统中USB信息的lsusb命令 通用串行总线(USB)被设计成为连接计算机外设的标准,如键盘.鼠标.打印机.数码相机.便携式媒体播放器.磁盘和网络适配器等等 - 来源:Wikiped ...

  7. Linux驱动——mmc host controller(九)

    Linux驱动--mmc host controller(九) 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0 文章目录 Linux驱动--mmc ...

  8. USB学习5---android usb驱动源代码目录说明

    kernel\msm-3.18\drivers\usb下目录内容 我们msm8937+android7.1平台编译out目录下usb目录下有编译到的目录如下: 我们先参考kernel\msm-3.18 ...

  9. i.MX6ULL系统移植:Linux移植6 - Linux 内核移植

    一.测试 NXP 官方linux 1.解压 NXP 官方 Linux 内核 tar -vxif linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 2.清除配置 mak ...

最新文章

  1. 混合云备份利用自定义Workflow保护MySQL的实践
  2. 如何使用MSTSC命令远程连接服务器或客户端
  3. MySQL中的多表连接
  4. 基于pygame的射击小游戏制作(三)让外星人动起来
  5. 主成分分析(PCA)原理详解 2016/12/17 · IT技术 · 主成分分析, 数学 分享到: 21 原文出处: 中科春哥 一、PCA简介 1. 相关背景 主成分分析(Principa
  6. JAVA多线程(一)线程安全问题产生的原因
  7. mysql 时间差_后端从mysql取值返回0时区时间数据的问题
  8. 《美团数据平台及数仓建设实践》(209页).PDF
  9. java外部工具配置_eclipse配置外部工具利用javah编译生成头文件
  10. C 线程同步的四种方式(Windows)
  11. Eclipse下载安装Spring插件
  12. 芜湖市市一中2021年高考成绩查询,2021年芜湖各高中录取分数线预测
  13. mysql数据库innodb性能优化之缓冲池配置
  14. Gluster集群搭建
  15. 2023款ThinkBook 14和15锐龙版区别对比评测选哪个好
  16. uniapp解决图片底部留白
  17. 集束搜索BeamSearch
  18. (3)riak_core系统的工作方式
  19. 第五章 Java字符串总结
  20. xcode打包报错Command CodeSign failed with a nonzero exit code的解决方案

热门文章

  1. 陷波滤波器消除周期噪声python_50Hz 工频电磁场干扰的消除方案
  2. 自然语言处理——使用词向量(腾讯词向量)
  3. Android Wi-Fi EAP-TLS/EAP-PEAP/EAP-TTLS(扩展认证协议)简介
  4. 系统交互流程-订单支付-支付流程-JAVA实战演示
  5. 使用USB在PC上操作Android手机
  6. Android ART
  7. artTemplate基本语法
  8. oracle clob导入mysql_Oracle数据库中包含CLOB字段表的导出和导入
  9. 最小采样频率计算公式_《傅里叶光学(九)》 信号采样与重建
  10. iOS- P12发生错误,无法导入项目