03 2023 档案
摘要:1 并发和竞态 1.1 简介 设备在运行的过程中存在多个进程对资源的并发访问 多个执行单元同时,并行的执行。并发事件对共享资源的访问(硬件资源,全局变量,静态变量等),很容易导致设备出现竞态。 竞态的出现会导致设备出现异常 1.2 单核和多核(SMP)并发下的竞态 1.3 总结 关于共享资源的这部分
        阅读全文
                
摘要:代码 编程指南 确定物理地址 确定是否使用cache、buffer 建立映射关系 1 引入 应用程序与驱动程序之间进行数据传递时常使用read,write 此实现方法本质上是在用户态的buffer与内核态的buffer之间进行了一次copy。此方法本质上没有什么问题,不过在数据量比较大的时候效率就会
        阅读全文
                
摘要:代码 1 概述 避免workqueue中存在多个work会导致后面的work执行存在受前面工作的影响 在中断下半部专门申请一个内核线程来处理这个事件,这个内核线程专门用于此中断 1.1 内部机制 设备发生中断时内核会调用handler处理中断事件(如果中断函数存在)。中断处理完成后,如果有需要的中断
        阅读全文
                
摘要:代码 编程指南 构造workqueue 将workqueue放入队列,开始调度 1 工作机制 内核线程(while(1))中对去判定是否存在workqueue;如果不存在择休眠; 如果存在workqueue则等待wake up事件唤醒workqueue,然后执行workqueue中的fun 1.1 
        阅读全文
                
摘要:代码 1 tasklet调度机制 中断上半部执行完后,使能调度下半部; 中断下半部softirq_init中会调用asklet_action,在此函数中会去遍历链表检测符合条件的tasklet选出执行 2 常用API和数据结构 2.1 tasklet_struct struct tasklet_st
        阅读全文
                
摘要:第6课.定时器 代码 1 定时器的时间单位 在内核中.config文件中CONFIG_HZ配置为每秒linux的时钟滴答次数,没发生一次全局变量jiffies便会增加1 在日常使用中使用HZ表示一秒 2 常用函数及其数据结构 struct timer_list *timer (timer_list结
        阅读全文
                
摘要:1. 阻塞与非阻塞的实现和使用 1.1 open open文件的时候选择0_NONBLOCK使用非阻塞方式打开文件;默认为阻塞 1.2 fcntl 通过fcntl直接修改文件的flag为阻塞或非阻塞 ==注意:== ==对于普通文件、块设备非阻塞不请作用== ==对于字符设备非阻塞起作用的前提是驱动
        阅读全文
                
摘要:第5课.异步通知 代码 编程指南 应用态 在应用态使用signal函数处理 应用态需要打开对应的驱动 将进程ID传递给驱动(getpid) 驱动 记录pid 使能file中f_flags为FASYNC 事件触发时通过kill_fasync发出信号 1. 异步通知原理 应用程序不休眠,不阻塞。事件触发
        阅读全文
                
摘要:第4课.poll机制 代码 1 poll工作机制 poll允许进程对一个或多个文件做非阻塞的读取或者写入。 引用百问网的图片 需要注意的是步骤四与五,应用程序调用poll函数在文件系统层sys_poll调用驱动的poll接口:将线程挂入wait队列,并返回poll的事件类型。 sys_poll会根据
        阅读全文
                
摘要:第3课.Linux异常处理体系结构 源码 编程指南 需要定义一个等待队列(DECLARE_WAITQ_UEUE_HEAD) 将wait_event线程放入queue 1.休眠唤醒 1.1 休眠函数 文件路径include\linux\wait.h | 函数 | 说明 | | : | : | | wa
        阅读全文
                

 浙公网安备 33010602011771号
浙公网安备 33010602011771号