自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (4)
  • 收藏
  • 关注

转载 linux cpufreq framework(5)_ARM big Little driver

也许大家会觉得奇怪:为什么Linux kernel把对ARM big·Lttile的支持放到了cpufreq的框架中?众所周知,ARM的big·Little架构,也称作HMP(具体可参考“Linux CPU core的电源管理(2)_cpu topology”中相关的介绍),通过在一个chip中封装两种不同类型的ARM core的方式,达到性能和功耗的平衡。

2024-02-26 21:45:00 49

转载 linux cpufreq framework(4)_cpufreq governor

最后,我们介绍一下kernel中常见的cpufreq governor。性能优先的governor,直接将cpu频率设置为policy->{min,max}中的最大值。功耗优先的governor,直接将cpu频率设置为policy->{min,max}中的最小值。由用户空间程序通过scaling_setspeed文件修改频率。4)Ondemand根据CPU的当前使用率,动态的调节CPU频率。类似Ondemand,不过频率调节的会平滑一下,不会忽然调整为最大值,又忽然调整为最小值。

2024-02-23 22:00:00 60

转载 linux cpufreq framework(3)_cpufreq core

前文(Linux cpufreq framework(2)_cpufreq driver)从平台驱动工程师的角度,简单的介绍了编写一个cpufreq driver的大概步骤。但要更深入理解、更灵活的使用,必须理解其内部的实现逻辑。因此,本文将从cpufreq framework core的角度,对cpufreq framework的内部实现做一个简单的分析。

2024-02-21 23:00:00 48

转载 Linux cpufreq framework(2)_cpufreq driver

本文从平台驱动工程师的角度,介绍怎么编写cpufreq驱动。

2024-02-20 23:45:00 48

转载 linux cpufreq framework(1)_概述

本文介绍了cpufreq framework的基本情况,后面通过以下的文章,分析其它内容:linux cpufreq framework(2)_cpufreq driver,从平台驱动工程师的角度,介绍怎么编写cpufreq驱动;linux cpufreq framework(3)_cpufreq core,分析cpufreq的内部实现,并总结cpufreq提供的sysfs接口,介绍怎么通过sysfs,控制系统的调频行为;

2024-02-20 20:45:00 44

转载 Linux电源管理(14)_PM OPP Interface

当前复杂的SoCs都包括多个协同工作的子模块。根据具体的应用场景,很多子模块(蜗蜗注:典型的例子是 CPU )并不需要一直工作在最高的频率上。因此SoC中的子模块划分为不同的domains,允许一些domains在较低的电压 / 频率下工作,而另一些在较高的电压 / 频率下工作。domain中的设备支持的所有频率和电压的组合,称作Operating Performance Points,简称为OPPs。注1:为什么一定是频率和电压的组合?因为频率高低决定器件的工作性能,降低性能的目的是节省功耗。

2024-02-03 00:00:00 64 1

转载 Linux电源管理(12)_从设备驱动的角度看电源管理

相信工作稍微久一点的linux驱动工程师都深有体会:在旧时光里,实现某一个设备的电源管理功能,是非常简单的一件事情。大多数设备都被抽象为platform设备,driver只需要提供suspend/resume/shutdown等回调函数,并注册到kernel即可。kernel会在系统电源状态切换的过程中,调用driver提供的回调函数,切换设备的电源状态。但是在新时代中,设备电源管理有关的操作,被统一封装在struct dev_pm_ops结构中了。

2024-01-23 23:00:00 126

转载 AndroidT(13) init 进程 -- second stage init 中的 Epoll (三)

可见使用了 Epoll 后,只要简单的几个步骤即可,作为框架使用还是相当方便的,其中隐藏了 epoll 的数据构造,用户只要提供 监听对象和对于的触发方法即可。不过值得注意的是,这是单线程的,如果注册太多的监听对象,或者某一个处理方法中耗时过长,还是相当影响其他监听事件的处理的。Epoll 实例可以监听文件描述符的输入/输出事件,例如,当用户输入数据或应用程序读取数据时。当发生输入/输出事件时,Epoll 实例会通知相应的应用程序或进程进行处理。

2023-12-29 22:00:00 75

转载 AndroidT(13) init 进程 -- first stage init 的初始化 (二)

第一阶段的 init 工作主要用于读取系统启动阶段需要的配置信息(例如 linux的bootconfig,cmdline等配置信息)、挂载文件系统、安装 kernel 中的模块驱动,最后就是启动第二阶段的 init 来进行 Android 系统相关的组件。第一阶段的 init 被编译为静态的可执行程序,位于 ramdisk 中。在 kernel 启动后该 init 应用程序则会被运行。

2023-12-28 23:00:00 121

转载 【Android】AndroidT(13) init 进程 -- first stage init 的启动(一)

第一阶段的 init 工作主要用于读取系统启动阶段需要的配置信息(例如 linux的bootconfig,cmdline等配置信息)、挂载文件系统、安装 kernel 中的模块驱动,最后就是启动第二阶段的 init 来进行 Android 系统相关的组件。第一阶段的 init 被编译为静态的可执行程序,位于 ramdisk 中。在 kernel 启动后该 init 应用程序则会被运行。

2023-12-27 23:45:00 83

原创 【Android】在一个已经启动的Android系统中,怎么查看它kernel CONFIG的状态,是否使能?

在这种情况下,你可能需要通过其他方法,如查看 /proc/config.gz 文件所在的 /boot 目录下的 config-* 文件(例如,/boot/config-$(uname -r)),或者查看内核源代码中的配置文件来获取相关信息。在一个已经启动的 Android 系统中,你可以通过读取 /proc/config.gz 文件来查看内核配置(kernel config)的状态。该文件包含内核编译时使用的配置信息,其中也包括是否启用了某个特定的配置选项。这将输出内核配置的文本内容。

2023-12-27 23:15:00 457

原创 【Android】 Generic Boot Partition

在 Android 12 中,通用boot映像称为 通用内核映像 (GKI),包含通用 ramdisk 和 GKI 内核。对于搭载 Android 13 的设备,通用 ramdisk 将从boot.img中删除并放置在单独的init_boot.img中。此更改使boot.img仅包含 GKI 内核。

2023-12-27 23:00:00 1049

原创 【Android】init 进程 -- ramdisk_node_list

system/core/rootdir/ramdisk_node_list文件在Android中扮演着重要的角色,它包含了根文件系统中ramdisk部分的所有节点列表。这些节点可能包括设备节点、目录节点和文件节点。ramdisk是一个临时文件系统,它通常被用作Android启动过程中的初始文件系统。在Android启动过程中,内核会将ramdisk加载到内存中,并将其挂载到根文件系统中。ramdisk通常包含了启动Android系统所需的驱动程序、库和应用程序。

2023-12-26 23:00:00 825

转载 Linux时间子系统之(一):时间的基本概念

1、时间和空间以及相对性有没有绝对时间的概念呢?时间是否是独立于一切存在的呢?相信有绝对时间的存在比较符合人类的思维,也就是说,有一根绝对时间轴存在,任何事件都可以投射在这个时间轴的某个点上,不论观察者处于什么状态,大家共享一个绝对的时间轴。在这样的时间框架下,同时的概念是绝对的,只要发生在时间轴的同一点上,那么两个事件就是同时发生。如果两个事件不同时发生,那么他们之间的间隔也是绝对的,所有感知到的时间间隔都是相同的。与之相对的是绝对空间的概念。

2023-12-25 23:00:00 29

转载 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 40

转载 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 60

转载 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 52

转载 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 37

原创 CPU idle framework_ARM WFI和WFE指令

在 ARM 架构中,WFI(Wait For Interrupt)和 WFE(Wait For Event)是两个指令,用于处理器的低功耗和休眠模式。WFI 指令用于将处理器进入低功耗模式,直到中断信号到来时才被唤醒。当执行 WFI 指令时,处理器将停止指令的执行,停止取指,并且进入休眠状态。当一个中断被触发时(如外部中断、定时器中断等),处理器会退出低功耗模式,继续执行后续指令。WFE 指令用于将处理器进入低功耗模式,直到某个事件发生时才被唤醒。

2023-12-12 23:00:00 1039

转载 Linux common clock framework(3)_实现逻辑分析

和fixed rate类似,不再一一说明。

2023-12-05 23:45:00 90

转载 Linux common clock framework(2)_clock provider

我们在上面提到了clock provider的两种DTS定义方式,哪一种好呢?从规范化、条理性的角度,毫无疑问方式2是好的,它真正理解了Device Tree的精髓,并细致的执行。且可以利用很多clock framework的标准实现(后面会讲)。而方式1的优点是,DTS容易写,相应的clock driver也较为直观,只是注册一个一个clock provider即可,没有什么逻辑可言。换句话说,方式1比较懒。后面的API描述,蜗蜗会着重从方式2的角度,因为这样才能体会到软件设计中的美学。

2023-12-03 17:49:40 60

转载 Linux common clock framework(1)_概述

如今,可运行Linux的主流处理器平台,都有非常复杂的clock tree,我们随便拿一个处理器的spec,查看clock相关的章节,一定会有一个非常庞大和复杂的树状图,这个图由clock相关的器件,以及这些器件输出的clock组成。下图是一个示例:clock相关的器件包括:用于产生clock的Oscillator(有源振荡器,也称作谐振荡器)或者Crystal(无源振荡器,也称晶振);用于倍频的PLL(锁相环,Phase Locked Loop);用于分频的divider;用于多路选择的Mux;

2023-11-17 23:45:00 122

原创 linux 怎么判断一个dirver有没有被加载成功

2.因为是module_platform_driver(imx_blk_ctrl_driver);就找platform。如果是module_i2s_driver那就找下面的i2s。因此去/sys/bus目录下找platform。当然如果你的driver被模块化了,你可以通过lsmod或者rmmod + 模块名字,来查看加载的模块或者移除模块。3.进入drivers以后可以看到上面代码中name = "imx-blk-ctrl"对应的文件。就是对的driver连接(probe成功到)到。

2023-11-17 23:00:00 57

转载 一文搞懂linux regulator子系统

Regulator指的是稳定器,有电压稳定器及电流稳定器两种,能够自动维持恒定电流或者电压。其中,电压稳定器voltage regulator在电路中比较常见。从设备驱动的角度来看,regulator的控制比较简单,主要有enable/disable/输出电压或电流大小的控制。Linux利用regulator framework对regulator进行管理和控制。

2023-09-11 23:00:00 148

转载 Linux Regulator Framework(2)_regulator driver

本文从regulator driver的角度,描述怎样基于regulator framework编写regulator驱动。同时,以此为契机,学习、理解regulator有关的物理特性,以便能够更好的使用它们。

2023-09-10 16:30:31 159

转载 Linux Regulator Framework(1)_概述

Regulator,中文名翻译为“稳定器”,在电子工程中,是voltage regulator(稳压器)或者current regulator(稳流器)的简称,指可以自动维持恒定电压(或电流)的装置。voltage regulator最早应用于功放电路中,主要用于滤除电源纹波(100或者120Hz)和噪声,以及避免“输出电压随负载的变化而变化”的情况。后来,随着IC级别的regulator的出现(便宜了),voltage regulator几乎存在于任何的电子设备中。

2023-09-08 23:00:00 107

转载 Linux PM QoS framework(3)_per-device PM QoS

per-device PM QoS是针对指定设备的QoS framework,背后的思考如下:在Runtime PM的框架下,当device的引用计数减为0的时候,RPM会suspend该device。不过,device进入suspend状态以及从suspend状态resume是需要消耗时间的(相关信息保存在pm domain中),而系统其它实体(如用户空间程序)可能对该设备的响应时间有要求,这就是一种形式的QoS request,称作resume_latency。

2023-09-03 16:42:48 114

转载 Linux PM QoS framework(2)_PM QoS class

回顾上一篇文章(Linux PM QoS framework(1)_概述和软件架构),PM QoS framework抽象出4个系统级别的QoS constraint(统称为PM QoS class),分别是cpu&dma latency、network latency、network throughput和memory bandwidth。并提供一系列的接口,动态的搜集、整理系统对这些constraint的需求情况。

2023-08-31 00:00:00 211

转载 Linux PM QoS framework(1)_概述和软件架构

QOS为Quality Of Service(服务质量)的简称,对PM QoS而言,表示Linux kernel电源管理相关的服务质量。那到底什么是服务质量呢?我们知道,Linux PM的主要功能,是节省功耗,但同时,会付出一定的性能代价,例如延迟(latency)增加、吞吐量(throughput)下降。可以把PM当作一种服务,把它对性能的影响,类比为服务的质量(QoS)。对性能的影响越大,QoS越低,反之越高。

2023-08-28 22:00:00 207

转载 Linux设备模型(9)_device resource management

一个设备能工作,需要依赖很多的外部条件,如供电、时钟等等,这些外部条件称作设备资源(device resouce)。a)power,供电。b)clock,时钟。c)memory,内存,在kernel中一般使用kzalloc分配。d) GPIO ,用户和 CPU 交换简单控制、状态等信息。e) IRQ ,触发中断。f) DMA ,无 CPU 参与情况下进行数据传输。g)虚拟地址空间,一般使用ioremap、request_region等分配。h)等等。

2023-08-27 17:22:33 44

转载 一文搞懂linux PM QOS

linux PM QOS(power management quality of service,服务质量)表示linux内核电源管理的质量。它是一种在功耗和性能之间做出权衡的机制,通过使用constraint(约束)作为指标,来表达各个模块对PM的需求和限制。linux PM QOS有两种框架:CPU latency QoS和per-device PM QoS。CPU latency QoS用于控制CPU的最大延迟,以保证实时性能。

2023-08-27 16:32:34 377

转载 一文搞懂linux power domain framework

什么是power domain framework?在搞清楚这个问题之前,有必要先弄清楚什么是power domain,以及它解决了什么问题。从字面上理解,power domain指的是电源域。SOC是由多功能模块组成的一个整体,对于工作在相同电压且功能内聚的功能模块,可以划为一个逻辑组,这样的一个逻辑组就是一个电源域。简单来说,电源域就是逻辑划分,在该逻辑划分中包含了物理实体和电源线的连接关系。电源域之间存在着包含关系,这样就是一个父子关系的电源域。电源域也存在着兄弟关系,这样就是同一级的电源域。

2023-08-22 19:04:20 205

转载 Linux PM domain framework(1)_概述和使用流程

在复杂的片上系统(SOC)中,设计者一般会将系统的供电分为多个独立的block,这称作电源域(Power Domain),这样做有很多好处,例如:1)将不同功能模块的供电分开,减小相互之间的干扰(如模拟和数字分开)。2)不同功能所需的电压大小不同:小电压能量损耗低,但对信号质量的要求较高;大电压能量损耗高,对信号质量的要求较低。因此可以根据实际情况,使用不同的电压供电,例如CPU core只需1.2v左右即可,而大部分的I/O则需要3.3v左右。

2023-08-16 23:00:00 226

转载 Linux电源管理(11)_Runtime PM之功能描述

终于可以写Runtime PM(后面简称RPM)了,说实话,蜗蜗有点小激动。因为从个人的角度讲,我很推崇使用RPM进行日常的动态电源管理,而不是suspend机制。软件工程的基本思想就是模块化:高内聚和低耦合。通俗地讲呢,就是“各人自扫门前雪”,尽量扫好自己的(高内聚),尽量不和别人交互(低耦合)。而RPM正体现了这一思想:每个设备(包括CPU)都处理好自身的电源管理工作,尽量以最低的能耗完成交代的任务,尽量在不需要工作的时候进入低功耗状态,尽量不和其它模块有过多耦合。

2023-08-07 22:45:00 163

转载 Linux电源管理(10)_autosleep

经过前言的瞎聊,Autosleep的功能很已经很直白了,“系统没有事情在做”的时候,就将系统切换到低功耗状态。根据使用场景,低功耗状态可以是Freeze、Standby、Suspend to RAM(STR)和Suspend to disk(STD)中的任意一种。而怎么判断系统没有事情在做呢?依赖wakeup events framework。只要系统没有正在处理和新增的wakeup events,就尝试suspend,如果suspend的过程中有events产生,再resume就是了。

2023-08-04 23:30:00 165

转载 Linux电源管理(9)_wakelocks

wakelocks最初出现在Android为linux kernel打的一个补丁集上,该补丁集实现了一个名称为“wakelocks”的系统调用,该系统调用允许调用者阻止系统进入低功耗模式(如idle、suspend等)。同时,该补丁集更改了Linux kernel原生的电源管理执行过程(kernel/power/main.c中的state_show和state_store),转而执行自定义的state_show、state_store。这种做法是相当不规范的,它是典型的只求实现功能,不择手段。

2023-07-31 22:30:00 245

转载 Linux电源管理(8)_Wakeup count功能

Wakeup count是Wakeup events framework的组成部分,用于解决“system suspend和system wakeup events之间的同步问题”。本文将结合“Linux电源管理(6)_Generic PM之Suspend功能”和“Linux电源管理(7)_Wakeup events framework”两篇文章,分析wakeup count的功能、实现逻辑、背后的思考,同时也是对这两篇文章的复习和总结。

2023-07-05 22:45:00 336

转载 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 491

转载 Linux电源管理(6)_Generic PM之Suspend功能

下面图片对Linux suspend&resume过程做了一个概述,读者可以顺着这个流程阅读内核源代码。具体的说明,可以参考后面的代码分析。

2023-06-14 12:33:57 925

转载 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 159

flash烧写器

保证好用。。

2018-09-04

LED16*16字库

led16*16字库。。

2018-09-04

基于lpc54114的enc26j60,以调通

基于lpc54114的enc26j60,以调通.tcp收发一切正常。。。。

2018-06-01

lpc54114bsp

LPC54114的标准化BSP,不同于官方历程,里面也有我写的demo

2018-06-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除