- 博客(13)
- 资源 (56)
- 收藏
- 关注
原创 Linux USB驱动工作流程
1. USB主机在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linu
2012-06-15 10:18:53 5168 1
原创 Linux热插拔处理机制
一、 udev 在2.6内核里,使用了udev来取代hotplug。据udev的作者Greg K.H说,之所以废弃了hotplug原因是sysfs的出现,这个东西会产生非常多的hotplug事件,远远超过了2.4的内核(只要实现了了kobject模型的设备驱动都回产生该事件)。所以hotplug变得复杂,而且因为hotplug都是bash所写,所以开始变得没有效率。于是出现了一个名叫h
2012-06-14 17:14:42 7138 1
原创 usb驱动程序分析
usb驱动是linux内核中比较复杂的驱动之一,因此,大多数usb教程建议从usb-skeleton开始学习usb驱动。个人认为这是相当正确的,usb-sekelton提供了一个usb驱动开发的模板,而且代码量较少,很适合初学者的学习。 记住,对于c语言的程序设计说,数据结构是整个程序的灵魂。因此,分析别人编写的代码的简洁的入口点就是高清代码中主要数据结构之间的关系。分析以usb-ske
2012-06-14 16:39:21 6969
原创 usb_register_dev
一个USBinterface对应一种USB逻辑设备,比如鼠标、键盘、音频流。所以,在USB范畴中,device一般就是指一个interface。一个驱动只控制一个interface。这样,usb_register_dev自然是注册一个interface,所以usb_register_dev的第一个参数是interface(usb_interface类型)。 usb_register_dev
2012-06-14 14:43:06 6391
原创 usb_register_dev
一个USBinterface对应一种USB逻辑设备,比如鼠标、键盘、音频流。所以,在USB范畴中,device一般就是指一个interface。一个驱动只控制一个interface。这样,usb_register_dev自然是注册一个interface,所以usb_register_dev的第一个参数是interface(usb_interface类型)。 usb_register_dev
2012-06-14 14:42:38 2405
转载 Linux+USB+鼠标驱动程序详解
USB 总线引出两个重要的链表!一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)。USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb d
2012-06-13 18:00:49 1912
原创 自旋锁spin_lock和raw_spin_lock
本文不打算详细探究spin_lock的详细实现机制,只是最近对raw_spin_lock的出现比较困扰,搞不清楚什么时候用spin_lock,什么时候用raw_spin_lock,因此有了这篇文章。1. 临界区(Critical Section)我们知道,临界区是指某个代码区间,在该区间中需要访问某些共享的数据对象,又或者是总线,硬件寄存器等,通常这段代码区间的范围要控制在尽可能
2012-06-12 13:59:36 1419
原创 Linux系统调用--fcntl函数详解
功能描述:根据文件描述词来操作文件的特性。 用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 参数: fd:文件描述词。 cmd:操作命令。 arg:
2012-06-08 16:15:59 1123
原创 I2C与SMBUS区别
SMBus是一种二线制串行总线,1996年第一版规范开始商用。它大部分基于I2C总线规范。和 I2C一样,SMBus不需增加额外引脚,创建该总线主要是为了增加新的功能特性,但只工作在100KHZ且专门面向智能电池管理应用。它工作在主/从模式:主器件提供时钟,在其发起一次传输时提供一个起始位,在其终止一次传输时提供一个停止位;从器件拥有一个唯一的7或10位从器件地址。SMBus与I2C总
2012-06-06 17:13:55 3144 1
原创 Touch Device Driver Requirements
Touch Device Driver RequirementsTouch device drivers should only register abs and key codes for the abs and buttons that they actually support. Registering excess axes or key codes may confuse t
2012-06-05 17:48:23 2569
原创 Linux驱动加载顺序
Linux内核为不同驱动的加载顺序对应不同的优先级,定义了一些宏:include\linux\init.h#define pure_initcall(fn) __define_initcall("0",fn,1)#define core_initcall(fn) __define_initcall("1",fn,1)#define core_initcall_sync(fn
2012-06-04 17:13:02 8959 1
原创 内核线程、轻量级进程、用户线程、用户进程
内核线程内核线程只运行在内核态,不受用户态上下文的拖累。处理器竞争:可以在全系统范围内竞争处理器资源;使用资源:唯一使用的资源是内核栈和上下文切换时保持寄存器的空间调度:调度的开销可能和进程自身差不多昂贵同步效率:资源的同步和数据共享比整个进程的数据同步和共享要低一些。轻量级进程(vfork创建)轻量级进程(LWP)是建立在内核之上并由内核支持的用户线程,它是内核线程的高度抽象
2012-06-02 14:31:06 3172
原创 linux led子系统
数据结构/include/linux/leds.henum led_brightness { LED_OFF = 0, LED_HALF = 127, LED_FULL = 255,};led_classdev代表led的实例:struct led_classdev { const cha
2012-06-01 10:15:58 6193 1
Android核心分析
2011-12-25
佛山网通EPON的FTTH工程方案设计
2011-12-25
ARM---Cortex-A8处理器
2022-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人