作者: b47504
Overview
本文档旨在介绍基于 i.MX Android 软件的 i.MX 电源管理的调试技巧。本文档涉及以下主题:
电源管理选项--->
[*] 电源管理调试支持
[*] sysfs 中的额外 PM 属性用于低级调试/测试
root@android:/ # echo 15 > /sys/module/wakelock/parameters/debug_mask
root@android:/ # echo 15 > /sys/module/userwakelock/parameters/debug_mask
root@sabresd_6dq:/#echo 15>/sys/module/earlysuspend/parameters/debug_mask
这使得系统在进入暂停状态之前打印更多有用的信息
Eg:
--- a/sabresd_6dq/BoardConfig.mk
+++ b/sabresd_6dq/BoardConfig.mk
-BOARD_KERNEL_CMDLINE := console=ttymxc0,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=10M fb0base=0x27b00000 vmalloc=400M androidboot.console=ttymxc0androidboot.hardware=飞思卡尔
+BOARD_KERNEL_CMDLINE:=控制台=ttymxc0,115200 init=/init视频=mxcfb0:dev=ldb,bpp=32视频=mxcfb1:关闭视频=mxcfb2:关闭fbmem=10M fb0base=0x27b00000 vmalloc=400M androidboot.console=ttymxc0androidboot.hardware=飞思卡尔no_console_suspend=1
§ USB 电缆是否已被移除(USB 小工具将保持唤醒锁)
§设置->显示->睡眠,检查不活动超时时间设置是否比您预期的时间长。
§设置->系统->开发者选项->保持唤醒(可不设置),检查该选项是否被禁用
root@sabresd_6dq:/#cat/sys/power/wake_lock
系统使用 PMIC_STBY_REQ 信号通知电源管理 IC 将电压从待机电压更改为功能电压,反之亦然。一般来说,pmic_stby_req 引脚连接到 pmic 待机引脚。因此测量引脚以检查是否触发了取消断言信号。
如果没有触发信号,我们就可以考虑唤醒源是否设置正确。如果信号被触发,我们可以再检查一下pmic供电是否正常。
并且不仅限于这两点,我们还应该根据系统日志和硬件测量波形仔细检查我们怀疑的一切。
请查看 trace32 网站以获取更多详细信息。
跟踪“状态”值并尝试通过函数 mxc_cpu_lp_set 映射到不同的低功耗模式。
查看“mx6_suspend.S”,其中对suspend进行了详细的操作:
Ram 控制台将把一个内核日志副本保存到某个特定的内存空间中。如果在重启过程中内存电源没有被切断,您可以使用以下命令检查上次内核日志。
例如(如果是第一次启动,则无法找到 /proc/last_kmsg 文件):
root@sabresd_6dq:/ # cat /proc/last_kmsg
使用 getevent/sendevent 工具获取电源键扫描代码
#获取事件
更正 Keylayout 文件
系统/usr/keylayout/****.kl
使用电源键报告值更正扫描代码以匹配电源键
通过读/写/sys/power/device_suspend_time_threshold文件,可以打印出具体的模块名称和时间消耗详情,如果模块的挂起/恢复时间消耗超过阈值参数的话。默认情况下,该参数设置为0,即禁用该功能。我们可以通过以下命令启用它:
Eg:
root@android:/ # echo 10 > /sys/power/device_suspend_time_threshold
该命令的意思是,如果模块的挂起/恢复时间超过10us,系统就会打印出模块的详细信息。如果您想了解如何在内核中实现它的更多细节,请检查 kernel/power/main.c
说明:
可以使用shell命令进入不同的系统级低功耗模式进行调试(更多详情:可以查看Linux_6DQ_RM.pdf):
#echo mem > /sys/power/state
#echo 待机> /sys/power/state
root@android:/ # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
root@android:/#cat/sys/devices/platform/imx_busfreq.0/enable
关于更多详细信息,请参阅“Documentation/cpu-freq/governors.txt” 。
对于 MX6Q:
root@android:/#cat/sys/kernel/debug/clock/osc_clk/pll2_528_bus_main_clk/periph_clk/mmdc_ch0_axi_clk/rate
root@android:/ # cat /proc/interrupts
通过该命令可以查看某个模块是否会频繁触发中断。并考虑我们是否有机会减少中断次数。
root@android:/ # powerdebug -d -c
默认的gpu3DMaxClock在init.rc文件中设置为64,我们可以自己调整一个合适的值。
差异 --git a/imx6/etc/init.rc b/imx6/etc/init.rc
索引 8c420b5..eb11ffe 100755
--- a/imx6/etc/init.rc
+++b/imx6/etc/init.rc
@@ -397,6 +397,9 @@ 启动时
# 将 GPU 3D 最小时钟设置为 3/64
写入/sys/module/galcore/parameters/gpu3DMinClock 3
+# 将 GPU 3D 最大时钟设置为 64/64
+写入/sys/module/galcore/parameters/gpu3DMaxClock 64
+
在可能导致高功耗的设备驱动程序中添加调试消息,捕捉这些可能影响高功耗的模块的波形
是的~我也想知道
谢谢。
嗨, 赵渊
您能更新这些针对 Android 5.0+ 的提示吗?
因为有些技巧并不适合它。例如,我找不到 /proc/wakelocks、wakelock.c 的内容已更改。
非常感谢!