自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小小小小的专栏

hello world

  • 博客(114)
  • 资源 (21)
  • 问答 (1)
  • 收藏
  • 关注

原创 linux 中断机制分析(一)

在Linux内核的中断管理机制中,涉及的主要数据结构有struct irq_desc、struct irq_common_data、struct irq_data、struct irq_chip、struct irq_domain、struct irq_domain_ops等。每一个中断都对应一个struct irq_desc类型的描述符,记录该中断的所有对应信息。

2022-08-23 22:23:05 426 1

原创 一点点读懂regulator(四)

本章节我们主要介绍Regulator Consumer Driver Interface,因为发现把英文翻译成中文,有些词语的含义总是不能准确的表达出来,所以这个章节,还是建议大家直接阅读英文原版,这样可能才会收获更多。Regulator Consumer Driver Interface...

2022-04-08 20:34:47 355

原创 一点点读懂regulator(三)

本节我们主要介绍Regulator Machine Driver InterfaceThe regulator machine driver interface用于配置regulator subsystem的board/machine特定初始化代码。Consider the following machine:Regulator-1 -+-> Regulator-2 --> [Consumer A @ 1.8 - 2.0V] | ...

2022-04-08 15:32:42 531

原创 一点点读懂regulator(二)

目录1、Registration2、Regulator Events本章我们介绍Regulator Driver Interface相关接口使用。The regulator driver interface相对简单,旨在允许Regulator Driver向核心框架注册其服务。代码实现在regulator/core.c中1、Registration驱动程序可以通过调用以下接口注册调节器:struct regulator_dev *regulator_register(struc

2022-04-08 15:14:17 477

翻译 一点点读懂regulator(一)

目录1、关于2、命名法2.1 Regulator2.2 PMIC2.3 Consumer2.4 Power Domain2.5 Constraints3、Design3.1 Consumer driver interface3.2 Regulator driver interface3.3 Machine interface3.4 Userspace ABI1、关于此框架旨在提供一个标准内核接口来控制电压和电流调节器。其目的是允许系统动态控制调

2022-04-08 10:04:06 5614

原创 一点点读懂Thremal(二)

目录1、基本术语概念1.1 trip point1.2 cooling state1.3 zone device state2、Governor实现介绍3、step_wise governor执行流程本章节分析governor之一的step_wise。1、基本术语概念在介绍之前,先介绍几个术语概念来帮助大家理解:1.1 trip point 可以理解为一个阈值吧,每一个温度区间的阈值可以理解为一个trip point。1.2 co...

2022-03-30 22:56:39 905

原创 一点点读懂thermal(一)

目录1、thermal简介2、thermal_core分析2.1 zone_device注册相关接口2.1.1 关键结构体2.1.2 接口2.2 Cooling_device注册相关接口2.2.1关键结构体2.2.2 接口2.3 Governors注册相关接口2.4 关于critial事件和非critial事件的处理流程1、thermal简介 thermal模块主要负责温度控制,温度低时想办法升温,温度高时想办法降温,甚至复位系统。Linu...

2022-03-29 19:22:43 4832

原创 一点点读懂cpufreq(二)

在Cpufreq中提供了消息通知机制,在调频策略以及频率变化时来通知对该事件敏感的模块,各个模块可以通过注册和去注册接口来加入到通知链中。1、注册接口:/*** cpufreq_register_notifier - Register a notifier with cpufreq.* @nb: notifier function to register.* @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER...

2022-03-25 18:21:12 1011

原创 一点点读懂cpufreq(一)

Linux针对CPU的DVFS,主要在cpufreq中实现,Linux内部共有6种对频率的管理策略userspace,conservative,ondemand,powersave,performance和Interactive1.performance:CPU会固定工作在其支持的最高运行频率上;2.powersave:CPU会固定工作在其支持的最低运行频率上。因此这两种governors都属于静态governor,即在使用它们时CPU的运行频率不会根据系统运行时负载的变化动态作出...

2022-03-25 18:14:24 2863

原创 功耗控制之DVFS介绍

我们知道所有芯片在设计之初都需要规划好芯片的参数和应用场景,统称为芯片的spec。在spec中通常会定义一个或几个典型的应用场景以及它对应的工作条件如电压、频率和功耗上限等。因此绝大多数芯片的工作条件尤其是电压和频率在一开始就是比较固定的。然而在实际流片后,往往会出现不同芯片的最高频率不同的情况,最主要的原因相信很多人能猜到:process variation。一般来说这种variation会导致不同芯片达到相同性能所需要的电压也呈现正态分布. 这就导致有的芯片比目标频率...

2022-03-22 21:24:35 12146

原创 linux电源管理--task freeze

在Linux kernel的睡眠主流程中,有一个关键动作就是冻结进程,为什么要冻结进程?假设没有冻结技术,进程可以在任意可调度的点暂停,而且直到cpu_down才会暂停并迁移。这会给系统带来很多问题:(1)有可能破坏文件系统。在系统创建hibernate image到cpu down之间,如果有进程还在修改文件系统的内容,这将会导致系统恢复之后无法完全恢复文件系统;(2)有可能导致创建hibernation image失败。创建hibernation image需要足够的内存空间,但是在这期间如

2022-03-18 20:12:29 420

原创 linux电源管理--suspend secondary_cpus

相关函数实现:kernel\cpu.c、kernel\stop_machine.c、arch\arm64\kernel\smp.c在主流程中,CPU0需要把所有其他从核都拔掉主核和从核交互时序

2022-03-15 20:01:30 680 2

原创 linux电源管理--psci

PSCI, 是Power State Coordination Interface的缩写,是由ARM定义的电源管理接口规范,通常由Firmware来实现,而Linux系统可以通过smc/hvc指令来进入不同的Exception Level,进而调用对应的实现。在ARMv8架构,引入了Virtualization,Security等概念,CPU boot、shutdown、suspend/resume等操作需要根据架构的演进来满足安全要求。代码目录部署:Arch/arm64/kernel/psci.c

2022-02-17 17:26:49 2463

原创 linux电源管理-pm core主流程

全流程涉及的交互时序:suspend流程:唤醒流程:suspend流程的逆流程既是,在此不做过多介绍,后边我们会对全流程的每个组成部分进行拆解介绍

2022-02-14 19:37:11 1549

原创 linux电源管理--wakesource

1、框架介绍实现所在文件:drivers\base\power\wakeup.c函数所在文件:include\linux\pm_wakeup.h该文件函数较多,主要实现了wakesource的功能,用于系统判断当前是否有事件阻止睡眠。整套框架基本上是围绕着combined_event_count这个变量在处理逻辑,在此变量中,高16位记录系统所有的wakeup event总数,低16位记录是否有wakeup events在处理中。在每次调用wakeup_source_activate时,wake

2021-12-08 19:47:02 4571

原创 linux电源管理--syscore

目录框架位置数据结构及接口原型实现解析使用场景框架位置相关实现在drivers\base\syscore.c中函数声明在include\linux\syscore_ops.h中。依赖宏CONFIG_PM_SLEEP的使能数据结构及接口在头文件中,声明了函数原型以及相关结构体:struct syscore_ops { struct list_head node; int (*suspend)(void); void (*resume)(void); v

2021-12-07 19:46:22 1539

原创 linux电源管理

linux电源管理--wakesourcelinux电源管理--autosleeplinux电源管理--task freezelinux电源管理--DPMlinux电源管理--suspendsecondary_cpuslinux电源管理--syscorelinux电源管理--pscilinux电源管理--cpu suspend

2021-12-07 19:26:43 403

原创 SVC,HVC,SMC指令

SVC(Supervisor Call) 当用户空间通过系统调用陷入到内核空间的时候,则最终会通过SVC指令进入到内核空间 HVC(Hypervisor Call) 当在ARMv8-A架构下,normal world, EL1尝试去访问EL2的时候,则会陷入到虚拟化层的,其中是通过HVC指令 SMC(Secure Moniter Call) 用于切换noramal world 和 secure world使用。 ...

2021-12-04 16:00:05 6599

原创 SEV/WFE/WFI

目录WFESEVWFIWFEWait For Event,是否实现此指令是可选的。如果此指令未实现,它将作为NOP指令来执行。如果指令作为NOP在目标处理器上执行,汇编程序将生成诊断消息。WFE在ARMv6T2架构中作为NOP指令执行。如果Event Register没有被置位,WFE将挂起直到发生以下事件之一:An IRQ interrupt, unless masked by the CPSR I-bit. An FIQ interrupt, unless mas.

2021-12-04 15:20:47 1474

原创 Cache configuration

MMU使用translation tables 和 translation registers来控制哪些内存位置是可cache的。MMU控制着内存的cache policy、memory attributes和access permissions,并提供虚拟到物理地址的转换。软件配置是通过系统寄存器来执行的。在某些设计中,外部存储器系统可能包含外部存储器的进一步特定于实现的高速缓存。...

2021-11-25 20:05:16 315

原创 queue实现(可直接编译通过使用)

struct list{ int data; struct list *next; struct list *pre;};typedef struct { int size; struct list head; struct list *front; struct list *rear;}queue;queue* createQueue(void){ queue *q; q = malloc(sizeof(queue)); if(!q) { return NULL; }.

2021-11-24 20:32:58 91

原创 write through/write back/ write allocate/ read allocate

write through和write back。这两种写策略都是针对写命中(write hit)情况而言的:write through是既写cache也写main memory;write back是只写cache,并使用dirty标志位记录cache的修改,直到被修改的cache 块被替换时,才把修改的内容写回main memory。那么在写失效(write miss)时,即所要写的地址不在cache中,该怎么办呢?一种办法就是把要写的内容直接写回main memory,这种办法叫做no write

2021-11-24 11:04:13 1349

原创 Stack实现(可直接编译通过使用)

struct mylist{ int key; /*可根据实际情况修改类型*/ struct mylist *next;};typedef struct { int size; struct mylist head; } MyStack;MyStack* StackCreate() { MyStack *obj = NULL; obj = (MyStack *)malloc(sizeof(MyStack)); if (!obj) { .

2021-11-23 15:26:07 98

原创 Point of coherency (PoC)and Point of unification(PoU)

对于set-based 和 way-based 的clean 和invalidate, 对应的操作通常是在特定级别的cache上执行的. 对于使用虚拟地址的操作, 系统架构定义了两个点:POC和POU原文详见:https://developer.arm.com/documentation/den0024/a/Caches/Point-of-coherency-and-unificationPoint of Coherency(PoC). 对于特定的地址, PoC是保证所有可以访问内存的观察者(.

2021-11-15 10:50:17 2428

原创 当panic或者die被执行时,或者发生未定义指令时,如何被回调到

Panic是Linux kernel提供的一种复位机制,内核开发者在开发过程中,可以在异常流程中主动调用。 另外,还有一部分模块或者子系统,希望系统在panic时,能主动通知一下本模块,以便做一些复位前的准备动作,相应的kernel也提供了该机制,就是让大家注册回调。每次panic在执行过程中,会遍历注册的回调函数并回调之。实现机制:1、在panic.c代码中,有一个链表的定义,ATOMIC_NOTIFIER_HEAD(panic_notifier_list);EXP...

2021-11-01 17:06:47 354

原创 kernel hung_task死锁检测机制原理实现

1、实现原理分析Linux的进程存在多种状态,可在include/linux/sched.h中查看。/* Used in tsk->state: */#define TASK_RUNNING 0x0000#define TASK_INTERRUPTIBLE 0x0001#define TASK_UNINTERRUPTIBLE 0x0002#define __TASK_STOPPED 0x0004#define __TASK_TRACED 0x0008/* Used

2021-10-23 16:25:15 655

原创 kernel问题定位手段总结

从事kernel底层研发工作,最基础的调试工具就是仿真器,仿真器功能非常强大,可以让研发人员很容易的查看内存、查看函数调用栈、查看内存属性、查看当前寄存器值、设置函数断点、设置内存读写断点等等,那么在没有仿真器的情况下,同样也有很多问题定位手段:内存被踩1)kasan:Kasan是Kernel Address Sanitizer的缩写,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存问题。使用方法可参考https://cloud.tencent.com/develo...

2021-09-04 18:02:04 613

原创 Kernel函数解析之kernel_restart

该函数实现在kernel/reboot.c中,主要功能为重新启动kernel,比如发现kernel进入到了一个异常场景,此时我想重启kernel,那么该函数就可以调用。void kernel_restart(char *cmd){ kernel_restart_prepare(cmd); migrate_to_reboot_cpu(); syscore_shutdown(); if (!cmd) pr_emerg("Restarting system\n"); else pr_em

2021-09-04 15:34:46 3548

转载 如何根据地址获取函数名

https://blog.csdn.net/Chasing_Chasing/article/details/96750109?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlo

2021-08-31 21:21:53 571

转载 linux之early_param()和__setup

https://blog.csdn.net/eZiMu/article/details/52334258

2021-08-30 16:17:20 109

转载 Linux中mprotect()函数的用法

https://blog.csdn.net/Roland_Sun/article/details/33728955

2021-08-24 15:02:45 218

原创 Kernel函数解析之panic

位置:panic()函数在panic.c文件中,该文件位于kernel/目录下;作用:该函数的主要作用是停止当前的系统运行,供系统监测到异常时调用。流程:【源码】:/** * panic - halt the system * @fmt: The text string to print * * Display a message, then perform cleanups. * * This function never returns. */void panic.

2021-08-14 18:03:11 2784

转载 Linux中的preempt_count

https://zhuanlan.zhihu.com/p/88883239

2021-08-14 16:27:35 160

转载 PTP(Precision Time Protocol)高精度时间同步协议+CS模式测试代码

https://blog.csdn.net/woswod/article/details/82345380

2021-08-11 19:41:32 313

原创 删除排序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。作者:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2gy9m/来源:力扣(LeetCode)int removeDuplicates(int* nums, i.

2021-08-04 21:30:40 62

原创 让人舒服的沟通方式

人类作为群居类、强社交类群体,沟通存在于生活和工作的方方面面,无论在各领域,善于沟通的人一定在工作中占据着关键岗位。沟通,是一个很庞大的概念,这里的沟通不仅仅是语言上的沟通,还有身体、表情、情绪等沟通。同样的话由不同的人传达,意思也不一样。怎样做到良好沟通、善于沟通也是我个人孜孜追求的一个目标,本人也简单做了个总结:1、站在对方位置看问题,从“共赢”作为出发点毫不利己专门利人的精神是与人的本性相违背的,反正对于我个人来讲我是不倡导的。所以我们做任何事情,一定要和对方达到共赢的目的,相互抱团取暖。

2021-01-12 15:32:43 228

原创 分解大目标为小目标,挑战不可能

我国有句古语,说“不积小流,无以成江河;不积跬步,无以至千里”。这句话对于实现长远的目标而言,有非bai常值得借鉴的意义。通常来讲,长远的目标过大,在实现过程中,如果把大目标分解成若干个具体的小目标,然后不断地去实现小目标,那么最终的大目标也就可以实现了。如果心里总是想着大目标,眼睛总是盯着大目标,长时间下来,就会使你感到很疲倦,继而产生懈怠心理,甚至可能会认为没有成功的希望而放弃自己的追求。如果能将一个大目标分解成很多个具体的小目标,分阶段地逐一实现,你就可以尝到成功的喜悦,继而产生更大的动力去实现下一阶

2021-01-09 16:06:25 779

原创 linux内核中的__read_mostly、__must_check、asmlinkage、fastcall

__read_mostly的说明,有篇博客解释的比较清楚:https://blog.csdn.net/ce123_zhouwei/article/details/8431995__must_check说明可参考:https://www.cnblogs.com/embedded-linux/p/5891847.html

2021-01-07 11:29:07 204

原创 工作量评估常用方法

目录运用专家判断自下而上进行汇总类比估算三点估算运用专家判断通常由团队资深SE或者技术负责人,根据经验来做个粗略估计,通常情况下此方法估算可能偏差较大,但是量级一般比较准确。自下而上进行汇总工作分解之后,工作包落到具体的实施人员,由工作直接承担着进行工作量估算,然后向上汇总,最后汇总出一个项目的整体工作量。此方法通常是最准确的工作量评估,缺点是耗时可能较长。类比估算曾经业界或者其他团队做过一个类似的项目,比如建造一个六层楼的房子,那么可以根据类比估算,算出建造一.

2020-12-31 17:42:09 4003

原创 项目管理的坏味道

做项目经理,很容易把自己干成保姆,那么如何做好项目经理?做项目管理的坏味道有哪些?我们在这里做个总结,希望大家能引以为戒,也欢迎大家补充:1、不主动思考作为项目的Owner,不主动思考如何保证项目取得成功,整天只靠被人报问题然后跟踪问题解决,是无法保证项目成功的,团队成员也会觉得项目经理不作为,团队无法拧成一股绳做大事。2、不主动沟通项目经理的主要工作可能就是沟通,几乎所有的问题,都可以认为是沟通未做到位导致,关于如何沟通,我们会有专门的章节进行讨论。作为项目经理,我们不能害怕沟通,不能主观

2020-12-31 11:48:39 685

项目管理的坏味道.pdf

项目管理的坏味道.pdf

2021-02-04

华为编程规范和范例

华为公司编程范例和规范,欢迎大家踊跃下载!

2011-12-29

用TCP_IP进行网际互联第一卷_原理、协议与结构(第四版)

超实惠,欢迎大家踊跃下载学习,祝大家前途似锦!

2011-12-29

朗讯历年笔试题集合

朗讯公司历年笔试题集合,欢迎大家踊跃下载!

2011-12-29

中兴笔试题

中兴公司笔试题,欢迎大家踊跃下载,祝大家顺利通过笔试

2011-12-29

东北大学并行程序课件

东北大学并行程序课件,欢迎大家踊跃下载!

2011-12-28

XML数据库简介

XML数据库内容简介,欢迎大家踊跃下载学习 !

2011-12-27

代码大全pdf版

代码大全pdf版本,欢迎大家踊跃下载学习!

2011-12-27

腾讯笔试题

腾讯历年笔试题,欢迎大家下载分享学习,祝大家好运!

2011-12-26

设计模式C++版

设计模式C++版,欢迎大家踊跃下载学习!

2011-12-26

STL源码剖析

STL源码剖析pdf版,欢迎大家踊跃下载!

2011-12-26

华为C语言笔试题(附答案)

华为历年笔试题集锦,附答案,欢迎大家踊跃下载!

2011-12-26

编程珠玑第二版

编程珠玑第二版pdf版,欢迎大家踊跃下载!

2011-12-26

hadoop-0.20.2.tar

unix/linux版本hadoop安装程序,欢迎下载!

2011-12-26

atoi函数(C语言)

自己用C语言编写的atoi函数,欢迎下载。

2011-12-26

大顶堆(C语言)

用C语言开发的调整大顶堆程序,欢迎下载使用。

2011-12-26

双向冒泡排序(C语言)

用C语言开发的双向冒泡排序算法,具体内容详见代码。

2011-12-26

归并排序(C语言版)

用C语言开发的归并排序代码,具体内容请下载后欣赏

2011-12-26

递归和非递归二分查找(C语言)

用C语言开发的递归和非递归二分查找算法,具体内容详见代码

2011-12-26

快排(C语言版)

用C语言开发的快速排序,内容详见源代码。

2011-12-26

螺旋矩阵(C语言)

用C语言编写的螺旋矩阵程序 void down(int i,int j,int a[N][N]); void right(int i,int j,int a[N][N]); void up(int i,int j,int a[N][N]); void left(int i,int j,int a[N][N]); 具体内容详见文件源代码

2011-12-26

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

TA关注的人

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