8 kc专栏

尚未进行身份认证

深入探索android Framework层代码,博客持续更新中!!!

等级
TA的排名 1k+

温控daemon(八)总结

温控的daemon,可以分为device、sensor、algorithm三大块。1.device一般为cpu、gpu等,具体可以调频、拔核等。2.sensor一般为温度的sensor,每个sensor会启动两个thread:其中一个thread用来检测sensor的温度,上层会设置thresholds到sensor驱动,然后daemon会使用poll等待驱动是事件,当温度大...

2019-02-28 15:47:09

温控驱动(五)dts参数解析、节点作用

我们先看下dts中,各个参数的分析如下:poll-ms代表KTM检测温度的间隔limit-tempKTM调频的温度temp-hysteresis当温度降到limit-temp- temp-hysteresis频率升到前面档位freq-step每次调频的步长(就是cpu频率的档位)core-limit-temp代表KTM拔核(除cpu0)的温度core-temp-h...

2019-02-27 15:59:11

功能机用上下键实现MoveEvent

这个功能的用处功能手机(这里说的功能机只是没有触屏,单还是Android系统)能在浏览器中使用上下键实现移动光标的目的,这里我们大致分析流程。我们知道普通按键,会在KeyboardInputMapper的process执行,比如这里我们要关注的上下左右按键。voidKeyboardInputMapper::process(constRawEvent*rawEvent){#if...

2019-01-22 15:11:34

Zygote进程

Zygote简介zygote是Android一个非常重要的进程,和init、systemServer进程这三个进程是Android系统非常重要的进程。Linux的进程是通过fork产生,fork出来的进程除了一些核心数据结构和父进程不一样,其余的内存映像都是和父进程共享的。通常子进程fork出来后,会继续执行exec。exec将用一个新的可执行文件的内容替代当前进程的代码段、数据段、堆和栈...

2019-01-22 15:11:26

android log各个文件整理

这篇博客我们罗列下各个log日志的头文件的使用。java层:1.android.util.Log;2.android.util.Slog;3.android.util.Rlog最后通过了native调用了__android_log_buf_write函数,这个函数是通过了log/log.h(就是liblog)的头文件中引用的log_id.h文件的函数。c层:1. uti...

2019-01-22 15:11:19

Android8.0 user版本adb 的log输出到串口中

我们在调试adb时不能使用logcat,这个时候我们需要把adb的log输出到串口,init就能实现,我们仿造init的代码,在adbd的main函数中调用了如下函数InitKernelLogging(nullptr);这个函数在init进程中也有调用。这个函数的意思把标准输入输出,标准错误全部写到/sys/fs/selinux/null,也就没有了。然后定了一InitLogging为kernel...

2019-01-22 15:11:14

logging.h提供的功能

这篇博客我们来分析logging.h提供的功能,引用这个文件可以#include<android-base/logging.h>,而这个文件在logging.cpp中实现。首先我们来看下其注释:提供了一个c++stream的接口,而且PLOG会打印出具体的错误,还支持logcat,stderr,dmesg的打印。////Google-styleC++logging...

2019-01-22 15:11:08

android Init进程新特性(截止android 8)

这一节主要补充,在现在android8上和之前比的新特性(仅仅是自己新发现,不清楚哪个版本加入或者是以前自己没发现)。1.init.rc中加入了对vendor下面手机厂商自己的rc文件,这样不用重新编译bootimage,只要push自己rc文件到vendor/etc/init/hw。而且自己的rc文件完全独立原生的rc文件import/vendor/etc/init/hw/ini...

2019-01-22 15:11:03

Android9.0 应用待机群组

一、概述 Android9引入了一项新的电池管理功能,即应用待机群组。应用待机群组可以基于应用最近使用时间和使用频率,帮助系统排定应用请求资源的优先级。根据使用模式,每个应用都会归类到五个优先级群组之一中。系统将根据应用所属的群组限制每个应用可以访问的设备资源。五个群组按照以下特性将应用分组:活跃如果用户当前正在使用应用,应用将被归到“活跃”群组中,例如:应用已启动一个...

2019-01-22 15:10:58

Android 8.0 App Standby

一、概述低电耗模式和应用待机模式是从AndroidM引入的新特性,之前一直没有分析,低电耗模式就是Doze,应用待机模式就是AppStandby。Doze模式我们之前分析过了,Doze模式在AndroidN又有修改,Android6.0(API级别23)引入了低电耗模式,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟CPU和网络活动,从而延长电池寿命。而A...

2019-01-22 15:10:52

温控daemon(七)ss算法

monitor算法是一种静态算法,超过阈值就限制为多少频率,或者做什么处理,ss不一样它是一种动态算法。下面我们就从代码层面进行分析。也是在main函数中调用了ss_algo_init函数。1.ss_algo_init我们来看下这个函数的前半段函数,这里主要先是过滤配置中的setting,然后创建sensor的device的client,然后就是获取devie信息,还有就是将devi...

2019-01-22 15:10:42

温控daemon(六)Monitor算法

Monitor算法温控的常见算法之一,在main函数中调用了thermal_monitor函数.Monitor算法是一种静态算法,当超过每一个设置的温度值就会调频,当小于clr的温度就会停止调频算法。1.thermal_monitor函数thermal_monitor函数先是从dev_list中获取了各个device_info放入device_info_arr中,然后过滤setting放...

2019-01-22 15:10:37

温控daemon(五)socket监控

这篇博客我们主要分析thermal-engine的socket监控,包括应用client的注册回调,以及client发送thermal消息都是通过socket。在thermal-engine启动分析的时候我们看到其创建了4个socket。1.socket初始化我们从main函数的thermal_server_init函数分析,这个函数其实流程很简单,对创建的4个socket,therma...

2019-01-22 15:10:32

温控daemon(四)加载配置文件

这篇博客我们主要分析thermal-engine中如何加载配置文件,包括代码中和配置文件。这里主要分析下thermal和ss算法的配置。加载配置,在main函数中主要涉及如下代码。 init_settings(&thermal_settings); pid_init_data(&thermal_settings);//pid算法我们平台disable后续分析 the...

2019-01-22 15:10:26

温控daemon(二)启动参数解析、device初始化

这样我们主要开始将thermal-engine的流程。1.thermal-engine启动先从启动开始说起,在init.target.rc中定义了thermal-engine为一个service,并且属于mainclass,随main服务一起启动。servicethermal-engine/system/vendor/bin/thermal-engineclassm...

2019-01-22 15:10:09

温控daemon(三)sensor初始化

既上一篇博客继续分析main函数,上一篇博客我们分析了devices_initdevice的初始化,这篇博客先是分析保持KTM工作,后面主要分析sensor的初始化,。1.保持KTM工作我们先来看如下,先是创建了一个kernel的client,然后因为有kernel的device,所以会调用device_clnt_request函数 kernel_dev=devices_m...

2019-01-22 15:10:03

温控daemon(一)概述

thermal-engine是一套通过检测android设备上的各个sensor是否温度过高,来限制cpu频率、cpu热插拔、gpu频率、carmera帧率,modem、LCD等各个模块的性能。温控模块分为用户层的thermal-engine和kernel层的KTM,当thermal-engine起来后会接管KTM的温控,thermal-engine的算法分为Thresholdcontrol...

2019-01-22 15:09:58

按键是如何知道分发给哪个应用进程

之前分析按键的博客,我们分析了按键的流程,但是对按键具体在InputFlinger中分发给哪个进程这块没有分析。WMS设置焦点我们先来看WMS的updateFocusedWindowLocked函数,当Window窗口或者焦点有变化都会调用这个函数,这个函数先调用findFocusedWindowLocked来获取当前有焦点的窗口,然后会调用InputMonitor的setInputFoc...

2019-01-22 15:09:52

Android7.0 init.rc流程分析

在http://blog.csdn.net/kc58236582/article/details/52247547这篇博客中,我们分析了init进程的流程,现在我们结合代码主要分析init.rc脚本的流程。 首先我们会加载原生的init.rc,然后我们自己的一些内容放在自己的init.rc中。然后会在原生的init.rc中import。而原生会通过ro.hardware这个属性,来获取...

2019-01-22 15:09:47

android log丢失(三)动态切换logd机制和kernel机制

之前我们分析了如何修改版本使log机制变成kernel的log机制。这篇博客我们继续修改可以动态切换,这样方便平时log丢失时调试。 我们先来看liblog库的编译mk文件,这个文件中主要修改了对使用使用logd使用不同文件进行编译这块做了修改,增加了log_write_common.c和log_read_common.c两个通用文件。##Copyright(C)2008...

2019-01-22 15:09:42

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!