![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动学习
文章平均质量分 93
Andy Pines
你猜啊
展开
-
为什么Linux不支持中断嵌套
参考博客与资料FreeRTOS系列(1):基础知识——中断嵌套_猪哥-嵌入式的博客-CSDN博客_中断嵌套Linux中断管理 (1)Linux中断管理机制 - ArnoldLu - 博客园Linux支持中断嵌套吗?_denglin12315的博客-CSDN博客_linux中断嵌套linux kernel的中断子系统之(三):IRQ number和中断描述符1. 什么是中断嵌套中断嵌套指中断系统正在执行一个中断服务L时,有另一个优先级更高的中断H触发,这时中断系统会暂时中止当前正在执行原创 2022-05-28 12:41:14 · 1980 阅读 · 0 评论 -
中断上下文中的preempt count
参考博客:Linux上下文切换[转]_thonmin的博客-CSDN博客_linux 上下文切换中断子系统1. 背景<linux kernel的中断子系统之八:softirq>中讲到:softirq在同一个CPU上是串行的,这点体现在代码的哪里呢?./kernel/softirq.cwowo科技的文章中讲了两种场景,其中中断嵌套由于Linux不支持,所以暂时不讨论,只讨论下面的一个场景: softirq中的中断假设一个中断下半部softirq(随便什么..原创 2022-05-25 23:13:57 · 379 阅读 · 0 评论 -
Linux抢占是如何发生的(2)?
参考博客:Linux CFS调度器之选择下一个需要调度的进程_liuhangtiant的博客-CSDN博客前言CFS调度器选择下一个要执行的进程时,基本原则是选择vruntime最小的进程,vruntime小意味着应该受到CPU的优待。但是在某些情况下,会对该原则有所违背,比如某个进程睡眠了一段时间,时间到了以后理应尽可能快的被调度,这个过程可能会导致当前进程被抢占,好端端的被抢占了,CPU在补偿了刚刚醒来的进程后,理应再补偿下被抢占的进程。发生在进程唤醒过程中的抢占事件进程睡眠和进程唤醒的...htt原创 2022-04-26 22:13:14 · 241 阅读 · 0 评论 -
Linux抢占是如何发生的?
参考博客:抢占是如何发生的 - 云+社区 - 腾讯云抢占是如何发生的。相应的调度器核心层代码是sched_fork(),它再通过调度类的task_fork方法触发抢占:4进程修改nice值的时候如果进程修改nice值导致优先级高于CPU上的当前进程,也会触发抢占。执行抢占的时机触发抢占通过设置进程的TIF_NEED_RESCHED标志告诉调度器需要进行抢占操作了,但是真正执行抢占还要等内核代码发现这个标志才行,而内核代码只在设定的几个点上检查TIF_NEED_RESCHED标志,这也就是执行抢占的时机。原创 2022-03-12 18:00:39 · 2443 阅读 · 0 评论 -
Race condition between wait_event and wake_up
参考资料 Stack Overflowlinux kernel - Wait queue and race condition - Stack Overflowhttps://stackoverflow.com/questions/62887408/wait-queue-and-race-conditionlinux kernel - race condition between wait_event and wake_up - Stack Overflowhttps://stackoverflow.c原创 2022-03-04 22:16:39 · 162 阅读 · 0 评论 -
互斥与同步之完成量
参考资料 《深入Linux设备驱动程序内核机制》参考资料《Linux Device Driver 3rd Edition》参考资料《Linux设备驱动开发详解4.0内核》参考资料《Documentation\scheduler\completion.txt》1. 完成量概述1.1 完成量与等待队列的关系完成量completion是基于等待队列实现的内核同步机制1.2 什么是完成量完成量用于一个执行单元等待另一个执行单元执行完成某事,该机制用来在多个执行路径之间作同步使原创 2021-11-17 22:40:02 · 426 阅读 · 0 评论 -
Linux内核进程栈的两种架构
参考博文:Linux进程内核栈与thread_info结构详解--Linux进程的管理与调度(九)_OSKernelLAB(gatieme)-CSDN博客_thread_info浅析Linux下的task_struct结构体_lc_29503203的博客-CSDN博客_task_structlinux 进程内核栈 - 知乎ThreadInfo结构和内核栈的两种关系_半月旋空-CSDN博客一. 内核进程栈是什么1. 什么是进程进程是程序的一个执行实例,进程是一种动态描述,但需要注意的.原创 2021-09-24 22:28:09 · 385 阅读 · 0 评论 -
为什么拥有自旋锁的代码段不能睡眠?
参考博文:宋宝华: 是谁关闭了Linux抢占,而抢占又关闭了谁?Linux中的preempt_count - 知乎[宏]preempt_disable - DoOrDie - 博客园LInux中ThreadInfo中的preempt_count字段 - jack.chen - 博客园Linux进程内核栈与thread_info结构详解--Linux进程的管理与调度(九)_OSKernelLAB(gatieme)-CSDN博客_thread_infolinux - Why can't原创 2021-09-21 10:34:27 · 1419 阅读 · 0 评论 -
Linux中断管理(二):irq_domain(2):结构体与使用方法
参考文档:<IRQ-domain.txt>http://www.wowotech.net/linux_kenrel/irq-domain.htmlhttps://blog.csdn.net/weixin_41028621/article/details/1014482271.irq_domain的数据结构./include/linux/irqdomain.hstruct irq_domain { struct list_head link; const char原创 2021-03-12 00:39:04 · 328 阅读 · 1 评论 -
Linux中断管理(二):irq_domain(1):概念
参考文档/博客:<IRQ-domain.txt>http://www.wowotech.net/linux_kenrel/irq-domain.htmlhttps://blog.csdn.net/weixin_41028621/article/details/101448227一.软硬件中断号在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断:IRQ number(软件/逻辑/虚拟中断号) CPU需要为每一个外设中断编号,我们称之IR...原创 2021-03-02 00:04:44 · 290 阅读 · 0 评论 -
Linux中断管理(一):设备树中的中断描述
参考资料:<devicetree-specification-changebars-v0.3>这个系列主要想研究一下linux的中断管理机制,想从设备树中的中断描述,内核对irq domian的管理及软硬件中断的映射,驱动注册中断,中断来了后怎么处理中断这几个维度下手研究1.DTS中的中断树介绍设备树中有一颗存在的中断树,它描述了该硬件平台中的中断连接与层级关系 中断源与中断控制器的物理连接是用interrupt-parent这个属性来描述,如果某个中断源没有这个属性,那么原创 2021-02-16 11:56:51 · 780 阅读 · 0 评论 -
同步阻塞型IO之等待队列
写在前面:等待队列是linux内核中一种重要的机制,常见于各种内核或者驱动代码中,由于常见常忘,特写一个博客记录于此参考博客:https://www.cnblogs.com/hueyxu/p/13745029.html参考书籍:<深入Linux设备驱动程序内核机制>1.Linux等待队列概述以进程阻塞和唤醒的过程为例,等待队列的使用场景可以简述为:进程 A 因等待某些资源(依赖进程 B 的某些操作)而不得不进入阻塞状态,便将当前进程加入到等待队列 Q 中。进程 B 在一原创 2021-01-17 17:53:45 · 354 阅读 · 1 评论 -
SPI学习(三):SPI协议波形
写在前面:上一小节介绍了SPI的基本工作原理与极性相位等知识,这一小结介绍波形由于我实际用到的IP是ARM PrimeCell SSP(PL022),所以会以这个IP为主,也会对比《SPI Block Guide V04.01》一.PL022支持的三种帧格式介绍一共有三种帧格式可选:TI/SPI/NSM,一般用SPI很多(这里不关注NSM),简单介绍一下TI模式:SSI(Synchronous Serial Interface)由TI公司定义的接口协议标准SPI(Serial Perip原创 2020-11-28 18:29:46 · 17421 阅读 · 0 评论 -
SPI学习(四):SPI软件框架
写在前面:要学习SPI,首先还是要了解SPI的软件架构,我了解到的操作SPI的软件,一种是操作寄存器的方式,一种是使用Linux标准化的方式内容参考以下博客及内核文档linux-4.14.99\linux-4.14.99\Documentation\spihttps://blog.csdn.net/xiezhi123456/article/details/80115970一.SPI驱动的软件架构在内核SPI驱动的软件架构中,进行了合理的分层和抽象,如下图所示:1、SPI控制器驱动原创 2020-11-21 11:08:50 · 1942 阅读 · 0 评论 -
SPI学习(二):SPI工作机制与协议解析
写在前面,SPI工作机制无非就是想介绍SPI模块内置的移位寄存器,这一部分可以看下面博客,里面有时序图与动图,可以很方便理解移位https://blog.csdn.net/qq_25814297/article/details/103934794SPI协议部分重点向介绍CPOL和CPHA,这一部分可以看下面博客https://www.cnblogs.com/shangdawei/p/4752476.html一.SPI工作机制1.SPI内部原理图SPI内部原理图如下图所示,这里参考《S原创 2020-11-15 16:31:27 · 3486 阅读 · 0 评论 -
SPI学习(一):SPI简介与硬件拓扑
一.SPI简介关于这一点,参考的是内核的标准文档:documentation/spi/spi-summary:原文:The "Serial Peripheral Interface" (SPI) is a synchronous four wire serial linkused to connect microcontrollers to sensors, memory, and peripherals.It's a simple "de facto" standard, not compl原创 2020-11-14 16:14:54 · 4707 阅读 · 2 评论 -
printk学习之(三):你还在用printk吗?
1.printk的继任者pr_xxx系列函数前面两节我们介绍了printk的基本原理和printk在驱动调试中的用法,现在我们看一下printk的继任者,pr_xxx系列函数可以看到,如果没有定义pr_fmt(fmt),那么pr_fmt(fmt)就是fmt,这样的话pr_xxx系列函数仅仅是一个printk的简单封装但是精髓在于可以自己定义pr_fmt(fmt),让我们封装成自己的打印函数,方便调试... ...#ifndef pr_fmt#define pr_fmt(fmt) fmt原创 2020-06-21 10:14:37 · 394 阅读 · 0 评论 -
printk学习之(二):调试
1.printk日志级别的来源其实printk的基本原理我是通过韦东山的视频和一篇CSDN博客了解到的博客链接贴在下面:https://blog.csdn.net/W1107101310/article/details/80526039博客写得很详细,该博客主要分为如下几个部分:printk原理/控制台的选择/printk日志级别的设置下面依次说一下这几个宏的含义:console_loglevel:控制台当前日志级别,从上一篇printk原理中知道,只有printk自带.原创 2020-06-18 23:30:11 · 197 阅读 · 0 评论 -
printk学习之(一):基本原理
1.printk的基本原理其实printk的基本原理我是通过韦东山的视频和一篇CSDN博客了解到的博客链接贴在下面:https://blog.csdn.net/W1107101310/article/details/80526039博客写得很详细,该博客主要分为如下几个部分:printk原理/控制台的选择/printk日志级别的设置最近我在搞问题的时候,代码中涉及到printk的耗时问题,胡跟我说:将打印级别调一调,不显示到串口就不耗时了那么我的问题是:调整打印级别,那么prin原创 2020-06-16 23:00:55 · 909 阅读 · 0 评论 -
【转】Linux inode详解
1.内核中的inode数据结构(LDD3,chapter3-3.3)struct inode { umode_t i_mode;//文件的访问权限(eg:rwxrwxrwx) unsigned short i_opflags; kuid_t i_uid;//inode拥有者id kgid_t i...转载 2020-04-29 07:14:14 · 1056 阅读 · 0 评论 -
驱动mmap学习记录
最近学习驱动下面的内存映射章节,学习了mmap的机制,记录下来mmap的大概原理就是由内核负责分配一段MMAP区域,然后由驱动调用remap_pfn_range函数将其与物理内存映射起来,实际上自己理解最终实现了用户空间(MMAP区域),内核虚拟空间,物理内存三者的对应映射觉得写得好的博客罗列如下:https://blog.csdn.net/weixiuc/article/detail...原创 2019-07-06 11:12:57 · 311 阅读 · 0 评论