Linux设备驱动开发详解
文章平均质量分 87
ztt0tian
这个作者很懒,什么都没留下…
展开
-
第七章 Linux设备驱动开发中的并发控制
7.1并发和竞态并发 :多个执行单元同时、并行被执行,而并发的执行单元对共享组员的访问很容易导致竞态竞态发生情况:1.对称多处理器(SMP)的多个CPU2.单CPU内进程与抢占它的进程 一个进程在内核执行的时候可能耗完了自己的时间片,也可能被另一个高优先级进程打断,而进程与抢占它的进程访问共享资源的情况3.中断与进程之间 中断可以打断正在执行的进程,且此时中断服务程序访问进程正在访问的...原创 2018-05-28 17:12:30 · 184 阅读 · 0 评论 -
第10章 中断 时钟
中断是指CPU在执行程序的过程中,出现了某些突发事件急待处理,CPU必须暂停当前程序的执行,转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行。根据中断的来源,中断可分为内部中断和外部中断,内部中断的中断源来自CPU内部(软件中断指令、溢出、除法错误等,例如,操作系统从用户态切换到内核态需借助CPU内部的软件中断),外部中断的中断源来自CPU外部,由外设提出请求。根据中断是否可以屏蔽,中...原创 2018-05-31 15:46:42 · 315 阅读 · 0 评论 -
container_of() offsetof()函数个人理解
这是在linux-source-4.13.0/include/linux/kernel.h中container_of()函数的定义:#define container_of(ptr, type, member) ({ \ void *__mptr = (void *)(ptr); ...原创 2018-05-31 13:30:35 · 1348 阅读 · 0 评论 -
第9章 异步通知和异步I/O
1.概念与作用异步通知:一单设备就绪,则主动通知应用程序,此时应用程序不需要查询设备状态。类似于“中断”概念,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。阻塞、非阻塞、异步通知 这几种本身没有优劣 应根据不同的应用场景合理选择、2.Linux异步通知编程 2.1Linux信号 参考: https://www.linuxidc.com/Linux/2016-...原创 2018-05-30 15:27:46 · 257 阅读 · 0 评论 -
Linux驱动开发详解源代码中的疑问之处探究-(九)
1.signal_test.c#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>#include <fcntl.h>#include <signal.h>#include <unistd.h>#define MAX_LEN 100void i...原创 2018-05-30 15:20:55 · 255 阅读 · 0 评论 -
第8章 阻塞与非阻塞I/O
阻塞操作:在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待条件被满足。非阻塞操作:在不能进行设备操作时,并不挂起,要么放弃要么不停地查询,直至可以进行操作为止。唤醒进程的地方最大可能发生在中断里面,因为在硬件资源获得的同时往往伴随着一个中断。8.1等待队列 实现阻塞进程的唤醒1.定义“等待队列头...原创 2018-05-29 19:10:58 · 442 阅读 · 0 评论 -
Linux驱动开发详解源代码中的疑问之处探究-(八)
1.DECLARE_WAITQUEUE(wait, current);//通过DECLARE_WAITQUEUE宏将等待队列项初始化成对应的任务结构,并且用于连接的相关指针均设置为空。其函数宏定义在wait.h中#define __WAITQUEUE_INITIALIZER(name, tsk) { \ .private = tsk, \ .func = default_wa...原创 2018-05-29 16:17:48 · 376 阅读 · 0 评论 -
第六章 字符设备
记录一下 建立一个简单的字符设备的编码过程前提准备:已经编译好的Linux内核进入../drivers/char/目录这里存放着这字符设备驱动mkdir globalmem 创建一个我们新建驱动的目录并进入新建globalmem.c文件,清单如下#include <linux/module.h>#include <linux/fs.h>#include <linu...原创 2018-05-28 17:09:26 · 294 阅读 · 0 评论 -
file_operations、file、inode
file_operationsstruct file_operations { struct module *owner;//一个指向拥有这个结构的模块的指针. 这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 <linux/module.h> 中定义的宏. loff_t (*lls...原创 2018-07-11 10:15:09 · 621 阅读 · 0 评论