09 2019 档案
摘要:1. 前言 power supply class为编写供电设备(power supply,后面简称PSY)的驱动提供了统一的框架,功能包括: 1)抽象PSY设备的共性,向用户空间提供统一的API。 2)为底层PSY驱动的编写,提供简单、统一的方式。同时封装并实现公共逻辑,驱动工程师只需把精力集中在和
阅读全文
摘要:前面的前奏已经分析介绍了建立内核页表相关变量的设置准备,接下来转入正题分析内核页表的建立。 建立内核页表的关键函数init_mem_mapping(): init_mem_mapping()里面关键操作有三个split_mem_range()、kernel_physical_mapping_init
阅读全文
摘要:前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时页表,内核还是要建立内核页表,做到全面映射的。下面就基于RAM大于896MB,而小于4GB ,切CONFIG_HIGHMEM配置了高端内存的环境情况进行分析。 建立内核页表前奏,了解两个很关键的变量:
阅读全文
摘要:1. compatible节点: qpnp vm bms.c使用来控制电池曲线的和BMS功能的,其compatible节点是"qcom,qpnp vm bms" 2. probe函数: qpnp_vm_bms_probe函数如下: 2.1 parse_bms_dt_properties()函数 在这
阅读全文
摘要:最近一直在搞电源管理相关内容,之前是8610的bms,现在8916的bms,发现两者还是有点区别的,8916把对last_ocv_uv的估值算法分装成执行文件,作为服务一直运行。 电源管理方面,应该是Android驱动开发的一大难点,主要涉及的方面多,如充、放电、休眠唤醒等。这一部分主要讲BMS相关
阅读全文
摘要:上一篇主要讲电池相关的一些知识,上节忘记讲了,电池一般分为电量计电池和非电流计电池,电量计电池,就不需要用pmu8916的IC,当然这只是只,不需要BMS来计算soc,而jni层也需要读取电流计的电池相关属性。 这一节主要是根据代码进行相关的分析。 1. 先看probe的代码: 2. 分析如何确定初
阅读全文
摘要:CV:Constant Voltage恒压 SMMB charger:Switch ModeBattery Charger and Boost peripheral开关模式电池充电器和升压外围设备 OCV:Open circuitvoltage EOC:End OfCharge充电结束 UUC:Un
阅读全文
摘要:名词解释: CV:Constant Voltage恒压 SMMB charger:Switch ModeBattery Charger and Boost peripheral开关模式电池充电器和升压外围设备 OCV:Open circuitvoltage EOC:End OfCharge充电结束
阅读全文
摘要:USB Battery Charging V1.2 Specification 定义了USB充电器的类型或者叫做充电源。 1. 支持的充电器类型 1.1 Standard Downstream Port(SDP) 这种USB端口存在于主机PC中,这个是与USB的规格书一致的。 当一个USB外设接到S
阅读全文
摘要:memory:表示可用可分配的内存; 结束完memblock算法初始化前的准备工作,回到memblock算法初始化及其算法实现上面。memblock是一个很简单的算法。 memblock算法的实现是,它将所有状态都保存在一个全局变量__initdata_memblock中,算法的初始化以及内存的申请
阅读全文
摘要:网络上已经有许多在kernel中修改开机Logo的文章,本文就LK下实现开机logo进行简述 需要用到ffmpeg工具,没有安装ffmpeg请参考这里: "http://blog.csdn.net/redstarofsleep/article/details/45092145" 运行"ffmpeg
阅读全文
摘要:memblock算法是linux内核初始化阶段的一个内存分配器(它取代了原来的bootmem算法),实现较为简单。负责page allocator初始化之前的内存管理和分配请求。 分析memblock算法,可以从几点入手: 1. memblock算法初始化; 2. memblock算法管理内存的申请
阅读全文
摘要:这篇文章主要通过分析高通recovery目录下的recovery.cpp源码,对recovery启动流程有一个宏观的了解。 当开机以后,在lk阶段,如果是recovery,会设置boot_into_recovery=1,然后读取recovery.img镜像,把recovery.img的地址和ramd
阅读全文
摘要:Recovery启动流程系列文章把recvoery目录下文件分成小块讲解,最后再以一条主线贯穿所有的内容。这篇文章主要讲解Recovery UI的相关内容。 我们知道,当我们通过按键或者应用进入recovery模式,实质是kernel后加载recovery.img,kernel起来后执行的第一个进程
阅读全文
摘要:一、ramdisk介绍 ramdisk通过直面意思就大概能理解意思,ram disk虚拟内存盘,将ram模拟成硬盘来使用的文件系统。对于传统的磁盘文件系统来说,这样做的好处是可以极大提高文件访问速度;但由于是ram,所以 在掉电后,这部分内容不能保存。ramdisk文件系统是在系统上电后直接从磁盘一
阅读全文
摘要:摘要 Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS)。也可以称之为安卓的恢复模式,在这个所谓的恢复模式下,我们可以刷入新的安卓系统,或者对已有的系统进行备份或升级,也可以在此恢复出厂设置(格式化数据和缓存)。 1. Recovery相关
阅读全文
摘要:本文讨论的 swap基于Linux4.4内核代码 。Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。 希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文,应该可以帮你解决以下问题: 1. swap到底是干嘛的? 2. swappiness到底是用来
阅读全文
摘要:二叉堆因为实现简单,因此在需要优先队列的时候几乎总是使用二叉堆。d 堆是二叉堆的简单推广,它恰像一个二叉堆,只是所有的节点都有d个儿子(因此,二叉堆又叫2 堆)。下图表示的是一个3 堆。注意,d 堆要比二叉堆浅得多,它将Insert操作的运行时间改进为。然而,对于大的d,DeleteMin操作费时得
阅读全文
摘要:什么是二叉堆? 二叉堆是一种特殊的堆。具有如下的特性: 1. 具有完全二叉树的特性。 2. 堆中的任何一个父节点的值都大于等于它左右孩子节点的值(最大堆),或者都小于等于它左右孩子节点的值(最小堆)。 这个为最大堆: 这个为最小堆: 我们把二叉堆的根节点称之为堆顶。根据二叉堆的特性,堆顶要嘛是整个堆
阅读全文
摘要:概念 散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。 hash函数就是把任意长的输入字符串变化成固定长的输出字符串的一种函数。输出字符串的长度称为hash函数的位数。 散列(Hashing)通过散列函数将要检索的项与索引(散列,散列值)关
阅读全文
摘要:前戏 我们大家都知道动态查找树能够提高查找效率,比如:二叉查找树,平衡二叉查找树,红黑树。他们查找效率的时间复杂度O(log2n),跟树的深度有关系,那么怎么样才能提高效率呢?当然最快捷的方式就是减少树的深度了。那么怎么减少树的深度呢?为了解答这个问题,我们慢慢来看,先看个实际问题吧。 问题背景 在
阅读全文