Linux 驱动框架---dm9000分析】的更多相关文章

前面学习了下Linux下的网络设备驱动程序的框架inux 驱动框架---net驱动框架,感觉知道了一个机器的大致结构还是不太清楚具体的细节处是怎么处理的,所以今天就来以dm9000这个网上教程最多的驱动实例来详细看一下Linux网络设备驱动的开发更细节的内容.这个驱动比较综合先是以platform总线为基础,中间有用到互斥,延迟任务等细节的知识所以需要先简单了解一下用到的框架的基本原理. 因为是基于platform总线的所以肯定是分设备和驱动两部分这里直接上代码了,然后后面在详细阐述工作过程.先…
这一篇主要是学习网络设备驱动框架性的东西具体的实例分析可以参考Linux 驱动框架---dm9000分析 .Linux 对于网络设备的驱动的定义分了四层分别是网络接口层对上是IP,ARP等网络协议,因为网络协议还是相对复杂的肯定是由内核来实现的(符合Linux驱动一贯的风格就是内核做的更多):网络设备接口层实际上就是对网络设备操作的封装,封装成一个结构体由驱动工程师来填充内容从而做到抽象:设备驱动功能层其实就是网络设备接口层封装好的接口的具体实现以操作硬件设备完成指定动作的软件部分:网络设备与媒…
i2c驱动在Linux通过一个周的学习后发现i2c总线的驱动框架还是和Linux整体的驱动框架是相同的,思想并不特殊比较复杂的内容如i2c核心的内容都是内核驱动框架实现完成的,今天我们暂时只分析驱动开发需要完成的部分.iic驱动驱动开发主要是完成四个部分的内容,struct i2c_adapter(适配器),struct i2c_algorithm (通讯接口),i2c_driver(设备驱动),struct i2c_client(iic设备),其中适配器和通讯接口的实现一般SOC厂商都会针对自…
input 子系统也是作为内核的一个字符设备模块存在的,所以他也是字符设备自然也会有字符设备的文件接口.input子系统的注册过程主要分为两步,先注册了一个input class然后再注册一个字符设备 input. static int __init input_init(void) { int err; //子类注册 err = class_register(&input_class); if (err) { pr_err("unable to register input_dev c…
前面从具体(Linux 驱动框架---input子系统)的工作过程学习了Linux的input子系统相关的架构知识,但是前面的学习比较实际缺少总结,所以今天就来总结一下输入子系统的架构分层,站到远处来看输入子系统.总得来说输入子系统由设备驱动层(input_dev的注册),输入子系统核心层(input core),事件处理层(handler),和用户空间四部分.这一部分类别platform驱动框架的内容来学习. 设备驱动层(类似于platform_device)       就是前面描述的gpi…
1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲(framebuffer) 是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作.这种操作是抽象的,统一的.用 户不必关心物理显存的位置.换页机制等等具体细节.这些都是由Framebuffer设备驱动来完成的. (2)从驱动来看,f…
1.何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像adc.buzzer等这些设备一般都归属于misc中. (2)需要注意的是,虽然这些设备归属于杂散设备中,但是其实你也可以不把设备放在这个类中,这都是驱动工程师按照自己的想法做的,你想把他们写在 misc类设备中也可以,自己单独建立一个类也是可以的,只不过是否标准化而已,因为人家既然建立了这个类,那你…
内核版本:linux2.6.32.2  硬件资源:s3c2440 参考:  韦东山SPI视频教程 内容概括:     1.I2C 驱动框架回顾     2.SPI 框架简单介绍     3.master 驱动框架         3.1 驱动侧         3.2 设备侧 4.SPI 设备驱动框架 4.1 设备册         4.2 驱动侧 5.设备驱动程序实例 1.I2C 驱动框架回顾     在前面学习 I2C 驱动程序的时候我们知道,I2C 驱动框架分为两层,一层是控制器驱动程序…
Linux 设备 Linux驱动中的三大主要基础成员主要是设备,总线和驱动.今天先来从设备开始分析先把设备相关的数据结构放到这里方便后面看到来查,其中有些进行了简单的注释. struct device { struct device *parent;/*父设备*/ struct device_private *p;/*设备私有数据 包含子设备,父设备,总线等的链表*/ struct kobject kobj;/*内核对象*/ const char *init_name; /* initial n…
Linux系统的驱动框架主要就是三个主要部分组成,驱动.总线.设备.现在常见的嵌入式SOC已经不是单纯的CPU的概念了,它们都会在片上集成很多外设电路,这些外设都挂接在SOC内部的总线上,不同与IIC.SPI和USB等这一类实际存在外部PCB走线总线,他是系统内的总线实际是CPU的内部走线,所以Linux为了统一驱动模型在系统在启动引导时初始化了一条虚拟总线作为一个抽象的总线称之为platform总线,实现在drivers/base/platform.c中.今天就来学习这一类驱动的框架结构. 总…
字符设备 Linux中设备常见分类是字符设备,块设备.网络设备,其中字符设备也是Linux驱动中最常用的设备类型.因此开发Linux设备驱动肯定是要先学习一下字符设备的抽象的.在内核中使用struct cdev来描述一个字符设备如下 struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigne…
描述和API 阻塞IO和非阻塞IO的应用编程时的处理机制是不同的,如果是非阻塞IO在访问资源未就绪时就直接返回-EAGAIN,反之阻塞IO则会使当前用户进程睡眠直到资源可用.从应用场景来说两种方式分别适应不同的使用场景.而驱动开发不可避免的需要支持两种访问方式.如果不是采用现成的子框架而自己实现文件操作底层接口部分时就需要自己实现这一机制.文件的访问方式除了在打开文件时指定外还可以在打开以后通过fcnt和ioctl进行修改和获取. 阻塞IO 在实现过程依赖两个重要的数据结构等待队列头(wait_…
总述 Linux 系统下的驱动最后都是以如下这个结构体呈现在系统中的,注意其中的dev_pm_ops是内核新增的内容来准备替换platform_driver中的电源管理相关的内容.这里内容是先进行总体的流程梳理后面再结合Linux内核代码的内容来学习. struct device_driver { const char *name; struct bus_type *bus; /*Linux 下驱动都是应该挂在总线地下的*/ struct module *owner; const char *m…
设备文件系统 Linux引入了虚拟文件系统,从而使设备的访问可以像访问普通文件系统一样.因此在内核中描述打开文件的数据inode中的rdev成员用来记录设备文件对应到的设备号.设备文件也由一个对应的file_operations 数据对象,用来描述设备的操作接口.设备文件系统最早是采用devfs实现的,但是后来因为种种原因在2.6以后的内核中已经将其废弃而转而使用udev,他来本质上是没有区别都是在设备添加到系统中时在/dev目录下产生设备文件(机制相同),但是不同的是策略devfs的策略是将设…
异步IO是对阻塞和轮询IO的机制补充,所谓异步IO就是在设备数据就绪时主动通知所属进程进行处理的机制.之所以说是异步是相对与被通知进程的,因为进程不知道也无法知道什么时候会被通知:这一机制非常类似于硬件上的中断.异步IO的实现也依赖于Linux内核进程的信号机制,因为异步IO就是通过SIGIO信号通知的进程,而进程在收到信号后就会像中断一样直接跳转去执行之前就注册好的信号处理接口. 用户空间 注册信号接口函数有两个版本的接口signal(int signal,sighandler_t handl…
在单片机开发中中断就是执行过程中发生了一些事件需要及时处理,所以需要停止当前正在运行的处理的事情转而去执行中断服务函数,已完成必要的事件的处理.在Linux中断一样是如此使用但是基于常见的中断控制器的特性比如不支持中断嵌套,当CPU在处理一个中断时是无法响应其他中断的,所以就会导致整个系统的实时性就比较差,所以在Linux下的思路就是尽量简短中断上下文执行的指令数量,把一些必须在中断上下文执行的代码放在中断上下文中执行,而一些儿可以适当推迟的处理延迟处理.这就是Linux的中断处理程序的机制,将…
Linux 模块的参数 通过在内核模块中定义模块参数从而可以在安装模块时通过insmod module_name paramname=param形式给模块传递参数.如果安装模块是传参数则将使用模块内定义的缺省值.并且最后的/sys/module/目录下会呈现出来进行读写(当读写权限为0时不会出现在目录中). 定义方式 定义单个参数 1. 定义变量(像定义普通变量的方式一样定义变量). 2. 使用后module_param 声明模块变量如module_param(param_name,param_…
内核中的时间 Linux 系统内核对于时间的管理依赖于硬件,硬件按一定的周期产生中断,周期由内核的一个配置值HZ决定在系统启动时会将定时器配置为HZ值指定的频率产生中断:同时内核和维护一个64位(X86和X64都是64位)的计数器变量jiffies(jiffies_64).在系统启动时这个值为0之后每次发生一次定时器中断这个值就会加1 ,所以他代表系统连续运行的嘀嗒次数.在内核中使用这个变量只需要引用头文件include<linux/jiffies.h>这个头文件又经常被linux/sched…
并发指多个执行单元被同时.并行的执行,而并发执行的单元对共享资源的访问就容易导致竟态.并发产生的情况分为抢占和并行(多核)和硬抢占(中断).Linux为解决这一问题增加了一系列的接口来解决并发导致的竟态问题.其中原子操作是最基本的机制. 原子操作 通常一句C代码在被翻译成汇编时可能不止一句,又比如常见的直接使用C语言用一个全局变量作为标志位来标志共享资源的实现情况如下: if(flags!= BUSY){ flasg = BUSY: //开始操作 ...} 两种情况都会有如下的风险.如果内核支持…
深入分析LinuxFramebuffer子系统的驱动框架.接口实现和使用. 一.LinuxFramebuffer的软件需求 上一篇文章详细阐述了LinuxFramebuffer的软件需求(请先理解第一篇文章再来阅读本篇文章),总结如下: 1. 针对SOC的LCD控制寄存器进行编程,以支持不同的LCD屏,以使该SOC的应用场景最大化.这是硬件平台相关的需求.其对应Linux源码路径arch\arm\mach-s5pv210\XXX210-lcds.c中的实现内容. 2. 给用户提供一个进程空间映射…
linux 串行通信接口驱动框架 在学习linux内核驱动时,不论是看linux相关的书籍,又或者是直接看linux的源码,总是能在linux中看到各种各样的框架,linux内核极其庞杂,linux各种框架理解起来并不容易,如果直接硬着头皮死记硬背,意义也不大. 博主学习东西一直秉持着追本溯源的态度,要弄清一个东西是怎么样的,如果能够了解它的发展,了解它为什么会变成这样,理解起来就非常简单了.抓住主干,沿着线头就可以将整个框架慢慢梳理清楚. 从i2c开始 在嵌入式中,不管是单片机还是单板机,i2…
学习目标:学习V4L2(V4L2:vidio for linux version 2)摄像头驱动框架,分析vivi.c(虚拟视频硬件相关)驱动源码程序,总结V4L2硬件相关的驱动的步骤:  一.V4L2架构 1. 字符类驱动 V4L2(V4L2:vidio for linux version 2)摄像头驱动属于字符类驱动, 对于一般的字符类驱动程序,其编写步骤一般分为: 1)构造一个file_operations: 编写open=drv_open .read=drv_read2)注册设备,告诉内…
内核版本          :  Linux 3.10.14 rc红外接收类型:  GPIO 类型的NEC红外编码 本章内容 1) rc体系结构分析 2) 分析红外platform_driver平台驱动框架 3) 分析内核自带的NEC红外解码过程 4) 修改内核自带的NEC红外解码BUG,实现按键重复按下 下章内容 1) 自己创建一个红外platform_device平台设备 2) 试验 在分析之前,先来复习下NEC红外编码的发送波形(在后面分析NEC解码会用到) 基本数据格式如下: 如果一直按…
版权声明:本文为博主原创文章,未经博主同意不得转载.转载联系 QQ 30952589,加好友请注明来意. https://blog.csdn.net/sleks/article/details/25158121 这里转载一篇 linux 下的驱动程序开发的非常基础和实用的文章 在pcduino开发板上写驱动控制板载LED的闪烁 ,实际是一个linux的驱动,该篇文章基础且够用:兴许找到 android 下的驱动开发相关文章,再补充进来,希望该文作者能再接再励,感谢于先. 这里用 原创 模式,以便…
转自:http://blog.chinaunix.net/uid-23046336-id-3243543.html   看了http://blog.chinaunix.net/uid-11848011-id-96188.html的驱动框架分析,感觉受益匪浅.对于一些内容,我自己查漏补缺. 首先我们按照顺序,看内核模块的注册以及释放函数如下: 点击(此处)折叠或打开 static int __init usb_skel_init(void) { int result; /* register th…
转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了.好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发.但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货.当然,还会顺带提一下其他的驱动程序写法.        事实上,Linux的设备驱动都遵循一个惯例——表征驱动程序(用…
前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi介绍 SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构.支持多slave模式应用,一般仅支持单Master.时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first).SPI接口有2根单向数据线,为…
前言 这篇文章是对linux驱动基础系列--linux spi驱动框架分析的补充,主要是添加了最新的linux内核里设备树相关内容. spi设备树相关信息 如之前的文章里所述,控制器的device和spi device都是通过platform_add_device和spi_register_board_info注册到内核的驱动模式中的.而最新的方式是通过设备树来实现的.以arm为例,设备树文件一般存放在arch/arm/boot/dts下,不同的平台对应不同的文件,以xilinx zynq平台为…
转自:http://blog.csdn.net/brucexu1978/article/details/17583407 版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.cnblogs.com/general001/articles/2319552.html http://blog.csdn.net/uruita/article/details/7263290:MODULE_DEVICE_TABLE http://blog.chinaunix.net/uid-2590…
转自:http://blog.csdn.net/jeffade/article/details/7701431 Linux USB驱动框架分析(一) 初次接触和OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了.好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动研发.但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货.当然,还会顺带提一下其他的驱动程式写法. 事实上,Linux的设备驱动都遵循一个…