![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux--底层驱动
文章平均质量分 75
wangpengqi
这个作者很懒,什么都没留下…
展开
-
Linux字符设备与块设备的区别与比较
Linux字符设备与块设备的区别与比较Linux中I/O设备分为两类:块设备和字符设备。两种设备本身没有严格限制,但是,基于不同的功能进行了分类。(1) 字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。举例来说,调制解调器是典型的字符设备。(2) 块设备:应用程序可以随机访问设备数据,程序可自行确定读取数据转载 2015-01-13 13:55:15 · 826 阅读 · 0 评论 -
Linux中断(interrupt)子系统之三:中断流控处理层
1. 中断流控层简介早期的内核版本中,几乎所有的中断都是由__do_IRQ函数进行处理,但是,因为各种中断请求的电气特性会有所不同,又或者中断控制器的特性也不同,这会导致以下这些处理也会有所不同:何时对中断控制器发出ack回应;mask_irq和unmask_irq的处理;中断控制器是否需要eoi回应?何时打开cpu的本地irq中断?以便允许irq的嵌套;中断数据结构的同转载 2013-03-07 16:31:21 · 809 阅读 · 0 评论 -
linux input子系统分析--子系统核心.事件处理层.事件传递过程
linux input子系统分析--子系统核心.事件处理层.事件传递过程一. 输入子系统核心分析。 1.输入子系统核心对应与/drivers/input/input.c文件,这个也是作为一个模块注册到内核的。所以首先分析模块初始化函数。[cpp] view plaincopystatic int __init input_in转载 2013-03-12 17:17:59 · 1095 阅读 · 0 评论 -
linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
1.1 本节阅读前提本节的说明建立在前两节的基础之上,需要先阅读如下两篇章:linux input输入子系统分析《一》:初识input输入子系统linux input输入子系统分析《二》:s3c2440的ADC简单驱动实例分析1.2 触摸屏工作原理S3C2440的触摸屏接口是4线电阻式触摸屏接口,可以控制x、y方向上的引脚(XP、XM、YP、YM转载 2013-03-13 16:28:05 · 1033 阅读 · 0 评论 -
Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)
1. ASoC的由来ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性: Codec驱动与SoC CPU的底层耦合过于紧密,这种不理想会导致代码的重复,例如,仅是wm8731的驱动,当时Lin转载 2013-02-28 08:34:45 · 484 阅读 · 0 评论 -
linux input输入子系统分析《二》:s3c2440的ADC简单驱动实例分析
1 mini2440的ADC驱动实例这节与输入子系统无关,出现在这里是因为后面的章节会讲到触摸屏输入子系统驱动,由于触摸屏也使用ADC,因此本节是为了说明ADC通过驱动代码是如何控制的。本节重点:如何通过原理图查找ADC硬件使用的资源如何通过芯片手册查找ADC硬件的操作方法ADC设备驱动程序的初始化流程ADC设备驱动程序的中断处理流程本节难转载 2013-03-12 13:17:38 · 944 阅读 · 0 评论 -
linux input输入子系统分析《一》:初识input输入子系统
主要讲述本人在学习Linux内核input子系统的全部过程,如有分析不当,多谢指正。以下交流方式,文章欢迎转载,保留联系信息,以便交流。邮箱:eabi010@gmail.com主页:www.ielife.cn(爱嵌论坛——嵌入式技术学习交流)博客:blog.csdn.net/ielife1 开发环境主 机:ubuntu10.04开发板:m转载 2013-03-12 11:17:44 · 1199 阅读 · 1 评论 -
linux input子系统分析--概述与数据结构
linux input子系统分析--概述与数据结构 Input子系统处理输入事务,任何输入设备的驱动程序都可以通过Input输入子系统提供的接口注册到内核,利用子系统提供的功能来与用户空间交互。输入设备一般包括键盘,鼠标,触摸屏等,在内核中都是以输入设备出现的。下面分析input输入子系统的结构,以及功能实现。一. Input子系统结构与功能实现 1. Input子转载 2013-03-12 14:29:26 · 759 阅读 · 0 评论 -
Linux ALSA声卡驱动之七:ASoC架构中的Codec
1. Codec简介在移动设备中,Codec的作用可以归结为4种,分别是:对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号对音频通路进行控制,比如播放音乐,收听调频收音机,又或者接听电话时,音频信号在codec内的流通路线是不一样的对音频信号做出相应的处理转载 2013-02-28 15:06:04 · 556 阅读 · 0 评论 -
Linux ALSA声卡驱动之八:ASoC架构中的Platform
1. Platform驱动在ASoC中的作用前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信号。在具体实现上,ASoC有把Platform驱动分为两个部分:snd_soc_pl转载 2013-02-28 15:21:41 · 583 阅读 · 0 评论 -
Linux ALSA声卡驱动之六:ASoC架构中的Machine
前面一节的内容我们提到,ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结转载 2013-02-28 11:26:45 · 507 阅读 · 0 评论 -
linux input子系统分析--主要函数
linux input子系统分析--主要函数 一. 各种注册函数 因为分析一所讲的每种数据结构都代表一类对象,所以每种数据结构都会对应一个注册函数,他们都定义在子系统核心的input.c文件中。主要有三个注册函数 input_register_device 向内核注册一个input设备 input_register_handle 向内核注册转载 2013-03-12 15:44:03 · 840 阅读 · 0 评论 -
Linux ALSA声卡驱动之四:Control设备的创建
Control接口Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等。对于Mixer(混音)来说,Control接口显得尤为重要,从ALSA 0.9.x版本开始,所有的mixer工作都是通过control接口的API来实现的。 ALSA已经为AC97定义了完整的控制接口模型,如果你的Codec芯片只转载 2013-02-27 15:36:26 · 501 阅读 · 0 评论 -
Linux ALSA声卡驱动之三:PCM设备的创建
1. PCM是什么PCM是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制。我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲,把这些脉冲的幅值按一定的精度进行量化,这些量化后的数值被连续地输出、传输、处转载 2013-02-27 14:53:15 · 561 阅读 · 0 评论 -
Linux输入子系统:事件的编码 -- event-codes.txt
Event types:===========types对应于一个相同逻辑输入结构的一组Codes。每个type都有一组可用的codes用于产生输入事件。每个type可用的codes的详细信息请参考Codes一节的内容。* EV_SYN: - 用于事件间的分割标志。事件可能按时间或空间进行分割,就像在多点触摸协议中的例子。 * EV_KEY: -转载 2013-03-13 14:40:20 · 873 阅读 · 0 评论 -
Linux输入子系统:输入设备编程指南 -- input-programming.txt
输入设备编程指南(Programming input drivers)~~~~~~~~~~~~~~~~~~~~~~~~~1. 新建一个输入设备驱动程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1.0 一个最简单的例子~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~转载 2013-03-13 15:15:09 · 795 阅读 · 0 评论 -
Linux中断(interrupt)子系统之五:软件中断(softIRQ)
1. 软件中断的数据结构1.1 struct softirq_action 内核用softirq_action结构管理软件中断的注册和激活等操作,它的定义如下:[cpp] view plaincopystruct softirq_action { void (*a转载 2013-03-14 13:05:08 · 766 阅读 · 0 评论 -
内核网络设备的注册与初始化
首先来看如何分配内存给一个网络设备。 内核通过alloc_netdev来分配内存给一个指定的网络设备: Java代码 #define alloc_netdev(sizeof_priv, name, setup) \ alloc_netdev_mq(sizeof_priv, name, setup, 1) struct net_d转载 2013-08-01 18:30:47 · 1403 阅读 · 0 评论 -
linux中request_region()函数的分析
linux中request_region()函数的分析 struct resource ioport_resource = {.name= "PCI IO",.start= 0,.end= IO_SPACE_LIMIT, //IO_SPACE_LIMIT = 0xffffffff.flags= IORESOURCE_IO,转载 2013-06-05 11:14:33 · 6278 阅读 · 0 评论 -
proc源码解析(一)--proc文件系统的内容
在linux系统中,伪文件系统是系统中重要的组成部分,它与普通文件的最大差别在于它的易失性。普通文件都有固定的存储介质,而伪文件系统则存储在内存中,这也使得伪文件系统在系统掉电后,它保存的内容就会挥发掉。Linux系统中存在以下几类伪文件系统:1.procfs:proc提供内核和用户交互的平台,由于其文件格式是ASCII,所以用户可以使用cat,vim,echo等命令查看或修改文件,当然必转载 2013-05-04 21:08:32 · 653 阅读 · 0 评论 -
linux内核可装载模块(lkm)传参机制 module_param()/module_param_string()
对于如何向模块传递参数,Linux kernel 提供了一个简单的框架。其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量。 使用下面的宏时需要包含头文件。 通过宏module_param()定义一个模块参数: module_param(name, type, perm); name既是用户看到的参数名,又是模块内接转载 2013-05-04 20:53:16 · 1132 阅读 · 0 评论 -
Linux内核学习-字符设备驱动学习(二)
在Linux内核学习-字符设备驱动学习(一)中编写字符设备驱动的一种方法,但是需要手动创建设备节点。有没有能够自动的创建设备节点的呢?有!使用class_create()和device_create()函数可以自动创建节点。class_create : 创建class class_destroy : 销毁class class_device_create : 创建devic转载 2013-04-15 21:34:39 · 709 阅读 · 0 评论 -
关于ioremap,request_mem_region
以我们家 Intel 为代表的 i386 系列处理器中 , 内存和外部 IO 是独立编址独立寻址的 , 于是有一个地址空间叫做内存空间 , 另有一个地址空间叫做 I/O 空间 . 也就是说 , 从处理器的角度来说 ,i386 提供了一些单独的指令用来访问 I/O 空间 . 换言之 , 访问 I/O 空间和访问普通的内存得使用不同的指令 . 而在一些玩嵌入式的处理器中 , 比如 PowerPC, 他转载 2013-03-18 14:05:43 · 647 阅读 · 0 评论 -
linux RTC 驱动模型分析
linux RTC 驱动模型分析 RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把RTC用作“离线”的时间与日期维护器。当Linux内核启动时,它从RTC中读取时间与日期,作为基准值。在运行期间内核完全抛开RTC,以软件的形式维护系统的当前时间与日期,并在需要时将时间回写RTC芯片转载 2013-03-15 16:59:58 · 762 阅读 · 0 评论 -
mini2440驱动分析之LCD
mini2440驱动分析之LCD mini2440集成了lcd控制器的接口,板子上接的lcd硬件是统宝240*320,TFT型lcd。lcd驱动对应的文件为s3c2410fb.c。要读懂这个驱动必须了解linux platform子系统的知识。因为这个驱动是以platform驱动的形式注册到内核。而且还需要frambuffer驱动的知识,因为这个驱动还是frambuffer接口的转载 2013-03-15 16:58:15 · 1043 阅读 · 0 评论 -
mini2440驱动分析之触摸屏
mini2440驱动分析之触摸屏 mini2440触摸屏驱动对应的文件为mini2440_ts.c,他是作为输入设备注册到内核的,功能实现是通过输入子系统来完成的,现在分析触摸屏的实现。以后再分析输入子系统。一. 分析一个驱动首先看它的模块初始化函数,下面是mini2440_ts.c的模块初始化函数:static struct clk*adc_clock;转载 2013-03-15 16:02:31 · 1468 阅读 · 0 评论 -
mini2440驱动分析之PWM
mini2440驱动分析之PWM1. pwm驱动也是作为杂项设备注册的,同样为了防止并发造成的竞态,有个信号量保护。模块的初始化函数[plain] view plaincopystatic int __init dev_init(void) { int ret; init_MUTEX(&lock)转载 2013-03-14 16:02:09 · 671 阅读 · 0 评论 -
linux MISC 驱动模型分析
linux MISC 驱动模型分析 阅读led驱动程序的代码的时候,没有发现ldd3中提到的各种字符设备注册函数,而是发现了一个misc_register函数,这说明led设备是作为杂项设备出现在内核中的,在内核中,misc杂项设备驱动接口是对一些字符设备的简单封装,他们共享一个主设备号,有不同的次设备号,共享一个open调用,其他的操作函数在打开后运用linux驱动程序的转载 2013-03-14 15:43:43 · 646 阅读 · 0 评论 -
linux input输入子系统分析《四》:input子系统整体流程全面分析
1 input输入子系统整体流程本节分析input子系统在内核中的实现,包括输入子系统(Input Core),事件处理层(Event Handler)和设备驱动层。由于上节代码讲解了设备驱动层的写法,因此在开头部分会从设备驱动层做为线索,分析输入子系统和事件处理层是如何配合的,最后从用户角度出发,从“/dev/input/*”接口如何使用输入子系统提供的服务。既然需要详转载 2013-03-13 21:48:00 · 859 阅读 · 0 评论 -
mini2440驱动分析之ADC
mini2440驱动分析之ADC1 . ADC_DEV 结构[plain] view plaincopytypedef struct { wait_queue_head_t wait; int channel; int prescale; }ADC_DEV; wait 等待队列转载 2013-03-14 16:21:23 · 652 阅读 · 0 评论 -
sysfs操作
一:前言在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值,今天我们就来详细分析一下,sysfs的实现.二:sysfs的初始化和挂载Sysfs文件系统的初始化是在sysfs_init()中完成的,代码如下:int __init sysfs_init(void)转载 2013-02-27 14:07:55 · 1306 阅读 · 0 评论 -
Class create, device create, device create file
Class create, device create, device create file开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点(包括ldd3中不少例子也是这样),实际上现在Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点。内核中定义了struct class结转载 2013-02-27 14:12:11 · 1174 阅读 · 0 评论 -
Linux ALSA声卡驱动之二:声卡的创建
1. struct snd_card 1.1. snd_card是什么snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在snd_card的管理之下,声卡驱动的第一个动作通常就是创建一个snd_card结构体。正因为如此,本节中,我们也从 struct cnd_card开始吧。转载 2013-02-27 11:27:32 · 486 阅读 · 0 评论 -
中断触发流程二
中断触发流程二2012-07-24 10:16 by 至上, 18 阅读, 0 评论, 收藏, 编辑主要讲下两个结构体及其关系和在系统中所处的位置:每一个中断线或者叫中断向量都对应一个desc结构体,系统中所有的desc组成一个结构体数组。struct irq_desc { unsigned int irq;转载 2012-12-28 09:13:47 · 520 阅读 · 0 评论 -
lcd驱动解析(一)
硬件执行流程1硬件执行流程2这两幅图的差别在于mix的位置,mix的功能包括alpha blending,color-key,图层处理等。流程1,这些工作是有软件完成的,流程2是由硬件完成的。这个网上找个图啊,不过lcd驱动基本都是这样的架构。fbmem.c是已经实现的,×××fb.c是需要我们自己实现的,这关系到具体的lcd屏。首先,lcd驱动的初转载 2012-12-28 09:48:25 · 1453 阅读 · 0 评论 -
关于设备号的思考
这是最后的运行流程,用户open设备节点,通过主设备号找到驱动程序,根据次设备号找到对应的设备,使用驱动函数中的read(),write()等函数操作设备。为了搭建这样的运行时环境,需要做如下工作:1 驱动程序加载(申请主设备号,在/proc/devices下创建设备)2 根据具体设备创建设备节点 (查询合适的主设备号和可用的次设备号 在/dev下面创建设备节点)先转载 2012-12-28 09:41:52 · 531 阅读 · 0 评论 -
中断触发流程
在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupt handler)或中断服务例程(interrupt service routine ,ISP).产生中断的每个设备都有一个相应的中断处理程序,中断处理程序通常不和特定的设备关联,而是和特定的中断关联的,也就是说,如果一个设备可以 产生多种不同的中断,那么该就可以对应多个中断处理程序,相应的,该设备的驱动程序转载 2012-12-28 09:08:07 · 2787 阅读 · 0 评论 -
ARM开发步步深入之NandFlash 4KB突围
实验目的:突破4KB的Steppingstone存储空间限制,读取NandFlash中4KB后的代码实现“点灯大法”,借此掌握NandFlash的操作。 实验环境及说明:恒颐S3C2410开发板H2410。H2410核心板的NandFlash选用的是三星片上(SOP)K9F1208U0M,该NandFlash容量为64MB。 实验思路:开发板上电启动后,自动将NandFlash开始的4K数转载 2012-11-22 09:19:47 · 535 阅读 · 0 评论 -
从Nand Flash启动U-BOOT的基本原理
从Nand Flash启动U-BOOT的基本原理前4K的问题 如果S3C2410被配置成从Nand Flash启动(配置由硬件工程师在电路板设置), S3C2410的Nand Flash控制器有一个特殊的功能,在S3C2410上电后,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部RAM中,并把0x00000000设置内部RAM的起始地址,CPU转载 2012-11-22 09:08:58 · 600 阅读 · 0 评论 -
“手把手教你学linux驱动开发”OK6410系列之01---模块编程
一、实验环境 开发机环境 操作系统:ubuntu 9.10 交叉编译环境:arm-linux-gcc 4.2.2 ,安装位置 /usr/local/arm/4.3.2/ 6410板子内核源码路径:/work/linux-2.6.36.2-v1.05/ 目标板环境:OK6410-A linu转载 2012-11-27 20:36:25 · 494 阅读 · 0 评论