设备连上主机之后,设备驱动做了的事. 设备连上host的port之后,主机端会有一套策略发送请求获取device的一系列描述符.进行枚举过程.找到适合该device的驱动. 这样就可以与device进行通信. usb device这边收到主机的请求,会进入中断处理函数.可以说usb device 控制器的活动都是从中断开始的. #号之间的都是udc驱动中做的事,大部分与硬件相关,原理应该差不多. ########################nuc900_udc################…
为了解决一个问题,简单看了一遍linux gadget驱动的加载流程.做一下记录. 使用的内核为linux 2.6.35 硬件为芯唐NUC950. gadget是在UDC驱动上面的一层,如果要编写gadget驱动只需调用linux 的gadget API,不需设计底层的UDC驱动. 但要是分析驱动BUG,就需要了同时了解一下UDC. 下面以简单的gadget zero驱动分析驱动的加载流程. 主要是一系列的bind的调用,让gadget驱动一步步与硬件的端点联系起来. 从insmod g_zer…
windows上面对usb复合设备的识别需要下面条件. “ 如果设备满足下列要求,则总线驱动程序还会报告 USB\COMPOSITE 的兼容标识符: 设备描述符的设备类字段 (bDeviceClass) 必须包含一个零值,或者设备描述符的类 (bDeviceClass).子类 (bDeviceSubClass) 和协议 (bDeviceProtocol) 字段必须分别具有值 0xEF.0x02 和 0x01,如 USB 接口关联描述符中所述. 设备必须具有多个接口. 设备必须具有一个配置.“ 引…
串口驱动是由tty_driver架构实现的.一个应用程序中的函数要操作硬件,首先会经过tty,级级调用之后才会到达驱动之中.本文先介绍应用程序中打开设备的open函数的整个历程. 首先在串口初始化中会先注册一个串口驱动,函数原型为 int uart_register_driver(struct uart_driver *drv) 在这个函数中会调用注册tty驱动的函数 int tty_register_driver(struct tty_driver *driver) { ... cdev_in…
linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作.UART 使用系统时钟能够支持最高 115.2Kbps 的波特率.每一个 UART 通道对于接收器和发送器包含了 2 个 64 位的 FIFO. 寄存器 名称 地址 在linux中的描写叙述 (2410 和 2440 处理器对内存地址映射关系同样) UART 线性控制寄存器(ULCONn) ULC…
一.spi总线注册 这里所说的SPI核心,就是指/drivers/spi/目录下spi.c文件中提供给其他文件的函数,首先看下spi核心的初始化函数spi_init(void).程序如下: 点击(此处)折叠或打开 static int __init spi_init(void) { int    status; buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL); if (!buf) { status = -ENOMEM; goto err0; } status = bu…
本文转载自:http://blog.chinaunix.net/uid-21558711-id-3959287.html 分类: LINUX 原文地址:Linux I2C驱动分析(三)----i2c_dev驱动和应用层分析 作者:apple_guet 一.i2c-dev驱动分析 1.1.设备驱动注册 分析这个驱动,还是从module_init()和module_exit()开始,程序如下: 点击(此处)折叠或打开 static int __init i2c_dev_init(void) { in…
基于335X的linux网口驱动分析 一. 系统构成 1.  硬件平台 AM335X 2.  LINUX内核版本 4.4.12 二. 网口驱动构架(mdio部分) mdio网口驱动部分 使用 总线.设备.驱动模型,总结如下: 若设备和驱动匹配,则执行 davinci_mdio_probe --> mdiobus_register --> device_register --> mdiobus_scan --> get_phy_device --> get_phy_id //…
前言 主要是想对Linux I2c驱动框架有一个整体的把控,因此会忽略协议上的某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型.sysfs等也不进行详细说明原理,涉及到i2c协议部分也只会简单带过,因为linux内核里面已经实现了该协议,我们以后并不需要重新实现这些,只需要对协议有个简单的了解.如果有任何错误地方,请指出,谢谢! 注:图片来自互联网 内核版本:2.6.35.6 I2c介绍 I2C是"Inter Integrated Circuit Bus"的缩写,中文译成…
测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 触摸屏基础知识 一.结构 上图是电阻触摸屏的一个侧面剖视图.手指触摸的表面是一个硬涂层,用以保护下面的PET层.PET层是很薄的有弹性的PET薄膜,当表面被触摸时它会向下弯曲,并使得下面的两层ITO涂层能够相互接触并在该点连通电路.两个ITO层之间是约千分之一英寸厚的一些隔离支点使两层分开.最下面是一个透明的硬底层用来支撑上面的结构,通常是玻璃或者塑料. …