Linux driver
文章平均质量分 87
Tommy_wxie
Tommy_wxie
展开
-
Linux下面一个简单的虚拟platform驱动
在Linux之中,约定如果设备不属于任何的总线,则可以把它注册为虚拟的platform设备。下面就简单来学习一下一个简单的platform设备是怎么创建出来的。一般注册platform驱动的步骤是:1,platform_device_create注册一个设备2,platform_driver_create注册一个驱动。static struct platform_dri原创 2012-01-14 15:56:19 · 1403 阅读 · 0 评论 -
usb驱动程序分析
usb驱动是linux内核中比较复杂的驱动之一,因此,大多数usb教程建议从usb-skeleton开始学习usb驱动。个人认为这是相当正确的,usb-sekelton提供了一个usb驱动开发的模板,而且代码量较少,很适合初学者的学习。 记住,对于c语言的程序设计说,数据结构是整个程序的灵魂。因此,分析别人编写的代码的简洁的入口点就是高清代码中主要数据结构之间的关系。分析以usb-ske原创 2012-06-14 16:39:21 · 6919 阅读 · 0 评论 -
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 · 1898 阅读 · 0 评论 -
Linux 固件子系统----如何更新固件
在一般的使用中,可能会需要使用到升级固件这个功能,在linux的系统中提供了固件子系统这个设备模型来帮助快速的升级固件。在这里先将linux中提供的常用的接口来说明下:内核的固件接口:[cpp] view plaincopy#include int request_firmware(const struct firmware **转载 2013-07-24 15:49:42 · 1887 阅读 · 0 评论 -
Linux内核驱动--多点触摸
简介 为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据。这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息。 使用说明 单点触摸信息是以ABS承载并按一定顺序发送,如BTN_TOUCH、ABS_X、ABS_Y、SYNC。而多点触摸信息则是以ABS_MT承载并按一定顺序发送,如ABS_MT_POSITION_X、ABS_转载 2013-03-28 13:26:53 · 1349 阅读 · 0 评论 -
对I2C总线时序的一点理解以及ACK和NACK(NAK)
关键字: i2c ,IIC,bus, ACK,NACK,NAK,SDA,SCL,timing,master,slaver,时序,响应,总线关于i2c的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此,the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用以和这个响应位相关联。在这个脉转载 2013-03-19 18:17:39 · 2874 阅读 · 0 评论 -
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 · 6123 阅读 · 1 评论 -
I2C与SMBUS区别
SMBus是一种二线制串行总线,1996年第一版规范开始商用。它大部分基于I2C总线规范。和 I2C一样,SMBus不需增加额外引脚,创建该总线主要是为了增加新的功能特性,但只工作在100KHZ且专门面向智能电池管理应用。它工作在主/从模式:主器件提供时钟,在其发起一次传输时提供一个起始位,在其终止一次传输时提供一个停止位;从器件拥有一个唯一的7或10位从器件地址。SMBus与I2C总原创 2012-06-06 17:13:55 · 3125 阅读 · 1 评论 -
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 · 8938 阅读 · 1 评论 -
S3C2440驱动篇—触摸屏驱动分析
S3C2440触摸屏驱动一.硬件简介 S3C2440触摸屏接口与ADC接口集成在一起,触摸屏X、Y坐标所产生的模拟信号通过通道7、5输入,2440提供触摸屏接口有4种处理模式:普通转换模式、分离的X/Y轴坐标转换模式、自动X/Y轴坐标转换模式、等待中断模式。具体参考2440硬件手册16章。二.驱动实现 下面是触摸屏驱动源码,其中使用了linux输入子系统in转载 2012-03-30 20:16:35 · 1499 阅读 · 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 · 2557 阅读 · 0 评论 -
如何在Android平台上使用USB Audio设备
上网搜了有关USB Audio Hotplug的东西,比较适用的资源如下:1、Hotplugging USB audio devices (Howto)题目看起来很吻合我们的问题,事实上并没有多少参考价值。其中脚本/etc/hotplug/usb/extigy或许可以捕捉到USB Audio设备的热插拔事件,应该可以进一步验证和利用,留意这点。 2、Example转载 2017-08-16 17:14:57 · 6829 阅读 · 0 评论 -
ION基本概念介绍和原理分析
转载前的话:ION将内核态形形色色的内存分配纳入统一的管理接口之中,更重要的设计意图是为内存在不同用户态进程之间传递和访问提供了支持。每个ion_buffer与一个struct file关联,其handle纳入进程file desc空间而不是/dev/ion设备内单独的handle空间,方便之处如下:每个buffer一个handle,便于更灵活地细粒度地控制每个buffer的使用周期;转载 2014-09-05 15:04:31 · 15418 阅读 · 1 评论 -
android之ION内存储器管理器
为什么需要ION回顾2011年末[2],LWN审查了android kernel patch[3],以期望将这些patch合并到kernel主线中。但是PMEM(android实现的 一个内存分配器)使这个愿望破灭了。为什么PMEM不被linux 社区接受的原因在[3]中有讲到。从那开始,PMEM很明确会被完全抛弃,取而代之的是ION内存管理器。ION是google在Android4.0 IC转载 2014-09-05 10:11:46 · 3658 阅读 · 0 评论 -
Linux设备驱动之内存映射
1. 内存映射所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。Linux提供了mmap()函数,用来映射物理内存。在驱动程序中,应用程序以设备文件为对象,调用mmap()函数,内核进行内存映射的准备工作,生成vm_area_struct结构体,然后调用设备驱动程序中定义的mmap函数。 2. 映射的种类把同原创 2012-01-17 13:41:48 · 3770 阅读 · 0 评论 -
浅析Linux Input 子系统
在android中,定时alarm功能是很常用的,现在来分析下怎么实现的,这里将采用自下而上的方式讲解。输入子系统又叫input子系统。其构建非常灵活,只需要调用一些简单的函数,就可以将一个输入设备的功能呈现给应用程序。Input子系统 主要有下面几个结构:struct input_dev; //表示一个输入设备,包含输入设备的一些相关信息(如支持的按键码,s设备的名称原创 2012-04-07 21:50:07 · 1720 阅读 · 0 评论 -
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 · 7126 阅读 · 1 评论 -
Adroid 触摸屏设备
1. 触摸屏设备分类1.1 多点触摸满足以下两个条件为多点触摸设备:1)输入设备驱动报告了ABS_MT_POSITION_X 和ABS_MT_POSITION_Y存在2)输入设备没有任何手柄按钮1.2 单点触摸满足以下两个条件为单点触摸设备:1)输入设备不被归类为多点触摸设备2)输入设备报告存在ABS_X和ABS_Y绝对轴,以及存在BTN_TOUCH按键码1.3转载 2013-03-28 13:32:41 · 1340 阅读 · 0 评论 -
Linux USB驱动工作流程
1. USB主机在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linu原创 2012-06-15 10:18:53 · 5158 阅读 · 1 评论 -
基于ARM-LINUX的温度传感器驱动(DS18B20)
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测原创 2012-04-07 21:33:43 · 10216 阅读 · 0 评论 -
字符设备驱动学习(二) 设备接点的创建
驱动程序编写好后,还需要创建设备节点,有两种方式:一是通过mknod命令去手动创建,例如:mknod /dev/hello c 250 0,/dev/hello为设备节点名字,c代表字符设备,250和0代表它的主次设备号。二是使用udev或mdev来实现自动创建设备节点。使用mknod手动创建设备节点不够灵活,如果是动态分配的设备号怎么办,难道每次加载驱动后去查看/proc原创 2012-01-18 16:58:58 · 1197 阅读 · 0 评论 -
SDIO总线 驱动
SDIO卡 SDIO卡是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有蓝牙,网卡,电视卡等。 SDIO协议是由SD卡的协议演化升级而来的,很多地方保留了SD卡的读写协议,同时SDIO协议又在SD卡协议之上添加了CMD52和CMD53命令。由于这原创 2012-02-21 16:36:24 · 10989 阅读 · 2 评论 -
从编译和链接来看kernel驱动注册的过程
=============================================================================================================先不管编译,我们先看看kernel的链接过程。在这里我们使用arm-eabi-ld来进行链接,链接过程需要使用到一个链接脚本,这个脚本就是vmlinux.lds了。vmlin原创 2012-02-07 17:01:35 · 2006 阅读 · 0 评论 -
linux select&poll
还有一个与设备阻塞与非阻塞访问息息相关的论题,即select和poll,select和poll的本质一样,前者在BSD Unix中引入,后者在System V中引入。poll和select用于查询设备的状态,以便用户程序获知是否能对设备进行非阻塞的访问,它们都需要设备驱动程序中的poll函数支持。 驱动程序中poll函数中最主要用到的一个API是poll_wait,其原型如下:v原创 2012-01-31 15:39:40 · 2435 阅读 · 0 评论 -
Linux驱动编程 step-by-step
第三次看了LDD3了(虽然现在已经是kernel3.0但从这本书商还是能学到很多) 每次都有一些收获 现在终于能够写一写代码了驱动程序的作用:简单来说 驱动程序就是使计算机与设备通信的特殊的代码,在作单片机时候(无OS)我们自己定义接口及自定义的结构来操作相关硬件,而在有OS的模式下我们操作的硬件是去实现对应的接口(这些接口是已定义好的,我们需要实现这些接口)而无需自己定义接口,这样既能正转载 2012-01-19 16:55:54 · 1899 阅读 · 0 评论 -
字符设备驱动学习(一)
一般的流程都是,呵呵,其实也不算是一般的流程了,只是手动加载字符设备驱动的一种方法吧,1. 先使用register_chrdev_region或alloc_chrdev_region来注册一个字符设备的设备号,大家都知道Linux是通过设备号来找到相应的驱动程序的,所以你要注册字符设备的时候,需要一个设备号或系统为你指定一个设备号。这两函数的差别就是register_chrdev_reg原创 2012-01-18 16:54:40 · 1188 阅读 · 0 评论 -
misc杂项设备驱动
Linux里面的misc杂项设备是主设备号为10的驱动设备,它的注册跟使用比较的简单,所以比较适用于功能简单的设备。它有自己的设备结构体: struct miscdevice { int minor; const char *name; const struct file_operations *fops; struct list_head原创 2012-01-18 16:32:35 · 1594 阅读 · 0 评论 -
完全解析input子系统设备模型之mini2440按键驱动程序
实现过程中参考了文章http://blog.csdn.net/sylcrq/article/details/6174144在此表示感谢 本人是成长中的菜鸟,经过三天三夜的琢磨,终于使按键驱动程序结合input子系统在mini2440上能够运行,下面将本人的成果展示如下,希望高手们不吝赐教;(代码红色部分为需要注意的地方) 驱动程序:#in原创 2012-03-24 22:16:52 · 2859 阅读 · 2 评论 -
mini6410 ADC触摸屏驱动(注释)
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2012-03-27 16:47:51 · 2045 阅读 · 0 评论 -
Linux字符设备驱动
/*Linux字符设备驱动源代码scdd.c*/#include /*模块头文件*/#include #include /*dev_t头文件*/#include /*MAJOR和MINOR宏头文件*/#include /*register_chrdev_region等函数原创 2012-04-04 11:52:25 · 1265 阅读 · 0 评论 -
Linux设备驱动----之一 cdev
内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev { 13 struct kobject kobj; 14 struct module *owner; 15 const struct file_operations *ops原创 2012-01-13 11:27:56 · 1386 阅读 · 0 评论 -
platform设备 函数解析
platform设备 函数解析 这些函数都在inlcude/linux/platform_device.h 和platform.c中1. platform驱动结构体:struct platform_driver { int (*probe)(struct platform_device *原创 2012-03-31 10:44:17 · 2267 阅读 · 0 评论 -
Linux I2C子系统分析之(二) ----- 概述
Linux定义了系统的I2C驱动体系结构,在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设备驱动。这3部分相互协作,形成了非常通用、可适应性很强的I2C框架。Linux的I2C体系结构分为3个组成部分:I2C核心、I2C总线驱动、I2C设备驱动,如下图所示。I2C核心提供总线驱动和设备驱动的注册、注销方法,algorithm;I2C总线驱动对硬件体系结构中适配原创 2012-03-30 17:28:12 · 3295 阅读 · 0 评论 -
Linux I2C子系统分析之(一) ----- 用GPIO模拟I2C总线
在drivers/i2c/busses下包含各种I2C总线驱动,如S3C2440的I2C总线驱动i2c-s3c2410.c,使用GPIO模拟I2C总线的驱动i2c-gpio.c,这里只分析i2c-gpio.c。i2c-gpio.c它是gpio模拟I2C总线的驱动,总线也是个设备,在这里将总线当作平台设备处理,那驱动当然是平台设备驱动,看它的驱动注册和注销函数。 1. static in原创 2012-03-29 18:43:00 · 17409 阅读 · 1 评论 -
字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
1. 字符设备结构体 内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char_device_struct { struct char_device_struct *next; // 指向散列冲突链表中的下一个元原创 2012-01-12 10:11:19 · 16104 阅读 · 0 评论 -
linux-2.6.35.3内核移植(s3c2440)
忙乎了一个下午,总算忙乎出来了,不过前期大量的搜索工作别人已经完成。大量参考:http://blog.csdn.net /huihui1988/archive/2010/08/09/5799500.aspx学习一下!!!宿 主机:Fedora13目标 机:s3c2440交叉 编译 器:arm-linux-gcc-3.4.1交叉编译器路径:/usr/local/arm/3原创 2012-03-27 19:18:26 · 1703 阅读 · 0 评论 -
mini6410一条线触摸屏驱动(注释)
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2012-03-26 13:55:39 · 3099 阅读 · 0 评论 -
Linux curses库使用
相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC上用Turbo C轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简单, 他转载 2017-08-09 15:57:17 · 2581 阅读 · 0 评论