![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动笔记
文章平均质量分 75
_lin55
。。。
展开
-
字符设备驱动
内核在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 · 136 阅读 · 0 评论 -
自旋锁
以下笔记摘自《linux设备驱动开发详解》 自旋锁的描述: 自旋锁是一种典型的对临界资源进行互斥访问的手段。获得一个自旋锁,在cpu上运行的代码前需先执行一个原子操作,该操作测试并设置某个内存变量,由于它是原子操作,在该操作完成之前其他执行单元不可能访问这个内存变量。如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执行,否则程序将在一个小循环内重复这个“测试并设置”的操作。自旋锁的操作:原创 2017-08-26 21:52:58 · 608 阅读 · 0 评论 -
总线驱动模型
设备驱动有两个成员device和driver,这两个成员在驱动模型中扮演了重要的角色,且这两个成员之间是匹配的关系,既然是匹配关系,自然会有有东西对它们进行管理并为它们提供匹配机制,这就产生了一个总线的概念,内核中用一个结构体来对一个总线进行描述struct bus_type { const char *name;//总线的名字 const char *dev_n原创 2017-08-26 21:55:59 · 188 阅读 · 0 评论 -
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 · 262 阅读 · 0 评论 -
lcd驱动框架
在linux内核中,对于通用的一些访问接口和一些子系统,必定会在内核启动的时候先初始化通用的部分,之后加载驱动的时候再注册进来,对于lcd驱动,linux内核也提供了一套通用的接口,对于一个有通用接口的设备驱动,上层访问必定会先经过通用的接口访问,然后再找到具体的硬件操作函数。分析一个驱动的框架,我比较喜欢从入口函数入手,然后以顺藤摸瓜之势贯通整个驱动框架。内核有个fbmem.c文件中的static原创 2017-08-26 22:04:37 · 277 阅读 · 0 评论 -
输入子系统
日常生活中,使用的输入设备多种多样,功能也各不相同,因此linux为了统一管理,引出了输入子系统,在子系统中,把输入设备的每个动作归为一个输入事件进行解析,且系统启动的时候先初始化这个输入子系统,供后面驱动程序注册进来,这个初始化的过程在input.c中实现,如下是它的初始化函数:static int __init input_init(void) { int err; err =原创 2017-08-26 22:51:45 · 235 阅读 · 0 评论 -
spi驱动框架
在linux中,spi框架是通过主机、设备分离的思想设计的,主机、设备分离的思想就是主机驱动跟设备驱动分开实现,但是它们之间又相互联系,毕竟上层应用是通过主机控制器间接来控制具体设备,这就涉及到了两个关系,上层应用访问跟主机控制器、主机控制器跟具体设备之间的关系,清楚linux如何处理它们之间的关系,是了解这个框架的关键。在内核中对上层访问spi设备抽象出了通用的部分,这部分在spidev.c文件中原创 2017-08-28 22:12:16 · 573 阅读 · 0 评论