Linux设备驱动
文章平均质量分 80
manchestermi
文章基本转载,为了方便学习
展开
-
net_device 结构
一.动态分配net_device结构alloc_netdev()函数生成一个net_device结构体,对其成员赋值并返回该结构体的指针。第一个参数是设备私有成员的大小,第二个参数为设备名,第三个参数为net_device的setup()函数指针。setup()函数接收的参数为struct net_device指针,用于预置net_device成员的值。linux-2.6.22/n转载 2015-09-08 20:05:05 · 856 阅读 · 0 评论 -
USB驱动——键盘,U盘
文章转自 http://my.csdn.net/weiqing1981127一 . USB 键盘跟USB鼠标类型,USB键盘也属于HID类型,代码在/dirver/hid/usbhid/usbkbd.c下。USB键盘除了提交中断URB外,还需要提交控制URB。不多话,我们看代码static int __init usb_kbd_init(void){int转载 2015-09-28 13:27:17 · 1151 阅读 · 0 评论 -
linux协议栈skb操作函数
一. SKB_BUFF的基本概念1. 一个完整的skb buff组成(1) struct sk_buff--用于维护socket buffer状态和描述信息(2) header data--独立于sk_buff结构体的数据缓冲区,用来存放报文分组,使各层协议的header存储在连续的空间中,以方便协议栈对其操作(3) struct skb_shared_info --作为heade转载 2015-09-08 18:02:58 · 11894 阅读 · 0 评论 -
串口驱动程序
一. TTY在Linux系统中,终端是一种字符设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写,Teletype是最早出现的一种终端设备,很像电传打字机,是由Teletype公司产生的。Linux系统包含以下几类终端设备:1、串行终端设备(/dev/ttySn):它是使用计算机串行端口连接的终端设备,也就是我们主板上的串口。2、伪终端(/d转载 2015-09-07 20:35:37 · 7326 阅读 · 1 评论 -
函数指针与指针函数
一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指转载 2015-09-20 18:29:43 · 262 阅读 · 0 评论 -
总线,驱动,设备——(3)platform
linux platform 驱动模型分析一. 概述 platform设备和驱动与linux设备模型密切相关。platform在linux设备模型中,其实就是一种虚拟总线没有对应的硬件结构。它的主要作用就是管理系统的外设资源,比如io内存,中断信号线。现在大多数处理器芯片都是soc,如s3c2440,它包括处理器内核(arm920t)和系统的外设(lcd接口,nandflash接口等转载 2015-09-21 18:39:57 · 384 阅读 · 0 评论 -
总线,设备,驱动——(2)match,probe,remove函数
linux设备驱动归纳总结(八):2.总线、设备和驱动的关系xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx上一节介绍了总线、设备和驱动函数的注册,这节着重介绍它们三者的关系,和上一节一样,我模拟一条usb总线,一个usb鼠标设备和一个usb鼠标驱动函数,当然转载 2015-09-21 13:37:40 · 997 阅读 · 0 评论 -
总线,设备,驱动——(1)
总线、设备和驱动一、sysfs文件系统设备模型是2.6内核新引入的特征。设备模型提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构。在2.4内核中,设备的信息放在/proc中。而在2.6内核,内核把设备相关的信息归类在新增加sysfs文件系统,并将它挂载到/sys目录中,把设备信息归类的同时,让用户可以通过用户空间访问。接下来简单介绍一些sy转载 2015-09-20 23:47:45 · 473 阅读 · 0 评论 -
ADC 驱动分析
一,ADC原理ADC,模数转换器,将模拟量转换成数字量,采样,保持电路与AD转换器集成在一起。AD转换器模拟输入信号是直流电压信号,0~3.3V之间。S3C2440有8路模拟输入信号,AD转换器内部有一个模拟多路选择器,某一时刻只能将一路模拟输入信号,通过模拟多路选择器接通进行AD转换,而其他路模拟输入信号被断开。片内ADC电路ADC转换电路模块图XP,XM,Y转载 2015-09-24 15:59:12 · 1249 阅读 · 0 评论 -
linux-framebuffer设备——读取触摸屏信息
如果应用程序需要知道Framebuffer设备的相关参数,必须通过ioctl()系统调用来完成。在头文件中定义了所有的ioctl命令字,不过,最常用的ioctl命令字是下面这两个:FBIOGET_FSCREENINFO和FBIOGET_VSCREENINFO。前者返回与Framebuffer有关的固定的信息,比如图形硬件上实际的帧缓存空间的大小、能否硬件加速等信息。而后者返回的是与Fr转载 2016-03-01 19:47:44 · 2375 阅读 · 0 评论 -
linux /dev/dsp 声卡
一、数字音频音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然音源得到的音频信号必须经过一定的变换,成为数字音频信号之后,才能送到计算机中作进一步的处理。数字音频系统通过将声波的波型转换成一系列二进制数据,来实现对原始声音的重现,实现这一步骤的设备常被称为模/数转换器(A/D)。A/D转换器以每秒钟上万次的速率对声波进行采样,每个采样点都记录下了原始模拟声波在转载 2016-03-01 22:31:56 · 6680 阅读 · 0 评论 -
Linux 线程通信与pthread_cond_wait()的使用
pthread_cond_wait()/************pthread_cond_wait()的使用方法**********/ pthread_mutex_lock(&qlock); pthread_cond_wait(&qready, &qlock); pthread_mutex_unlock(&qlock);/***************转载 2016-03-04 14:58:13 · 671 阅读 · 0 评论 -
linux mp3播放及分析
MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)。LIBMAD 提供 24-bit 的 PCM 输出,完全是定点计算,非常适合没有浮点支持的平台上使用。使用 libmad 提供的一系列 API,就可以非常简单地实现 MP3 数据解码工作。在 libmad 的源代码文件目录下的 mad.h转载 2016-03-02 16:59:56 · 1750 阅读 · 0 评论 -
linux libjpeg对图像进行压缩
libjpeg 是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。Libjpeg不仅可以把bmp格式转化成jpg格式,还支持其他格式的转化成jpg格式(例如ppm,gif,targa,rle等)。 转化流程如下:(1) 分配和初始化一个JPEG压缩对象在libjpeg中,JPEG压缩对象被定义为“struct jpeg_compr转载 2016-03-06 18:31:50 · 3199 阅读 · 0 评论 -
linux驱动—— ioctl中的cmd和_IO() , _IOR() , IOW() ,_IOWR() 以及_IOC_NR()的关系
在驱动程序里, ioctl() 函数传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。ioctl()的cmd可以通过使用宏_IO()得到,那么cmd到底是怎么组成的呢?cmd的大小为 32位,共分 4 个域:bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。bit29~bit转载 2016-02-23 16:11:29 · 1654 阅读 · 0 评论 -
do while(0)的妙处
大家都知道,do…while(condition)可以表示循环,但你有没有遇到在一些宏定义中可以不用循环的地方,也用到了 do…while.比如:[cpp] view plain copy #define DELETE_POINTER(p) \ do \ {转载 2016-02-24 14:33:05 · 309 阅读 · 0 评论 -
mmap系统调用
一. mmap系统调用1. mmap系统调用 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系统调用.但需注意,直转载 2015-09-06 15:53:50 · 584 阅读 · 0 评论 -
Linux设备驱动——字符驱动各种结构体
Linux字符设备驱动结构1.1 cdev结构体 在Linux2.6 内核中,使用cdev结构体来描述一个字符设备,cdev结构体的定义如下:struct cdev { struct kobject kobj; struct module *owner; /*通常为THIS_MODULE*/ struct file_operatio转载 2015-09-03 19:04:09 · 912 阅读 · 0 评论 -
并发与竞态控制
并发控制与竞态: 并发是指多个单元同时、并行被执行,而并发执行单元对共享资源的访问 很容易导致竞态。 竞态的解释: 假设有一个设备,执行单元A对其写入3000个字符'a'而另一个执行单元B对 其写入4000个'b',第三个执行单元C读取globalmem的所有字符,如果执行单元A 、B对于设备的写入操作同时发生,此时就会造成竞态 竞态状态的分类 :转载 2015-09-04 12:27:34 · 326 阅读 · 0 评论 -
DM9000网卡驱动
文章转自 --小雷总,具体点这里说明1:本文分析基于内核源码版本为linux-2.6.31 说明2:本文在理解了linux中总线、设备和驱动模型的基础上加以分析代码 虽然Linux驱动程序应该是和具体的硬件平台分离的,但是为了更好的理解DM9000的驱动程序,这里还是结合一下Mini2440开发板,这样也可以更好的体会如何实现驱动和平台分离。本文分成以下几个部分: 一、转载 2015-09-09 11:50:07 · 650 阅读 · 0 评论 -
触摸屏驱动
一.触摸屏理论概述对于触摸屏驱动,我们主要需要掌握触摸屏驱动代码和应用层测试代码。下面讲的是基于Mini2440的触摸屏驱动,现在的驱动我们都将设备和驱动分离,挂在平台设备总线上,让设备和驱动去匹配。而我们在linu2.6.32.2内核版本中的触摸屏驱动仍然没有将设备和驱动分离,这样就不存在匹配问题,这种现象其实我们并不陌生,在我们学习驱动的前期,都会研究简单字符驱动代表LED驱动,那个驱动就转载 2015-09-09 20:50:32 · 691 阅读 · 0 评论 -
中断机制与内核定时器
一、中断的概念中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)。在实地址模式中,CPU把内存中从0开始的1KB空间作为一个中断向量表。表中的每一项占4个字节。但是在保护模式中转载 2015-09-05 10:36:07 · 500 阅读 · 0 评论 -
Linux输入子系统
Linux输入子系统(Input Subsystem)1.1.input子系统概述输入设备(如按键,键盘,触摸屏,鼠标等)是典型的字符设备,其一般的工作机制是低层在按键,触摸等动作发生时产生一个中断(或驱动通过timer定时查询),然后cpu通过SPI,I2C或者外部存储器总线读取键值,坐标等数据,放一个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取键转载 2015-09-09 15:14:55 · 554 阅读 · 0 评论 -
Linux内存管理
1.Linux 进程在内存数据结构 可以看到一个可执行程序在存储(没有调入内存)时分为代码段,数据段,未初始化数据段三部分: 1) 代码段:存放CPU执行的机器指令。通常代码区是共享的,即其它执行程序可调用它。假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。 2) 数据段:存放已初始化的全局变量,静态变量(包括全局和局部的转载 2015-09-05 23:10:06 · 406 阅读 · 0 评论 -
USB驱动——描述符
USB描述符的分类与介绍USB的符述符分为几类?有人可能会答:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符等。但这里说的不是这样的。上面的几类描述符属于USB标准描述符。另外还有HID描述符和Hub描述符。所以分类是这样的:1. 标准描述符 1) 设备描述符 2) 配置描述符 3) 字符串描述转载 2015-09-25 16:31:25 · 533 阅读 · 0 评论 -
阻塞与非阻塞I/O
一,阻塞与非阻塞阻塞是指没有获得资源则挂起进程,直到获得资源为止。被挂起的进程进入休眠状态,被调度器的运行队列移走,直到等待条件被满足。非阻塞是不能进行设备操作时不挂起,或放弃,或反复查询,直到可以进行操作为止。驱动程序常需要这种能力:当应用程序进行read(),write()等系统调用时,若设备的资源不能获取,而用户又希望以阻塞的方式访问设备,驱动程序应该在设备驱动程序的xxx_re转载 2015-09-04 14:12:21 · 1874 阅读 · 0 评论 -
USB驱动——USB配置
1. USB主机在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linu转载 2015-09-25 15:51:12 · 1385 阅读 · 0 评论 -
s3c2440 LCD ——驱动程序
mini2440驱动分析之LCD mini2440集成了lcd控制器的接口,板子上接的lcd硬件是统宝240*320,TFT型lcd。lcd驱动对应的文件为s3c2410fb.c。要读懂这个驱动必须了解linux platform子系统的知识。因为这个驱动是以platform驱动的形式注册到内核。而且还需要frambuffer驱动的知识,因为这个驱动还是frambuffer接口的转载 2015-09-25 10:39:50 · 654 阅读 · 0 评论 -
Linux设备模型--kobject & kset
1.Sysfs文件系统 Sysfs文件系统是一种类似于proc文件系统的特殊文件系统,它存在于内存当中,当系统启动时由内核挂载于内存当中。用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的数据结构信息。 Sysfs被加载在/sys/目录下,它的子目录包括: 1)Block:在系统中发现的每个块设备在该目录下对应一个子目录。每个子转载 2015-09-25 11:22:59 · 361 阅读 · 0 评论 -
USB驱动——USB枚举
一 . 枚举详细过程USB主机在检测到USB设备插入后,就要对设备进行枚举了。为什么要枚举呢?枚举就是主机host从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。 在说枚举之前,先大概说一下USB的一种传输模式——控制传输。这种传输在US转载 2015-09-25 22:05:09 · 715 阅读 · 0 评论 -
IO端口与IO内存管理
一、I/O端口 端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。 二、IO内存 例如,在P转载 2015-09-05 23:43:16 · 1025 阅读 · 0 评论 -
PCI总线驱动
一、PCI总线系统体系结构PCI是外围设备互连(Peripheral Component Interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用。PCI提供了一组完整的总线接口规范,其目的是描述如何将计算机系统中的外围设备以一种结构化和可控化的方式连接在一起,同时它还刻画了外围设备在连接时的电气特性和行为规约,并且详细定义了计算机系统中的各个不转载 2015-09-06 22:52:01 · 3570 阅读 · 1 评论 -
USB驱动——鼠标
一 . 驱动程序描述 struct usb_device_id 结构体如下:可把USB设备设置为一种或一类设备。二 . URB URB定义:usb 请求块(usb request block, urb)是usb设备驱动中用来描述与usb设备通信所用的基本载体和核心数据结构,非常类似于网络设备驱动中的sk_buff结构体,是usb主机与设备转载 2015-09-27 17:49:40 · 462 阅读 · 0 评论 -
Rt3070无线网卡AP功能移植到s5pv210
Rt3070无线网卡AP功能移植到s5pv210一、平台开发板:GEC210 无线网卡:RT3070主机:VMWare--Ubuntu 10.04 LTS内核版本:linux-2.6.35.7 编译器:arm-linux-gcc-4.5.1 所需源码:2010_0203_RT3070_SoftAP_v2.4.0.1_DPA.bz2 linux-2.6.35.7转载 2016-03-20 15:29:35 · 1656 阅读 · 0 评论