确定msm8937+android7.1采用的dtb文件

本文详细介绍了如何确定MSM8937处理器在Android 7.1系统下使用的DTB文件。通过分析启动日志和硬件信息,结合代码及设备树配置,明确指出适用于特定硬件配置的DTB文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

确定msm8937+android7.1采用的dtb文件

 

先来看入口kernel\msm-3.18\arch\arm\boot\dts\qcom\Makefile

dtb-$(CONFIG_ARCH_MSM8937) +=msm8937-rumi.dtb \
       msm8937-pmi8950-cdp.dtb\
       msm8937-pmi8937-cdp.dtb\
       msm8937-pmi8950-ext-codec-cdp.dtb\
       msm8937-pmi8950-mtp.dtb\
       msm8937-pmi8937-mtp.dtb\
       msm8937-pmi8950-rcm.dtb\
       msm8937-pmi8937-rcm.dtb\
       msm8937-pmi8950-qrd-sku1.dtb\
       msm8937-pmi8937-qrd-sku2.dtb\
       msm8937-pmi8950-qrd-sku1-dvt1.dtb\
       msm8937-pmi8937-qrd-sku2-dvt1.dtb\
       apq8037-pmi8950-cdp.dtb\
       apq8037-pmi8937-cdp.dtb\
       apq8037-pmi8950-mtp.dtb\
       apq8037-pmi8937-mtp.dtb

我们怎么知道我们的设备对应的是哪个dtb呢?有两种方法:

(1)  通过启动的log信息

[   1.002606] Hardware name: Qualcomm Technologies, Inc. MSM8937-PMI8937 QRDSKU2 (DT)

这里很明显可以看出来对应的msm8937-pmi8937-qrd-sku2.dtb。

 

(2)  根据硬件信息、代码及设备树信息判断

CPU:msm8937

PMIC:pmi8937

根据这两个信息得到msm8937-pmi8937-qrd-sku2.dtb和msm8937-pmi8937-qrd-sku2-dvt1.dtb,那是用哪个呢先看\bootable\bootloader\lk\platform\msm_shared\board.c的platform_detect()中的一部分


125:描述msm_id,对应于CPU,比如Msm8937,其值对应sem.h的枚举成员:MSM8937 = 294,对应msm8937.dtsi文件的qcom,msm-id = <2940x0>;属性值中的294.

 

126:platform_version,8937暂时没用到。

127:描述于Platform Type ID,这里为0xb,对应qrd,相当于smem.h的定义:

enum platform {
       HW_PLATFORM_UNKNOWN= 0,
       …
       HW_PLATFORM_MTP= 8,
       …
       HW_PLATFORM_QRD= 11,
       …
       HW_PLATFORM_32BITS= 0x7FFFFFFF,
};

对应于msm8937-pmi8937-qrd-sku2.dts文件的qcom,board-id= <0x12000b 0>;

\kernel\Documentation\devicetree\bindings\arm\msm\board-id.txt文件的解释如下:

The cell layout of the qcom,board-idproperty is as follows:
 
  qcom,board-id = <board_id, reserved>
 
where board_id is a 32-bit integer whosebit values are defined as follows:
   bits 31-24 = Platform Subtype ID
   bits 23-16 = Platform Version (Major)
   bits 15-8  = Platform Version(Minor)
bits  7-0  =Platform Type ID

我们这里board_id=0x12000b,可知Platform Type ID=0xb=11,Platform Version(Minor)=0x00=0,Platform Version (Major)=0x12=18,Platform Subtype ID=0x00=0,这和串口打印信息是一致的:B-    390766 - CDT version:3,PlatformID:11,Major ID:18,Minor ID:0,Subtype:0

128:描述Platform Subtype ID,这里为0x00

 

接着看bootable\bootloader\lk\target\msm8952\oem_panel.c下的oem_panel_select()对HW_PLATFORM_QRD的处理


上面我们知道plat_hw_ver_major=0x12=18,所以可以通过这里知道我们是SKU1还是SKU2,我们设备是SKU2

 

到此可以知道采用的是msm8937-pmi8937-qrd-sku2.dtb,此文件由哪些dtsi文件组成呢?后面再描述。

 

参考:

高通 MSM8K bootloader : SBL1 .

http://blog.youkuaiyun.com/loongembedded/article/details/51013988

 

<think>我们正在寻找Android 7.1设备关机时的电池电量曲线相关文件或配置。电池电量曲线通常与电池电量监测和关机逻辑有关,尤其是在低电量时设备如何安全关机。 在Android系统中,电池管理由多个组件共同完成,包括: - 电池服务(BatteryService) - 健康守护进程(healthd) - 电池相关的内核驱动(如power supply子系统) 在Android 7.1(Nougat)中,关机时的电池行为可能与以下方面相关: 1. **healthd**:这是Android中负责监控电池状态的守护进程。在系统关机时,它可能会参与电池状态的检查。 2. **电池配置文件**:有些设备厂商会使用配置文件来定义电池特性,包括关机电压或电量阈值。 具体到电池曲线(battery curve),它通常指的是电池电压与剩余电量的关系曲线。在关机过程中,当电池电压低于某个阈值时,设备会强制关机以避免电池过放。 在Android源代码中,我们可以关注以下路径: - **healthd**的源代码位于:`system/core/healthd/` 其中,`healthd.cpp`是主文件,它负责读取内核提供的电池信息(通过sysfs接口)并做出相应操作。 - 电池配置文件:有些厂商会在`device/<vendor>/<device>/`目录下放置特定的电池配置文件。例如,我们可能会找到`battery_charging_curve.xml`之类的文件,但具体文件名和位置因厂商而异。 另外,在Android 7.1中,关机充电模式(shutdown charging)的相关代码位于: - `system/core/healthd/healthd_mode_charger.cpp`:这个文件处理充电器模式(当设备关机但连接充电器时显示充电画面的模式)。 关于关机时的电池电量曲线,我们需要关注的是当电池电量低到一定程度时,系统会触发关机。这个阈值通常在框架层的`BatteryService`中设置,但实际硬件层面的关机点可能由硬件寄存器控制(例如PMIC),而软件层面会设置一个稍高的阈值来安全关机。 在`BatteryService`中,我们可以找到低电量关机的阈值。在Android 7.1中,这个阈值在`frameworks/base/services/core/java/com/android/server/BatteryService.java`中定义。例如: ```java // 低电量关机阈值 private final int mShutdownBatteryTemperature; private final int mShutdownBatteryLevel; ``` 但是,这个阈值通常是固定的,而电池曲线(电压与电量的对应关系)通常由电池计芯片(如TI的BQ系列,Maxim的MAX17050等)的驱动或配置文件来定义。 在驱动层面,内核中的电池驱动会通过power supply子系统向用户空间报告电池状态。电池曲线通常由电池计芯片的驱动维护,或者通过设备树(Device Tree)配置。 在Android用户空间,healthd会读取`/sys/class/power_supply/battery/`下的节点,例如`voltage_now`、`capacity`等,然后根据这些值来判断。 因此,要找到具体的电池曲线配置文件,我们需要查看: 1. 设备的内核设备树(dts)文件,可能配置了电池的电压-容量曲线。 2. 内核驱动中电池计芯片的驱动代码,可能包含了曲线数据。 3. 厂商在`device`目录下提供的配置文件。 由于不同设备的实现可能不同,这里提供一些常见的查找方向: - 在设备的内核源码中,查找电池计驱动(如max17050_battery.c, bq27x00_battery.c等),里面可能有电压-电量曲线的查找表。 - 在设备的`device/<vendor>/<device>/`目录下,查找`init`脚本或`rc`文件,看是否有加载电池配置的动作。 - 查找`overlay`目录下的资源文件,可能包含电池配置。 例如,一些设备可能使用`batterydata`库,该库会从特定的二进制文件中读取电池曲线。这些文件通常以`batterydata-*.dtsi`的形式存在,然后编译成dtbo。 具体到Android 7.1,一个可能的相关文件是`healthd`中的`BatteryMonitor.cpp`(实际上在healthd中,但在Android 7.1中,`healthd`已经将一些功能移到了`BatteryMonitor`类中)。该文件会读取内核sysfs节点,并可以应用一些校正。 但是,我们并没有在标准AOSP中找到通用的电池曲线配置文件。因此,这通常是设备制造商自定义的。 **总结步骤:** 1. 检查内核驱动(特别是电池计驱动)的源代码,查找电压-电量曲线表。 2. 检查设备树文件.dts或.dtsi),看是否有电池曲线相关的配置。 3. 在设备的`device`目录下搜索包含`battery`、`curve`、`charging`等关键字的文件。 由于每个设备的实现可能不同,没有统一的文件路径。但我们可以尝试在设备的内核源码中查找,或者查看设备厂商提供的开源代码(如果该设备是开源项目的一部分)。 **相关问题:** 1.Android中,如何修改低电量自动关机的阈值? 2. Android系统如何读取电池电压和电量? 3. 如何为Android设备定制电池充电曲线? 4. healthd在Android电池管理中的作用是什么?</think>在 Android 7.1 (Nougat) 系统中,关机时的电池电量曲线配置主要涉及以下文件和组件: ### 关键配置文件与位置 1. **电池服务配置文件** `frameworks/base/core/res/res/xml/power_profile.xml` 定义电池容量和功耗参数,但关机曲线不直接在此配置。 2. **硬件抽象层 (HAL) 配置** `vendor/<厂商>/<设备>/health/` 目录下的电池配置文件(如 `battery_health_config.xml`) 厂商通常在此定义电池特性,包括关机电压阈值[^1]。 3. **内核级电池驱动** `/drivers/power/supply/` 下的内核驱动(如 `qcom_battery.c`) 通过设备树(DTB)配置电池电压-电量映射曲线,例如: ```dts battery { qcom,batt-id-range-pct = <15>; qcom,shutdown-voltage = <3400>; // 关机电压阈值 (mV) }; ``` 4. **Healthd 守护进程** `system/core/healthd/healthd.cpp` 监控电池状态,当电压低于阈值时触发关机流程: ```cpp if (batteryVoltage <= shutdownVoltage) { android::shutdown(); // 触发关机 } ``` 5. **关机充电模式** `system/core/charger/charger.cpp` 处理关机状态下的充电逻辑和电量显示曲线。 ### 自定义电池曲线的修改方法 1. **调整关机电压阈值** 在设备树中修改 `qcom,shutdown-voltage` 值(单位 mV): ```dts battery { qcom,shutdown-voltage = <3300>; // 降低阈值使设备更晚关机 }; ``` 2. **校准电量曲线** 在 HAL 层实现 `healthd_board_init()` 函数,重写电压-电量映射关系: ```c void healthd_board_init(struct healthd_config* config) { config->batteryCapacityMap = custom_capacity_map; // 自定义映射表 } ``` 3. **动态调整策略** 修改 `BatteryService.java` 的温度补偿逻辑(`frameworks/base/services/core/java/com/android/server/BatteryService.java`),在低温环境下提高关机阈值。 > ⚠️ **注意**:实际配置文件路径因设备厂商不同而异,需查阅具体设备的 BSP 文档。 --- ### 相关问题 1. Android 系统如何根据电池电压计算剩余电量百分比? 2. 修改 Android 关机电压阈值是否会影响电池寿命? 3. 在低温环境下,Android 设备为何会提前关机?如何优化? 4. 如何为 Android 设备定制不同的电池充电曲线? [^1]: 参考 AOSP 硬件抽象层 (HAL) 文档中关于 `health` 模块的电池配置说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongembedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值