内核 架构
文章平均质量分 91
内核 架构
雪饼android之路
这个作者很懒,什么都没留下…
展开
-
Linux cpuidle framework(4)_menu governor
本文以menu governor为例,进一步理解cpuidle framework中governor的概念,并学习governor的实现方法。在当前的kernel中,有2个governor,分别为ladder和menu(蜗蜗试图理解和查找,为什么会叫这两个名字,暂时还没有答案)。ladder在periodic timer tick system中使用,menu在tickless system中使用。注:有关periodic timer tick和tickless的知识,可参考本站时间子系统的系列文章。转载 2023-12-22 23:00:00 · 69 阅读 · 0 评论 -
Linux cpuidle framework(3)_ARM64 generic CPU idle driver
本文以ARM64平台下的cpuidle driver为例,说明怎样在cpuidle framework的框架下,编写cpuidle driver。另外,本文在描述cpuidle driver的同时,会涉及到CPU hotplug的概念,因此也可作为CPU hotplug的引子。转载 2023-12-21 23:00:00 · 82 阅读 · 0 评论 -
Linux cpuidle framework(2)_cpuidle core
cpuidle core是cpuidle framework的核心模块,负责抽象出cpuidle device、cpuidle driver和cpuidle governor三个实体,并提供如下功能(可参考“Linux cpuidle framework(1)_概述和软件架构”中的软件架构):1)向底层的cpuidle driver模块提供cpudile device和cpuidle driver的注册/注销接口。2)向cpuidle governors提供governor的注册接口。转载 2023-12-19 23:00:00 · 86 阅读 · 0 评论 -
Linux cpuidle framework(1)_概述和软件架构
2: {4: }以蜗蜗之前使用过的一个ARM926的单核CPU为例(内核版本为Linux2.6.23),cpuidle的处理过程是:;系统初始化完成后,将第一个进程(init)变为idle进程,;以下都是在进程的循环中,周而复始…WFI指令虽然简单,却包含了idle处理的两个重点:1)idle进程idle进程的存在,是为了解决“何时idle”的问题。我们知道,Linux系统运行的基础是进程调度,而所有进程都不再运行时,称作cpu idle。但是,怎么判断这种状态呢?转载 2023-12-18 23:00:00 · 52 阅读 · 0 评论 -
CPU idle framework_ARM WFI和WFE指令
在 ARM 架构中,WFI(Wait For Interrupt)和 WFE(Wait For Event)是两个指令,用于处理器的低功耗和休眠模式。WFI 指令用于将处理器进入低功耗模式,直到中断信号到来时才被唤醒。当执行 WFI 指令时,处理器将停止指令的执行,停止取指,并且进入休眠状态。当一个中断被触发时(如外部中断、定时器中断等),处理器会退出低功耗模式,继续执行后续指令。WFE 指令用于将处理器进入低功耗模式,直到某个事件发生时才被唤醒。原创 2023-12-12 23:00:00 · 1214 阅读 · 0 评论 -
Linux common clock framework(3)_实现逻辑分析
和fixed rate类似,不再一一说明。转载 2023-12-05 23:45:00 · 151 阅读 · 0 评论 -
Linux电源管理(7)_Wakeup events framework
仔细推敲一下,上面所讲的同步问题包括两种情况:情况1:内核空间的同步wakeup events产生后,通常是以中断的形式通知device driver。driver会处理events,处理的过程中,系统不能suspend。注 1 :同步问题只存在于中断开启的情况,因为若中断关闭,就不会产生wakeup events,也就不存在同步的概念。情况2:用户空间的同步一般情况下,driver对wakeup events处理后,会交给用户空间程序继续处理,处理的过程,也不允许suspend。转载 2023-07-03 21:45:00 · 641 阅读 · 0 评论 -
Linux kernel的中断子系统之(一):综述
对于CPU1而言,在执行该中断的handler的时候,将Interrupt processor target register中CPU0的bit为设置为1,disable本CPU的比特位,这样在下次中断发生的时候,interupt controller就把中断送给了CPU0。如果送达了多个cpu,实际上,也应该只有一个handler实际和外设进行交互,另外一个cpu上的handler的动作应该是这样的:发现该irq number对应的中断已经被另外一个cpu处理了,直接退出handler,返回中断现场。转载 2023-03-23 00:00:00 · 176 阅读 · 0 评论 -
linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合
不过,实际情况却不是这么简单,它们之间有着较为紧密的耦合(看一看kernel中pinctrl和gpio相关的实现就知道了)。本文将对这种耦合进行一个简单的分析,解释为什么要这样设计。转载 2023-02-25 11:45:00 · 136 阅读 · 0 评论 -
【Linux kernel】linux内核中的GPIO系统之(4):pinctrl驱动的理解和总结
本站之前的三篇文章[1][2][3]介绍了pin controller(对应的pin controller subsystem)、gpio controller(对应的GPIO subsystem)有关的基本概念,包括pin multiplexing、pin configuration等等。本文将基于这些文章,单纯地从pin controller driver的角度(屏蔽掉pinctrl core的实现细节),理解pinctrl subsystem的设计思想,并掌握pinctrl驱动的移植和实现方法。转载 2023-02-24 22:30:00 · 327 阅读 · 0 评论 -
【Linux kernel】Linux内核中的GPIO系统之(3):pin controller driver代码分析
定义 S3C2416 pin controller自己的属性……gpf {…… }其实S3C2416 pin controller定义了gpa到gpm共计11个sub node,每个sub node是描述S3C2416 GPIO controller的各个bank信息。之所以分成bank,主要是把特性相同的GPIO进行分组,方便控制。例如:这些bank中,只有GPF和GPG这两个bank上的引脚有中断功能,其他的都没有。转载 2023-02-13 22:00:00 · 442 阅读 · 0 评论 -
【Linux kernel】linux内核中的GPIO系统之(2):pin control subsystem
一般而言,学习复杂的软件组件或者软件模块是一个痛苦的过程。我们可以把我们要学习的那个软件block看成一个黑盒子,不论里面有多么复杂,第一步总是先了解其功能和外部接口特性。如果你愿意,你可以不去看其内部实现,先自己思考其内部逻辑,并形成若干问题,然后带着这些问题去看代码,往往事半功倍。功能规格。pin control subsystem的主要功能包括:(A)管理系统中所有可以控制的pin。在系统初始化的时候,枚举所有可以控制的pin,并标识这些pin。转载 2023-02-07 22:00:00 · 238 阅读 · 0 评论 -
【Linux kernel】linux内核中的GPIO系统之(1):软件框架
作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务。对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非常简单的任务,例如GPIO driver、LED driver。往往CPU datasheet的关于GPIO或者IO ports的章节都是比较简单的,非常适合刚入行的工程师。虽然GPIO子系统相关的硬件比较简单,没有复杂的协议,不过,对于软件抽象而言,其分层次的软件思想是每个嵌入式软件工程师需要掌握的内容。转载 2023-02-02 22:00:00 · 327 阅读 · 0 评论 -
【Linux kernel】Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953实例分析篇)
iqs263节点中的pinctrl-0 属性指向了表明其io口属性的节点为iqs263_irq_config,相关代码也在2.3.1指示的msm8953-pinctrl.dtsi文件中。i2c_8节点中的pinctrl-0指向了定义其io口的节点i2c_8_active和i2c_8_sleep,代码如下可见该i2c的IO口为Gpio98和Gpio9。在前两篇中我们了解了DTS的背景基础知识以及发挥作用的流程,这篇文章我们以高通的MSM8953平台为例来添加一个基础的i2c设备(包含一个gpio中断)。转载 2023-01-12 23:30:00 · 561 阅读 · 0 评论 -
【Linux kernel】Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)
一个dts文件确定一个项目,多个项目可以包含同一个dtsi文件。找到该项目对应的dts文件即找到了该设备树的根节点。转载 2023-01-12 00:00:00 · 875 阅读 · 0 评论 -
【Linux kernel】Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)
DTS即Device Tree Source 设备树源码, Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的platform设备、 resource、i2c_board_info、spi_board_info以及各种硬件的platform_data,这些板级细节代码对内核来讲只不过是垃圾代码。转载 2023-01-11 22:30:00 · 524 阅读 · 0 评论 -
【Linux kernel】linux设备树笔记--dts基本概念及语法
ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data。转载 2023-01-10 20:00:00 · 834 阅读 · 0 评论 -
【Linux kernel】Linux内核的整体架构
本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。转载 2022-12-01 00:00:00 · 148 阅读 · 0 评论