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中相关广播实现充电、电量等状态的更新
 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值