linux驱动
ccccccsdn
这个作者很懒,什么都没留下…
展开
-
Linux异步通知 fasync
要弄明白这个问题,我们得从最基本的原理开始。我们知道,驱动程序运行在内核空间中,应用程序运行在用户空间中,两者是不能直接通信的。但在实际应用中,在设备已经准备好的时候,我们希望通知用户程序设备已经ok,用户程序可以读取了,这样应用程序就不需要一直查询该设备的状态,从而节约了资源,这就是异步通知。好,那下一个问题就来了,这个过程如何实现呢?简单,两方面的工作。一 驱动方面:1转载 2014-07-14 13:21:10 · 659 阅读 · 0 评论 -
kernel中的per_cpu变量
per-cpu 变量的引入有效的解决了SMP系统中处理器对锁得竞争,每个cpu只需访问自己的本地变量。本文阐述了per-cpu变量在2.6内核上的实现和相关操作。在系统编译阶段我们就手工的定义了一份所有的per-cpu变量,这些变量的定义是通过宏DEFINE_PER_CPU实现的:11 #define DEFINE_PER_CPU(type, name)\ 12转载 2015-05-29 17:27:00 · 446 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之一:概述
随着技术的发展,我们对CPU的处理能力提出了越来越高的需求,芯片厂家也对制造工艺不断地提升。现在的主流PC处理器的主频已经在3GHz左右,就算是智能手机的处理器也已经可以工作在1.5GHz以上,可是我们并不是时时刻刻都需要让CPU工作在最高的主频上,尤其是移动设备和笔记本电脑,大部分时间里,CPU其实工作在轻负载状态下,我们知道:主频越高,功耗也越高。为了节省CPU的功耗和减少发热,我们有必要根据转载 2015-05-22 13:22:23 · 467 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之二:核心(core)架构与API
上一节中,我们大致地讲解了一下CPUFreq在用户空间的sysfs接口和它的几个重要的数据结构,同时也提到,CPUFreq子系统把一些公共的代码逻辑组织在一起,构成了CPUFreq的核心部分,这些公共逻辑向CPUFreq和其它内核模块提供了必要的API,像cpufreq_governor、cpufreq_driver等模块通过这些API来完成一个完整的CPUFreq体系。这一节我们就来讨论一下核心转载 2015-05-22 13:25:20 · 616 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之三:governor
在上一篇文章中,介绍了cpufreq的core层,core提供了cpufreq系统的初始化,公共数据结构的建立以及对cpufreq中其它子部件提供注册功能。core的最核心功能是对policy的管理,一个policy通过cpufreq_policy结构中的governor字段,和某个governor相关联,本章的内容正是要对governor进行讨论。/*********************转载 2015-05-22 13:41:58 · 715 阅读 · 0 评论 -
Linux中断(interrupt)子系统之一:中断系统基本原理
转自:http://blog.csdn.net/droidphone/article/details/7445825这个中断系列文章主要针对移动设备中的Linux进行讨论,文中的例子基本都是基于ARM这一体系架构,其他架构的原理其实也差不多,区别只是其中的硬件抽象层。内核版本基于3.3。虽然内核的版本不断地提升,不过自从上一次变更到当前的通用中断子系统后,大的框架性的东西并没有太大转载 2015-07-08 13:49:07 · 413 阅读 · 0 评论 -
Linux中断(interrupt)子系统之二:arch相关的硬件封装层
转自:http://blog.csdn.net/droidphone/article/details/7467436Linux的通用中断子系统的一个设计原则就是把底层的硬件实现尽可能地隐藏起来,使得驱动程序的开发人员不用关注底层的实现,要实现这个目标,内核的开发者们必须把硬件相关的内容剥离出来,然后定义一些列标准的接口供上层访问,上层的开发人员只要知道这些接口即可完成对中断的进一步处理和控转载 2015-07-09 09:21:22 · 359 阅读 · 0 评论 -
Linux中断(interrupt)子系统之五:软件中断(softIRQ)
转自:http://blog.csdn.net/droidphone/article/details/7518428软件中断(softIRQ)是内核提供的一种延迟执行机制,它完全由软件触发,虽然说是延迟机制,实际上,在大多数情况下,它与普通进程相比,能得到更快的响应时间。软中断也是其他一些内核机制的基础,比如tasklet,高分辨率timer等。/*******************转载 2015-07-09 09:34:03 · 388 阅读 · 0 评论 -
Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层
转自:http://blog.csdn.net/droidphone/article/details/7497787在本系列文章的第一篇:Linux中断(interrupt)子系统之一:中断系统基本原理,我把通用中断子系统分为了4个层次,其中的驱动程序接口层和中断通用逻辑层的界限实际上不是很明确,因为中断通用逻辑层的很多接口,既可以被驱动程序使用,也可以被硬件封装层使用,所以我把这两部分的转载 2015-07-09 09:32:44 · 442 阅读 · 0 评论 -
Linux中断(interrupt)子系统之三:中断流控处理层
转自:http://blog.csdn.net/droidphone/article/details/74897561. 中断流控层简介早期的内核版本中,几乎所有的中断都是由__do_IRQ函数进行处理,但是,因为各种中断请求的电气特性会有所不同,又或者中断控制器的特性也不同,这会导致以下这些处理也会有所不同:何时对中断控制器发出ack回应;mask_irq和unmask_i转载 2015-07-09 09:28:08 · 415 阅读 · 0 评论 -
led子系统(一)
转自:http://blog.csdn.net/eastmoon502136/article/details/37569789 就像学编程第一个范例helloworld一样,学嵌入式,单片机、fpga之类的第一个范例就是点亮一盏灯。对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用gpio口,应用程序来拉高拉低管脚控制。不过,既然转载 2015-07-13 21:51:43 · 492 阅读 · 0 评论 -
linux watchdog介绍
1 Linux对Watchdog的支持1.1 Linux下watchdog的工作原理Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。在Linux 内核下, watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作, 硬件wat转载 2015-08-08 18:42:59 · 2031 阅读 · 0 评论 -
_subsys_initcall()
以下代码来自 linux内核源码中 include/linux/init.h 文件 117 #define pure_initcall(fn) __define_initcall("0",fn,1)118 119 #define core_initcall(fn) __define_initcall("1",fn,1)120 #define core_ini转载 2015-08-11 19:32:41 · 434 阅读 · 0 评论 -
led子系统(二)
对于led子系统中,有那么多得trigger,下面就来简单了解下。1、default-on[html] view plaincopyprint?pre name="code" class="html">static voiddefon_trig_activate(struct led_classdev *led_cdev) { le转载 2015-07-18 14:33:47 · 557 阅读 · 0 评论 -
poll,select,异步通知,异步IO
十三、Linux驱动程序开发(8) - 高级字符驱动程序(2)三、poll 和 select当应用程序需要进行对多文件读写时,若某个文件没有准备好,则系统会处于读写阻塞的状态,并影响了其他文件的读写。为了避免这种情况,在必须使用多输入输出流又不想阻塞在它们任何一个上的应用程序常将非阻塞 I/O 和poll(SystemV)、select(BSD Unix)、 epoll(lin转载 2015-09-24 10:16:14 · 1134 阅读 · 0 评论 -
regmap简介
1 简介Regmap 机制是在 Linux 3.1 加入进来的特性。主要目的是减少慢速 I/O 驱动上的重复逻辑,提供一种通用的接口来操作底层硬件上的寄存器。其实这就是内核做的一次重构。Regmap 除了能做到统一的 I/O 接口,还可以在驱动和硬件 IC 之间做一层缓存,从而能减少底层 I/O 的操作次数。2 使用对比在了解 Regmap 的实现细节前,我们先来对比一下,传统操作寄存转载 2016-01-26 15:54:28 · 5667 阅读 · 0 评论 -
linux机制与策略
机制mechanism,策略policy。如果你看过《linux device drivers》,里面给出了大概的介绍。机制提供了干什么(do what),策略提供如何做(how to do)。驱动程序完成机制的功能,把策略的实现留给用户的应用程序。 通常在机制中,驱动程序要完成打开,关闭,读写,控制等功能。这些都是设备使用时最基本的操作。而策略中就要实现一些高级的数据处理或界转载 2016-02-01 10:38:39 · 1882 阅读 · 0 评论 -
内核3.x版本之后设备树机制
内核3.x版本之后设备树机制 Based on linux 3.10.24 source code 参考/documentation/devicetree/Booting-without-of.txt文档目录内核3.x版本之后设备树机制 1一、设备树(Device Tree)基本概念及作用 3二、设备树的组成和使用 4①DTS和DTSI 4②DTC 4转载 2015-05-29 17:15:02 · 688 阅读 · 0 评论 -
Linux i2c驱动(eeprom 读写)
一、M24256简介1、256 Kbit Serial I²C Bus EEPROM2、Compatible with I2C Extended Addressing3、Two Wire I2C Serial Interface4、Supports 400 kHz Protocol5、 Hardware Write Control6、 BYTE and PAGE WRITE转载 2015-05-08 09:29:53 · 1093 阅读 · 0 评论 -
linux oops
什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只不过说话的主角变成了Linux。当某些比较致命的问题出现时,我们的Linux内核转载 2015-05-15 14:41:49 · 378 阅读 · 0 评论 -
各种总线match匹配函数
当向linux系统总线添加设备或驱动时,总是会调用各总线对应的match匹配函数来判断驱动和设备是否匹配,这些match函数之间都存在一定的差异,本文先对常用的match匹配函数进行讲解,以后会陆续添加新的内容。 一. 驱动和设备匹配过程常用数据结构1. of_device_idstruct of_device_id{charname[32];char type[32];转载 2014-07-03 15:55:28 · 904 阅读 · 0 评论 -
ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach转载 2014-06-25 18:57:13 · 605 阅读 · 0 评论 -
poll和select的使用和差异
使用非阻塞I/O 的应用程序常常使用poll, select。poll和select本质上有相同的功能:每个允许一个进程来决定它是否可读或者写一个或多个文件而不阻塞。这些调用也可阻塞进程直到任何一个给定集合的文件描述符可用来读或写。因此,它们常常用在必须使用多输入输出流的应用程序,而不必粘连在它们任何一个上. 相同的功能常常由多个函数提供,因为2 个是由不同的团队在几乎相同时间完成的:select转载 2014-06-25 12:34:21 · 846 阅读 · 0 评论 -
LInux SPI框架(下)
水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7737833 本节以spidev设备驱动为例,来阐述SPI数据传输的过程。spidev是内核中一个通用的设备驱动,我们注册的从设备都可以使用该驱动,只需在注册时将从设备的modalias字段设置为"spidev",这样才能和spidev驱动转载 2014-06-19 09:25:05 · 525 阅读 · 0 评论 -
基于linux-2.6.35的class_create(),device_create解析
从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下:struct class *myc转载 2014-06-18 19:12:41 · 537 阅读 · 0 评论 -
platform驱动简介
简介:目的:说白了就是为了将设备与驱动分离,通过platform总线进行连接废话不多说:相关结构介绍:1.platform设备结构体structplatform_device{const charname;/*设备名*/u32 id;/*设备id*/struct device dev;/*设备*/u32 num_resource;转载 2014-06-16 09:05:43 · 746 阅读 · 0 评论 -
Linux下SPI驱动的移植和应用程序的测试
Linux2.6.32下SPI驱动的移植如下图所示:下面需要修改部分内核代码,具体操作如下:1. 修改arch/arm/mach-s3c2440/mach-mini2440.c文件在include头文件代码行之后增加如下代码//spi add by shiguang #include #include static stru转载 2014-06-11 16:37:11 · 1778 阅读 · 0 评论 -
Linux设备模型
本人转自:http://www.cnblogs.com/gaomaolin_88/archive/2010/05/28/1746600.html看了一段时间的驱动编程,从LDD3的hello wrod到后来的字符设备以至于更加复杂的驱动,越看越是觉得对linux驱动的结构不清楚,越看越是迷糊。于是就停下脚步搜索一下资料理一下头绪:以下四个方面来总结一些内容:1.底层数据结构:k转载 2014-06-11 15:45:35 · 534 阅读 · 0 评论 -
Linux SPI框架(中)
水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7734150 上节介绍了SPI子系统中的一些重要数据结构和SPI子系统初始化的第一步,也就是注册SPI总线。这节介绍针对于s3c24xx平台的SPI子系统初始化,在看具体的代码之前,先上一张自己画的图,帮助理清初始化的主要步骤转载 2014-06-19 09:23:56 · 547 阅读 · 0 评论 -
Linux SPI框架(上)
水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7733476 Linux的SPI子系统采用主机驱动和外设驱动分离的思想,首先主机SPI控制器是一种平台设备,因此它以platform的方式注册进内核,外设的信息是以boardinfo形式静态定义的,在创建spi_master时,会根据外设的转载 2014-06-19 09:22:42 · 594 阅读 · 0 评论 -
Linux 3.x 的platform
众所周知2011年linux创始人Linus Torvalds在社区的一句脏话!引发了社区震动!从而导致代码大换血!Dts(device tree source)则就是这个时候被应用在我们的各种处理器中目录下的!早期这种模式被用于IBM PowerPC等体系架构下使用的Flattened Device Tree(FDT)。Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmw转载 2015-03-14 21:28:16 · 594 阅读 · 0 评论 -
Linux内核驱动之GPIO子系统(一)GPIO的使用
一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用转载 2015-03-14 17:39:18 · 415 阅读 · 0 评论 -
linux之GPIO的使用------OK6410
S3C6410的GPIO引脚相对来说比较多,而且大部分引脚都具有多重复用功能,如何在linux上用最简单的方式来控制GPIO这需要我们好好研究一下底层的代码了,其实方法有很多种,鉴于在操作系统端控制GPIO并不像控制传统的单片机那样。这里我将提及一种方法来讲述,这种方法也是我至今看到最简单的方法首先我们打开linux-3.0.1\arch\arm\plat-samsung\incl转载 2015-03-14 17:49:32 · 439 阅读 · 0 评论 -
linux RTC驱动模型
linux RTC 驱动模型分析 RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把RTC用作“离线”的时间与日期维护器。当Linux内核启动时,它从RTC中读取时间与日期,作为基准值。在运行期间内核完全抛开RTC,以软件的形式维护系统的当前时间与日期,并在需要时将时间回写RTC芯片转载 2015-03-13 21:40:53 · 376 阅读 · 0 评论 -
Linux内核之mmc子系统-sdio
现在的Linux内核中,mmc不仅是一个驱动,而是一个子系统。这里通过分析Linux3.2.0内核,结合TI的arm335x平台及omap_hsmmcd host分析下mmc子系统,重点关注sdio及架构在其上的具体sdio IP驱动实现。1. General overview1.1 源码概览Linux kernel把mmc,sd以及sdio三者的驱动代码转载 2015-04-16 16:13:51 · 908 阅读 · 0 评论 -
S3C2440 Linux驱动移植——AT24C02(EEPROM)驱动
开发板:TQ2440内核:Linux 2.6.32PC OS:Ubuntu 11.041.配置内核打开I2C功能:打开杂项设备,该选项打开后,EEPROM也就打开了。 2. 修改代码修改文件: linux/arch/arm/mach-s3c2440/mach-smdk2440.c增加如下代码片段:[cpp] view p转载 2015-04-27 16:28:18 · 696 阅读 · 0 评论 -
Linux内核里的DebugFS
作者:wwang出处:http://www.cnblogs.com/wwang 本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。DebugFS,顾名思义,是一种用于内核调试的虚拟文件系统,内核开发者通过debugfs和用户空间交换数据。类似的虚拟文件系统还有pro转载 2017-01-12 10:38:29 · 492 阅读 · 0 评论