SM4350 启动流程及充电

Posted bobuddy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SM4350 启动流程及充电相关的知识,希望对你有一定的参考价值。

1,  基础知识:
     a, UEFI
    UEFI 统一可扩展固件接口(Unified Extensible Firmware Interface)是一套规范,定义了操作系统 (OS) 与平台固件之间的软件接口。可以简单理解为操作系统启动之前运行的一个程序。
    其作用主要是初始化DDR、USB、PMIC等硬件设备,为操作系统提供合适的运行环境。
    高通平台从MSM8998 用UEFI取代了LK。其使用 Tianocore EDK2 实现UEFI 规范的要求,Tianocore EDK2是一套UEFI的开源实现。
    
     b, 高通UEFI
    高通UEFI 通过两部分实现:
    1,XBL 包含芯片组特有的核心协议(芯片的驱动程序)以及核心应用程序(如充电)。XBL代码位于vendor/qcom/nonhlos/BOOT.XF.4.2/boot_images,属于高通的私有代码,编译生成为xbl.elf。
    2,ABL 包含包括Linux加载启动及fastboot等功能组件。代码位于bootable/bootloader/edk2,编译生成为abl.elf。
    
     c, soc启动流程
        软件层面的启动流程为:PBL(BOOTROM) > XBL(Preloader) > QSEE > ABL (LK)> Kernel > android
        PBL: Primary BootLoader, 固化在soc内部的一段代码,soc上电后会执行。作用是加载XBL到处理器的缓存中
        XBL: Secondary Bootloader  位于EMMC中,由PBL加载,主要作用有:
                1,从EMMC中加载QSEE、devcfg、abl到内存
                2,实现usb、display、vibrator、charger等驱动为开机画面、充电画面做准备           
                3,将rpm镜像加载到RPM处理器的RAM中,为各芯片、器件供电做准备。
        QSEE: Qualcomm Trusted Execution Environment, 高通的TEE实现。 创建安全环境用于处理keymaster, 生物信息,熔丝等
        ABL:  Application Bootloader 配置cmdline参数启动kernel或者进入fastboot
        Kernel:   linux内核, 包括内存管理、进程管理、设备驱动程序、文件系统和网络管理等
        Android:  Init, Zygote, System_server等进程依次启动,进入Android世界

2,关机充电
     从原理图看battery的VBAT并非直接连接到usb的VBUS,而是都连接到充电管理芯片pm7250b
     因此手机在关机状态下插入DC后,并非直接向电池充电,而是触发开机后通过软件控制pmic决定给电池的电压和电流。
     流程如下:
     1,关机状态下插入DC,XBL阶段通过usb、pmic驱动判断当前有charger插入
     2,   XBL阶段加载QcomChargerApp,该app循环读取电池状态并作出以下动作:(详见https://blog.csdn.net/Ciellee/article/details/113759442)
         1, 关机 :原因可能是电池异常
         2, 继续充电:不满足开机条件,则显示充电画面,调用charger驱动接口继续充电
         3, 开机:满足开机条件,继续加载abl
     3,abl中判断DevInfo.is_charger_screen_enabled,决定是否设置ro.bootmode为charger
     4,   init进程启动后判断上述属性为charger,只启用class 为charger的服务,不启动late_start服务(也就不继续加载android)
     5,   system/bin/charger启动后,通过android.hardware.health@2.0-impl-2.1-qti.so
           调用到healthd,最终完成对/sys/class/power_supply下相关节点的读取并显示充电画面

3,开机充电
     流程如下(详见https://www.cnblogs.com/linhaostudy/p/14998123.html):
     1,开机完成后内核的psy子系统(power supply)在驱动中检测到电池、DC、USB的状态变化,通过uevent上报给用户空间
     2,  守护进程android.hardware.health@2.1-service通过epoll_wait来监听kernel中的uevent事件
     3,该进程将相关事件上报给framework中的BatteryService
     4,SystemUI等app监听framework中相关广播实现充电、电量等状态的更新
 

以上是关于SM4350 启动流程及充电的主要内容,如果未能解决你的问题,请参考以下文章

高通sm4350平台指纹移植

centos 启动流程及grubinitramfs修复

系统启动流程一,运行级别及grub

Linux下设置字符界面开机启动及系统启动流程介绍

kubelet启动流程解析(一)启动方式及初始化解析

Weblogic安装启动流程及免密后台启动