《Linux设备驱动开发详解》笔记
文章平均质量分 77
好好du书
这个作者很懒,什么都没留下…
展开
-
第13章--Linux块设备驱动
所有的I/O请求都会先放入一个队列,统一由I/O调度层管理,它决定队列中的请求的排列顺序以及什么时候派发请求到块设备驱动,最终由块设备驱动程序操作到相关的硬件。块设备对于I/O请求有对应的缓冲区,可以调整响应顺序,而字符设备没有缓冲、直接读写。当这个结构代表一个块设备时,bd_disk成员指向设备的gendisk结构。块设备只能以块为单位接收输入和返回输出,而字符设备则以字节为单位。是连接抽象的块设备操作与具体块设备操作之间的枢纽。块设备可以随机访问,而字符设备只能顺序读写。原创 2023-05-17 09:45:24 · 67 阅读 · 0 评论 -
第12章--Linux设备驱动的软件架构思想
Linux设备驱动非常重视软件的可重用和跨平台能力。在Linux总线、设备和驱动模型中,驱动只管驱动,设备只管设备,总线则负责匹配设备和驱动,而驱动则以标准途径拿到板级信息。将软件进行分层设计应该是软件工程最基本的一个思想,如果提炼一个input的核心层出来,把跟Linux接口以及整个一套input事件的汇报机制都在这里面实现,显然是非常好的。在Linux设备驱动框架的设计中,除了有分层设计以外,还有分离的思想。原创 2023-05-14 15:30:00 · 303 阅读 · 0 评论 -
第11章--内存与IO访问
目前,大多数嵌入式微控制器中并不提供I/O空间,而仅存在内存空间。内存空间可以直接通过地址、指针来访问,程序及在程序运行中使用的变量和其他数据都存在于内存空间中。原创 2023-05-11 14:48:29 · 334 阅读 · 0 评论 -
第10章--中断与时钟
所谓中断是指CPU在执行程序的过程中,出现了某些突发事件急待处理,CPU必须暂停当前程序的执行,转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行。根据中断的来源,中断可分为内部中断和外部中断,内部中断来自CPU内部(软件中断指令、溢出、除法错误等),外部中断来自CPU外部,由外设提出请求。根据中断是否可以屏蔽,中断可分为可屏蔽中断和不可屏蔽中断,可屏蔽中断可以通过设置中断控制器寄存器等方法被屏蔽,屏蔽后,该中断不再得到响应,而不可屏蔽中断不能被屏蔽。原创 2023-05-07 14:30:00 · 374 阅读 · 0 评论 -
第9章--异步通知与异步IO
异步通知的意思是:一旦设备就绪,则主动通知应用程序,这一点非常类似于硬件上“中断”的概念。信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。原创 2023-05-04 10:09:46 · 333 阅读 · 0 评论 -
第8章--阻塞与非阻塞IO
阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时,并不挂起,他要么放弃,要么不停地查询,直到可以进行操作为止。原创 2023-04-30 16:00:00 · 62 阅读 · 0 评论 -
第7章--并发控制
并发指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态。在Linux内核中,主要的竞态发生于如下几种情况。解决竞态问题的途径是保证对共享资源的互斥访问,即一个执行单元在访问共享资源的时候,其他的执行单元被禁止访问。原创 2023-04-25 14:00:00 · 54 阅读 · 0 评论 -
第6章--字符设备驱动
file_operations结构体中的成员函数是字符设备驱动程序设计的主题内容,这些函数实际会在应用程序进行Linux的open()、write()、read()、close()等系统调用时最终被内核调用。原创 2023-04-22 14:00:00 · 114 阅读 · 0 评论 -
第5章--文件系统与设备文件
创建参数mode指定新建文件的存取权限,它同umask一起决定文件的最终权限(mode&umask)。打开open函数有两个形式,其中pathname是我们要打开的文件名,flags指定打开的方式。读写参数buf为指向缓冲区的指针,length为缓冲区的大小(以字节为单位)。函数read实现从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。原创 2023-04-18 10:08:50 · 113 阅读 · 0 评论 -
第4章--Linux内核模块
Linux提供了这样的机制,这种机制被称为模块(Module)。模块具有这样的特点。原创 2023-04-10 10:52:14 · 143 阅读 · 1 评论 -
第3章--Linux内核及内核编程
arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。/block:块设备驱动程序I/O调度。/crypto:常见加密和散列算法,以及一些压缩和CRC校验算法。/documentation:内核各部分的通用解释和注释。/drivers:设备驱动程序,每个不同的驱动占用一个子目录。/fs:所支持的各种文件系统。/include:头文件。/init:内核初始化代码。/ipc:进程间通信的代码。/kernel:内核最核心的部分,包括进程调度、定时器等。原创 2023-04-06 10:14:52 · 338 阅读 · 1 评论 -
第2章--驱动设计的硬件基础
目前主流的通用处理器多采用 SoC(片上系统)的芯片设计方法,集成了各种功能模块,每一种功能都是由硬件描述语言设计程序,然后在 SoC 内由电路实现的。中央处理器的体系结构可以分为两类,一类为冯·诺依曼结构,另一类为哈佛结构。冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。而哈佛结构将程序指令和数据分开存储,指令和数据可以有不同的数据宽度。原创 2023-04-03 15:24:31 · 256 阅读 · 1 评论 -
第1章--Linux设备驱动概述
任何一个计算机系统的运转都是系统中软硬件共同努力的结果。对设备驱动最通俗的解释就是“驱使硬件设备行动”。驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA 通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。由此可见,设备驱动充当了硬件和应用软件之间的纽带,应用软件时只需要调用系统软件的应用编程接口(API)就可让硬件去完成要求的工作。原创 2023-04-03 10:41:52 · 143 阅读 · 2 评论