![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux基础
文章平均质量分 91
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抢占是如何发生的(3)?
参考博客:ARM V8指令集https://news.eda365.com/tech/cxsheji/12008119151469.htmlhttps://news.eda365.com/tech/cxsheji/12008119151469.htmlARM V8异常Linux ARMv8 异常向量表-BugMan-ChinaUnix博客本章接着《http://blog.chinaunix.net/uid-69947851-id-5830546.html[注]本文主要紧接上一篇文章,主要想说原创 2022-05-02 12:20:37 · 440 阅读 · 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 评论 -
【编译错误】:对‘__aeabi_idivmod未定义的引用‘,对‘__aeabi_idiv‘未定义的引用
参考博客:解决undefined reference to `__aeabi_uidivmod\'和undefined reference to `__aeabi_uidiv\'错误-草根老师-ChinaUnix博客自己写裸机驱动程序时,使用了除法,在链接的时候出了如下错误:使用的编译器是:后来上网搜了一下原因,由于编译器不支持除法运算,但是也没有搜到解决方案。看了一下http://blog.chinaunix.net/uid-26833883-id-3282967.html1. 问题背景及...原创 2022-02-27 12:43:45 · 1820 阅读 · 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 评论 -
系统初始化函数集(subsys_initcall)和初始化段应用
参考博文:https://blog.csdn.net/jackaly/article/details/7426353https://blog.csdn.net/qlexcel/article/details/926567971.函数定义(subsys_initcall/late_initcall是什么)内核代码4.14.99/include/linux/init.h,需要注意的是这里只针对build-in code,所以代码加上了#ifndef MODULE的限制我们用C代码原创 2021-02-07 22:44:25 · 764 阅读 · 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 评论 -
痛苦之旅三:内核中设备树的操作函数
本小节总结一下内核中设备树的操作函数一.设备树的操作函数汇总在include/linux目录下,有很多of_开头的文件,列表和描述总结如下:原创 2020-08-27 07:33:43 · 111 阅读 · 0 评论 -
痛苦之旅[附]:转韦东山老师设备树视频笔记整理
转一个学习大纲备用原文链接:https://mp.csdn.net/console/editor/html/107830044原创 2020-08-06 07:28:24 · 319 阅读 · 0 评论 -
痛苦之旅二:linux总线设备驱动模型之匹配函数
本小节想重点说一下platform device和platform driver是如何匹配上的一. platform_match函数位置:drivers/base/platform.c函数描述:platform device平台设备ID按照如下格式:<name><instance>,其中name代表该平台设备类型的简述,例如pci等等;instance为该平台设备的编号,例如0 1 2等等;platform driver平台驱动的ID都是按照name来编排的,所以按照pl原创 2020-07-28 23:38:29 · 302 阅读 · 1 评论 -
痛苦之旅一:linux总线设备驱动模型概述
一.什么是总线设备驱动模型简而言之,linux驱动非常重视软件的可重用和跨平台的能力,最好一行不改就能在任何一个平台上跑起来,基于这样的事实,驱动中如果集成所有平台的设备信息显然太过臃肿,驱动也会显得很奇怪,所以把设备信息分离出去,设备就负责表示设备的硬件信息和资源,驱动就负责用标准化的手法得到设备的资源,总线就负责匹配设备和驱动二.platform设备驱动1.基本概念2.相关结构体用结构体struct platform_device来描述一个平台设备struct p.原创 2020-07-25 22:24:27 · 128 阅读 · 1 评论 -
linux内核版本号命名
转载博客,有助于一些日常知识积累转载地址:http://www.cnblogs.com/hazir/p/linux_kernel_version_numbering.htmlLinux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版、偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定。本文就简单总结一下关于 Linux 内核版本号那点事: 从内核第一个0.01 版本发布到 1.0 版本。接下来是 0..转载 2020-07-25 16:37:26 · 638 阅读 · 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 评论 -
Cache用法小结
把最近接触到的cache有关的信息总结到这里,供日后查看一.Cache基本概念What is cache?Cache是用来对内存数据的缓存。CPU要访问的数据在Cache中有缓存,称为“命中” (Hit),反之则称为“缺失” (Miss)。CPU访问它的速度介于寄存器与内存之间(数量级的差别)。实现Cache的花费介于寄存器与内存之间参考博客:https://www.cnb...原创 2020-04-08 11:03:45 · 1551 阅读 · 0 评论 -
【Linux】线程同步技术之二:条件变量(condition variable)
1.线程同步有两种技术第一种是互斥锁,确保只有一个线程对临界资源的访问,但是由于线程的并发性(<Linux_Unix系统编程手册(上)>P514:调用pthread_create()后,应用程序无从确定系统接着会调度哪一个线程来使用CPU资源,在多处理器系统中,多个线程可能会在不同CPU上同时执行),无法确定线程运行的先后顺序第二种是条件变量,(<Linux_Unix系统...原创 2019-05-12 18:21:58 · 387 阅读 · 0 评论 -
【string总结之四】C语言strcmp/strncmp
C语言string的几个函数虽然比较简单, 但是还是想总结在这里, 以免每次用到都要去查一下strtol,strstr,strcat/strncat,strcpy/strncpy,strcmp/strncmp1.strcmp【头文件与函数原型】#include <string.h>int strcmp(const char *s1, const char *s2);...原创 2019-04-30 07:35:53 · 464 阅读 · 0 评论 -
【string总结之三】C语言strcat/strncat
C语言string的几个函数虽然比较简单, 但是还是想总结在这里, 以免每次用到都要去查一下strtol,strstr,strcat/strncat,strcpy/strncpy,strcmp/strncmp1.strcat【头文件与函数原型】#include <string.h>char *strcat(char *dest, const char *src);...原创 2019-04-28 22:45:18 · 340 阅读 · 0 评论 -
【string总结之二】C语言strcpy/strncpy
C语言string的几个函数虽然比较简单, 但是还是想总结在这里, 以免每次用到都要去查一下strtol,strstr,strcat/strncat,strcpy/strncpy,strcmp/strncmp1.strcpy【头文件与函数原型】#include <string.h>char *strcpy(char *dest, const char *src);...原创 2019-04-27 11:32:23 · 254 阅读 · 0 评论 -
【string总结之一】C语言strtol函数
C语言string的几个函数虽然比较简单, 但是还是想总结在这里, 以免每次用到都要去查一下strtol,strstr,strcat/strncat,strcpy/strncpy,strcmp/strncmp1.strtol【头文件与函数原型】:#include <stdlib.h>long int strtol(const char *nptr, char **e...原创 2019-04-27 10:32:39 · 848 阅读 · 0 评论 -
Linux拷贝命令cp的一点总结(附cannot overwrite directory xxx with non-directory)
昨天验证一个补丁,补丁是以old/new形式给出的,需要自行合入到代码工程中去,得到建议说可以把new文件夹中的东西拷贝到工程中即可,但对比了new文件夹与工程中对应文件夹的内容,涉及到三方面1.new文件夹中有新增的独有文件2.new文件夹与工程同名代码部分需要覆盖3.原工程文件夹独有的文件需要保留忽然一下没了头绪,因为发给客户的补丁不能出错,怕自己对比来对比去最终晕头转向,又得...原创 2018-12-22 16:53:09 · 19729 阅读 · 1 评论