自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 spi驱动框架

在linux中,spi框架是通过主机、设备分离的思想设计的,主机、设备分离的思想就是主机驱动跟设备驱动分开实现,但是它们之间又相互联系,毕竟上层应用是通过主机控制器间接来控制具体设备,这就涉及到了两个关系,上层应用访问跟主机控制器、主机控制器跟具体设备之间的关系,清楚linux如何处理它们之间的关系,是了解这个框架的关键。在内核中对上层访问spi设备抽象出了通用的部分,这部分在spidev.c文件中

2017-08-28 22:12:16 579

原创 i2c驱动框架

linux的i2c驱动框架是基于总线模型设计的,就是在内核中会注册一条i2c总线,在总线中提供了注册i2c_driver和i2c_adapter的接口,学过总线模型都知道,总线有两部分device和driver组成,在总线描述结构中有个成员struct subsys_private *p;这个成员里面又有两个链表分别为struct klist klist_devices;,struct klist

2017-08-26 22:55:49 264

原创 输入子系统

日常生活中,使用的输入设备多种多样,功能也各不相同,因此linux为了统一管理,引出了输入子系统,在子系统中,把输入设备的每个动作归为一个输入事件进行解析,且系统启动的时候先初始化这个输入子系统,供后面驱动程序注册进来,这个初始化的过程在input.c中实现,如下是它的初始化函数:static int __init input_init(void){ int err; err =

2017-08-26 22:51:45 237

原创 lcd驱动框架

在linux内核中,对于通用的一些访问接口和一些子系统,必定会在内核启动的时候先初始化通用的部分,之后加载驱动的时候再注册进来,对于lcd驱动,linux内核也提供了一套通用的接口,对于一个有通用接口的设备驱动,上层访问必定会先经过通用的接口访问,然后再找到具体的硬件操作函数。分析一个驱动的框架,我比较喜欢从入口函数入手,然后以顺藤摸瓜之势贯通整个驱动框架。内核有个fbmem.c文件中的static

2017-08-26 22:04:37 279

原创 总线驱动模型

设备驱动有两个成员device和driver,这两个成员在驱动模型中扮演了重要的角色,且这两个成员之间是匹配的关系,既然是匹配关系,自然会有有东西对它们进行管理并为它们提供匹配机制,这就产生了一个总线的概念,内核中用一个结构体来对一个总线进行描述struct bus_type { const char *name;//总线的名字 const char *dev_n

2017-08-26 21:55:59 189

原创 信号量

以下笔记摘自《linux设备驱动开发详解》 信号量的描述: 信号量是操作系统最典型的用于同步和互斥的手段,一个信号量是可以给它赋值的,且它的值可为0、1或n,信号量与操作系统中的经典概念PV操作相对应: P(S):将信号量的值减一,即S=S-1;如果S>=0该进程继续执行,否则该进程置为等待状态,排入等待队列 V(S):将信号量的值加一,即S=S+1;如果S>0,唤醒等待队列中等待的进程信号

2017-08-26 21:53:44 169

原创 自旋锁

以下笔记摘自《linux设备驱动开发详解》 自旋锁的描述: 自旋锁是一种典型的对临界资源进行互斥访问的手段。获得一个自旋锁,在cpu上运行的代码前需先执行一个原子操作,该操作测试并设置某个内存变量,由于它是原子操作,在该操作完成之前其他执行单元不可能访问这个内存变量。如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执行,否则程序将在一个小循环内重复这个“测试并设置”的操作。自旋锁的操作:

2017-08-26 21:52:58 611

原创 字符设备驱动

内核在fs.h文件中为驱动人员提供了一个现成的注册字符设备的接口register_chrdev,并在这里定义了它 static inline int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops) { return __register_chrdev(maj

2017-08-26 21:31:57 138

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除