一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux standby開發(fā)指南

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 10:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux standby 開發(fā)指南

1 前言

1.1 文檔簡介

介紹 Standby 模塊配置和調(diào)試方法。

1.2 目標(biāo)讀者

Standby 模塊開發(fā)、維護(hù)人員。

1.3 適用范圍

表 1-1: 適用產(chǎn)品列表

產(chǎn)品名稱 內(nèi)核版本 驅(qū)動(dòng)文件
T509 Linux-4.9 kernel/power/*
MR813 Linux-4.9 kernel/power/*
R818 Linux-4.9 kernel/power/*
A133 Linux-4.9 kernel/power/*
H616 Linux-4.9 kernel/power/*
T507 Linux-4.9 kernel/power/*
R328 Linux-4.9 kernel/power/*
T3 Linux-4.9 kernel/power/*
V853 Linux-4.9 kernel/power/*

2 模塊介紹

2.1 模塊功能介紹

? 休眠喚醒指系統(tǒng)進(jìn)入低功耗和退出低功耗模式,一般稱之為 Standby。standby 分為 super standby 和 normal standby,區(qū)別是 cpu 是否掉電。

? 假關(guān)機(jī)是類似 standby 的一種低功耗模式。進(jìn)入假關(guān)機(jī),系統(tǒng)會(huì)先復(fù)位,再進(jìn)入低功耗模式,等待喚醒源;檢測(cè)到喚醒源,系統(tǒng)退出假關(guān)機(jī),直接從低功耗模式復(fù)位重啟。適用于 OTT 類產(chǎn)品代替常規(guī)的關(guān)機(jī),實(shí)現(xiàn)紅外/藍(lán)牙開機(jī)功能。

2.2 相關(guān)術(shù)語介紹

表 2-1: 術(shù)語介紹

術(shù)語 說明
Super standby Vdd_cpu 掉電或 Core 掉電,dram 進(jìn)入 self refresh 狀態(tài)
Normal standby CPUX WFI,dram 進(jìn)入 self refresh 狀態(tài)
Fake Poweroff 假關(guān)機(jī),類似 standby,主要區(qū)別是系統(tǒng)退出假關(guān)機(jī)會(huì)重啟,而不是喚醒
SCP/CPUS 全志平臺(tái)輔助進(jìn)行電源管理的協(xié)處理器

2.3 模塊配置介紹

2.3.1 Device Tree 配置說明

設(shè)備樹中存在的是該類芯片所有平臺(tái)的模塊配置,設(shè)備樹文件的路徑為:kernel/linux-4.9/arch/arm64(32 位平臺(tái)為 arm)/boot/dts/sunxi/CHIP.dtsi(CHIP 為研發(fā)代號(hào),如sun50iw10p1 等)。Standby 模塊在 dtsi 中無用戶可用配置。

2.3.2 board.dts 配置說明

board.dts 用于保存每一個(gè)板級(jí)平臺(tái)的設(shè)備信息(如 demo 板,perf1 板等),里面的配置信息會(huì)覆蓋上面的 Device Tree 默認(rèn)配置信息。

? standby 參數(shù)配置

描述系統(tǒng)資源的相關(guān)信息。例如,“vdd-cpu = <0x00000006>;”,其中各個(gè) bit 代表 PMU 的各路供電,則 vdd-cpu 使用 PMU的第二、三路供電。

“osc24m-on = <0x1>;”,表示系統(tǒng)休眠后 osc24m 是否關(guān)閉,0x0 表示關(guān)閉,0x1 表示不關(guān)閉。

standby_param: standby_param {

vdd-cpu = <0x00000006>;

vdd-sys = <0x00000008>;

vcc-pll = <0x00000100>;

osc24m-on = <0x1>;

...

};

注:由于 r528/v853 部分方案, 沒有外掛 PMU,即硬件上不支持 vdd-sys/vdd-cpu 掉電,故R528/v853 board.dts 不需要該信息(standby_param)。

? 喚醒源配置

以 RTC 模塊為例,RTC 驅(qū)動(dòng)支持通過 “wakeup-source” 配置是否作為喚醒源;在 RTC 模塊節(jié)點(diǎn)下添加 “wakeup-source” 屬性,則可以設(shè)置為喚醒源。

rtc: rtc@07000000 {

compatible = "allwinner,sunxi-rtc";

device_type = "rtc";

wakeup-source;

...

};

? GPIO 為喚醒源配置

下面以 gpio-key 驅(qū)動(dòng)為例, 演示一下 gpio 作為 wakeup-source 的代碼編寫:

keys {

compatible = "gpio-keys";

status = "okay";

wakeup {

wakeup-source; (1)

gpios = <&pio PH 9 6 2 2 1>; (2)

label = "wakeup";

linux,code = ;

};

};

1.wakeup-source:device的wakeup source屬性.需要設(shè)備驅(qū)動(dòng)自己去解析該屬性,如果有,則表示設(shè)備具有wakeup source功能.

2.gpios:配置gpio的mux,pull,drive,data等屬性,如上的配置代表把PH9設(shè)置為6號(hào)功能(中斷功能),下拉,驅(qū)動(dòng)能力為2,data值為1.

? 假關(guān)機(jī)參數(shù)配置

描述系統(tǒng)關(guān)機(jī)的方式及假關(guān)機(jī)時(shí)需要用到的系統(tǒng)資源。如:

box_start_os0 {

compatible = "allwinner,box_start_os";

start_type = <0x1>;

irkey_used = <0x0>;

pmukey_used = <0x0>;

pmukey_num = <0x0>;

led_power = <0x0>;

led_state = <0x0>;

pinctrl-0 = <&standby_blue>;

pinctrl-1 = <&standby_red>;

pinctrl-2 = <&standby_bt>;

/*pinctrl-3 = <&standby_bt>;*/

}

...

s_cir0 {

s_cir0_used = <1>;

ir_power_key_code0 = <0x40>;

ir_addr_code0 = <0xfe01>;

ir_power_key_code1 = <0x1a>;

ir_addr_code1 = <0xfb04>;

ir_power_key_code2 = <0xf2>;

ir_addr_code2 = <0x2992>;

ir_power_key_code3 = <0x57>;

ir_addr_code3 = <0x9f00>;

ir_power_key_code4 = <0xdc>;

ir_addr_code4 = <0x4cb3>;

ir_power_key_code5 = <0x18>;

ir_addr_code5 = <0xff00>;

ir_power_key_code6 = <0xdc>;

ir_addr_code6 = <0xdd22>;

ir_power_key_code7 = <0x0d>;

ir_addr_code7 = <0xbc00>;

ir_power_key_code8 = <0x4d>;

ir_addr_code8 = <0x4040>;

wakeup-source;

}

“start_type = <0x1>;”,0x0 代表當(dāng)系統(tǒng)啟動(dòng)時(shí)檢測(cè)到是適配器上電啟動(dòng)則進(jìn)入假關(guān)機(jī)(H700 TV);0x1 不做適配器上電檢測(cè)判斷,按普通的假關(guān)機(jī)判斷流程;

“irkey_used = <0x0>;”,當(dāng)前代碼并未解析該節(jié)點(diǎn),為無用節(jié)點(diǎn),不影響假關(guān)機(jī)流程;

“pmukey_used = <0x0>;”,當(dāng)前代碼并未解析該節(jié)點(diǎn),為無用節(jié)點(diǎn),不影響假關(guān)機(jī)流程;

“pmukey_num = <0x0>;”,當(dāng)前代碼并未解析該節(jié)點(diǎn),為無用節(jié)點(diǎn),不影響假關(guān)機(jī)流程;

“l(fā)ed_power = <0x0>;”,當(dāng)前代碼并未解析該節(jié)點(diǎn),為無用節(jié)點(diǎn),不影響假關(guān)機(jī)流程;

“l(fā)ed_state = <0x0>;”,當(dāng)前代碼并未解析該節(jié)點(diǎn),為無用節(jié)點(diǎn),不影響假關(guān)機(jī)流程;

“pinctrl-0 = <&standby_blue>;”,LED 顯示需要用到的 pinctrl 配置(其中一種顏色);

“pinctrl-1 = <&standby_red>;”,LED 顯示需要用到的 pinctrl 配置(其中一種顏色);

“pinctrl-2 = <&standby_bt>;”,外部喚醒源(如藍(lán)牙/wifi/rtc 模塊)喚醒系統(tǒng)時(shí)拉對(duì)應(yīng) gpio,高脈沖有效,高脈沖持續(xù)時(shí)間需要大于 200 ms;

“pinctrl-3 = <&standby_bt>;”,外部喚醒源(如藍(lán)牙/wifi/rtc 模塊)喚醒系統(tǒng)時(shí)拉對(duì)應(yīng) gpio,低脈沖有效,低脈沖持續(xù)時(shí)間需要大于 200 ms;

“ir_power_key_code = <0x40>;”,ir 模塊特定數(shù)據(jù)的碼值,根據(jù)方案需求進(jìn)行配置;

“ir_addr_code = <0xfe01>;”,ir 模塊特定地址的碼值,根據(jù)方案需求進(jìn)行配置。

表 2-2: 平臺(tái)支持喚醒源列表

平臺(tái)/喚醒源 非CPUS域GPIO CPUS域GPIO POWER-KEY RTC USB 紅外 藍(lán)牙/WiFi MAD
T509 不支持 super standby super standby super standby super standby 不支持 super standby 不支持
H616 normal standby 不支持 normal standby normal standby normal standby normal standby normal standby 不支持
V853 normal standby 不支持 super standby super standby super standby 不支持 normal standby 不支持
T113 normal standby 不支持 不支持 normal standby 不支持 不支持 normal standby 不支持

2.3.3 kernel menuconfig 配置說明

linux-4.9 內(nèi)核版本:在命令行中進(jìn)入 linux 目錄,執(zhí)行 make ARCH=arm64 menuconfig(32 位系統(tǒng)為 make ARCH=arm menuconfig) 進(jìn)入配置主界面 (Linux-5.4 內(nèi)核版本執(zhí)行:./build.sh menuconfig),并按以下步驟作。

? 內(nèi)核 PSCI 選項(xiàng)

Kernel Features --->

[*] Support for the ARM Power State Coordination Interface (PSCI)

? 內(nèi)核 CPUIDLE 相關(guān)選項(xiàng)(可選)

CPU Power Management --->

CPU Idle --->

[*] CPU idle PM support

ARM CPU Idle Drivers --->

[*] Generic ARM/ARM64 CPU idle Driver

? 內(nèi)核 POWER 相關(guān)選項(xiàng)

Power management options --->

[*] Suspend to RAM and standby

[ ] Opportunistic sleep

[*] User space wakeup sources interface

(100) Maximum number of user space wakeup sources (0 = no limit)

-*- Device power management core functionality

[*] Power Management Debug Support

[*] Extra PM attributes in sysfs for low-level debugging/testing

? 內(nèi)核 FAKE_POWEROFF 相關(guān)選項(xiàng)

Device Drivers --->

[*] Real Time Clock --->

[*] support ir fake poweroff

2.3.4 uboot-2018 配置

? uboot-2018 FAKE_POWEROFF 相關(guān)配置

在平臺(tái)的 defconfig 中,將 CONFIG_ATF_BOX_STANDBY 配置為 Y

CONFIG_ATF_BOX_STANDBY = Y;

2.4 源碼結(jié)構(gòu)介紹

Standby 的源代碼位于內(nèi)核 kernel/power/目錄下:

kernel/power/ ├── autosleep.c ├── console.c ├── hibernate.c ├── Kconfig ├── main.c ├── Makefile ├── modules.builtin ├── modules.order ├── power.h ├── poweroff.c ├── process.c ├── qos.c ├── snapshot.c ├── suspend.c ├── suspend_test.c ├── swap.c ├── user.c ├── wakelock.c └── wakeup_reason.c

2.5 驅(qū)動(dòng)框架介紹

休眠喚醒指系統(tǒng)進(jìn)入低功耗和退出低功耗模式,一般稱之為 Standby。休眠過程由應(yīng)用發(fā)起,經(jīng)由內(nèi)核的電源管理框架來進(jìn)行休眠喚醒管理工作,如果存在 CPUS(一顆集成在 IC 內(nèi)部的對(duì)電源進(jìn)行管理的 openrisc 核,是 SoC 內(nèi)置的超低功耗硬件管理模塊),最終會(huì)傳遞到到 CPUS。因此休眠喚醒類出現(xiàn)問題的可能為應(yīng)用層、內(nèi)核層、CPUS 層,如果不存在 CPUS,則 CPU 進(jìn)入WFI。休眠喚醒流程圖如下,虛線部分為部分內(nèi)核實(shí)現(xiàn)。

poYBAGQFTtWAFKPaAACTeflr6F0836.png

圖 2-1: standby 驅(qū)動(dòng)總體結(jié)構(gòu)

pYYBAGQFTtaAZjrgAAGSyMhQJ38801.png

圖 2-2: linux standby 流程

3 FAQ

3.1 調(diào)試方法

3.1.1 調(diào)試節(jié)點(diǎn)

? pm_test 節(jié)點(diǎn)

該節(jié)點(diǎn)可用于測(cè)試 linux 部分休眠喚醒功能。Eg:echo x > /sys/power/pm_test。

Freezer:表明,任務(wù)凍結(jié)后,等待 5s,即返回,執(zhí)行喚醒動(dòng)作。

Devices: 表明,設(shè)備凍結(jié)后,等待 5s, 即返回,執(zhí)行喚醒動(dòng)作。

Platform:在 a1x, a2x, a3x 上,與 devices 相同;

Processors: 凍結(jié) non-boot cpu 后,等待 5s, 即返回,執(zhí)行喚醒動(dòng)作。

Core: 凍結(jié) timer 等系統(tǒng)資源后,等待 5s, 即返回,執(zhí)行喚醒動(dòng)作。

None: 表明,整個(gè)休眠流程全部走完,等待喚醒源喚醒。

? wake_lock 節(jié)點(diǎn)

該節(jié)點(diǎn)可查看安卓系統(tǒng) wake lock 狀態(tài),安卓系統(tǒng)在持鎖時(shí)不會(huì)進(jìn)入深度睡眠流程 (Suspend-to-mem)。Eg: cat /sys/power/wake_lock。

? wakeup_sources 節(jié)點(diǎn)

該節(jié)點(diǎn)可查看系統(tǒng)喚醒源的情況。Eg:cat /sys/kernel/debug/wakeup_sources。

3.2 常見問題

3.2.1 系統(tǒng)被錯(cuò)誤喚醒

3.2.1.1 系統(tǒng)被定時(shí)器喚醒

問題現(xiàn)象

休眠后,自動(dòng)被喚醒,過會(huì)自動(dòng)進(jìn)入休眠,屏幕黑屏,串口有輸出。

問題分析

系統(tǒng)休眠后自動(dòng)被喚醒,原因可能是,某些應(yīng)用或者后臺(tái)進(jìn)程,通過設(shè)置鬧鐘的方式,定時(shí)喚醒系統(tǒng)。

當(dāng)出現(xiàn)如下打印,表示 Linux 已經(jīng)休眠完成,準(zhǔn)備進(jìn)入 CPUS 休眠階段:

[ 3465.885063] PM: noirq suspend of devices complete after 16.487 msecs [ 3465.892225] Disabling non-boot CPUs ... ......

當(dāng)出現(xiàn)以上打印后自動(dòng)喚醒,則查看如下打?。?/p>

[ 3466.063570] wake up source:0x80000 //H3 linux4.4平臺(tái) [21676.174594] [pm]platform wakeup, standby wakesource is:0x100000 //H5/H6 linux-3.10平臺(tái) 后面的數(shù)字代表喚醒源,根據(jù)數(shù)字定位喚醒源,定位喚醒源后再判斷為何被喚醒。 WAKEUP_SRC is as follow: CPUS_WAKEUP_LOWBATT bit 0x1000 CPUS_WAKEUP_USB bit 0x2000 CPUS_WAKEUP_AC bit 0x4000 CPUS_WAKEUP_ASCEND bit 0x8000 CPUS_WAKEUP_DESCEND bit 0x10000 CPUS_WAKEUP_IR bit 0x80000 CPUS_WAKEUP_ALM0 bit 0x100000 CPUS_WAKEUP_HDMI_CEC bit 0x100000

使用范圍適用于非 psci1.0 版本,詳見 dts 文件 psci 節(jié)點(diǎn)配置。

常見場(chǎng)景:android 某些應(yīng)用或者后臺(tái)進(jìn)程,會(huì)通過設(shè)置鬧鐘的方式,定時(shí)喚醒系統(tǒng),當(dāng)判斷喚醒源為 0x100000 時(shí),大多數(shù)為該原因?qū)е隆?/p>

問題解決

確認(rèn)是某些應(yīng)用或者后臺(tái)進(jìn)程設(shè)置鬧鐘定時(shí)喚醒系統(tǒng),方案開發(fā)人員可以自行解決。

3.2.1.2 系統(tǒng)被其他喚醒源喚醒

問題現(xiàn)象

休眠后,被異常喚醒。

問題分析

系統(tǒng)休眠后被異常喚醒,原因可能是,被其他非預(yù)期的喚醒源喚醒。

查看喚醒源。對(duì)應(yīng)的代碼路徑在:lichee/linux4.9/include/linux/power/aw_pm.h

/* the wakeup source of assistant cpu: cpus */ #define CPUS_WAKEUP_HDMI_CEC (1<<11) #define CPUS_WAKEUP_LOWBATT (1<<12) #define CPUS_WAKEUP_USB (1<<13) #define CPUS_WAKEUP_AC (1<<14) #define CPUS_WAKEUP_ASCEND (1<<15) #define CPUS_WAKEUP_DESCEND (1<<16) #define CPUS_WAKEUP_SHORT_KEY (1<<17) #define CPUS_WAKEUP_LONG_KEY (1<<18) #define CPUS_WAKEUP_IR (1<<19) #define CPUS_WAKEUP_ALM0 (1<<20) #define CPUS_WAKEUP_ALM1 (1<<21) #define CPUS_WAKEUP_TIMEOUT (1<<22) #define CPUS_WAKEUP_GPIO (1<<23) #define CPUS_WAKEUP_USBMOUSE (1<<24) #define CPUS_WAKEUP_LRADC (1<<25) #define CPUS_WAKEUP_WLAN (1<<26) #define CPUS_WAKEUP_CODEC (1<<27) #define CPUS_WAKEUP_BAT_TEMP (1<<28) #define CPUS_WAKEUP_FULLBATT (1<<29) #define CPUS_WAKEUP_HMIC (1<<30) #define CPUS_WAKEUP_POWER_EXP (1<<31) #define CPUS_WAKEUP_KEY (CPUS_WAKEUP_SHORT_KEY | CPUS_WAKEUP_LONG_KEY)

查看關(guān)鍵打?。?/p>

platform wakeup, standby wakesource is:0x800000

此時(shí)對(duì)應(yīng)的是 gpio 喚醒。

問題解決

確認(rèn)是其他非預(yù)期的喚醒源喚醒系統(tǒng),方案開發(fā)人員可以自行解決。

3.2.2 系統(tǒng)不能被喚醒

3.2.2.1 休眠后無法喚醒

問題現(xiàn)象

系統(tǒng)休眠后無法喚醒。

問題分析

系統(tǒng)休眠后無法喚醒,原因可能有:

? 模塊休眠失敗。

查看是否模塊休眠失敗,輸入以下命令,確認(rèn)是否在內(nèi)核休眠喚醒模塊出異常。

echo N > /sys/module/printk/parameters/console_suspend echo 1 > /sys/power/pm_print_times

? 若上述無異常打印,則認(rèn)為是 Linux 后的階段出現(xiàn)異常。

不斷電重啟系統(tǒng),將啟動(dòng)時(shí)候的 RTC 寄存器的信息發(fā)給休眠模塊負(fù)責(zé)人,根據(jù) RTC 寄存器信息判斷。

[2341]HELLO! pmu_init stub called! [2645]set pll start [2648]set pll end [2649]try to probe rtc region [2652]rtc[0] value = 0x00000000 [2655]rtc[1] value = 0x000000e0 [2658]rtc[2] value = 0xf1f18000 [2661]rtc[3] value = 0x0000000f [2663]rtc[4] value = 0x00000000 [2666]rtc[5] value = 0x00000000

問題解決

? 模塊休眠失敗。確認(rèn)是模塊休眠失敗,方案開發(fā)人員可以自行解決。

? Linux 后的階段出現(xiàn)異常。將復(fù)位重啟時(shí)的 RTC 寄存器信息發(fā)給相關(guān)負(fù)責(zé)人。

3.2.2.2 喚醒源不支持喚醒

問題現(xiàn)象

休眠后,喚醒源無法喚醒系統(tǒng),串口沒有輸出。

問題分析

休眠后,喚醒源無法喚醒,可能是喚醒源不支持。

? cpus 休眠后異常。

當(dāng)出現(xiàn)如下打印時(shí)表示 Linux 休眠已經(jīng)完畢,此時(shí)喚醒不了,則可能是 cpus 退出休眠失敗,或者喚醒源不對(duì)。

[ 3465.885063] PM: noirq suspend of devices complete after 16.487 msecs [ 3465.892225] Disabling non-boot CPUs ... ......

通過以下手段可以判斷 cpus 休眠后是否正常運(yùn)行,以下命令表示休眠后 cpus 過一定時(shí)間軟件自動(dòng)喚醒。

如果串口能正常打印,wake up source 為 0x400000,則表示 cpus 是正常運(yùn)行的,這時(shí)應(yīng)該排查一下系統(tǒng)是否支持相應(yīng)的喚醒源。

? 喚醒源不支持。

確認(rèn)喚醒源不支持的情況。

問題解決

? cpus 休眠后異常。

將復(fù)位重啟時(shí)的 RTC 寄存器信息發(fā)給相關(guān)負(fù)責(zé)人。

? 喚醒源不支持。

將喚醒源的情況發(fā)給相關(guān)負(fù)責(zé)人。

3.2.2.3 紅外遙控器不能喚醒系統(tǒng)

問題現(xiàn)象

紅外遙控不能喚醒系統(tǒng)。

問題分析

紅外遙控喚醒需要配置喚醒源。

問題解決

紅外遙控器默認(rèn)支持 NEC 紅外協(xié)議遙控器喚醒,也支持 RC5 紅外協(xié)議遙控器喚醒,但是需要在sys_config.fex 進(jìn)行配置,配置如下:

;-------------------------------------------------------------------------------- ;ir --- infra remote configuration ;ir_protocol_used : 0 = NEC / 1 = RC5 ;-------------------------------------------------------------------------------- [s_cir0] s_cir0_used = 1 ir_used = 1 ir_protocol_used = 0 //置為0 支持NEC 紅外協(xié)議遙控喚醒,配置為0 支持RC5 紅外協(xié)議遙控喚醒

對(duì)于同一協(xié)議的紅外遙控器,能支持喚醒的個(gè)數(shù)也是有限的,具體在 sys_config.fex 配置 s_cir0 節(jié)點(diǎn)。

ir_power_key_code0 = 0x57 //遙控POWER 值 ir_addr_code0 = 0x9f00 //遙控設(shè)備碼 ir_power_key_code1 = 0x1a ir_addr_code1 = 0xfb04

3.2.2.4 USB設(shè)備不能喚醒系統(tǒng)

問題現(xiàn)象

USB 不能喚醒系統(tǒng)。

問題分析

USB 需要設(shè)置為喚醒源。

問題解決

USB 設(shè)備喚醒需要系統(tǒng)支持 USB_STANDBY,需要在 sys_config.fex 配置 usbc* 節(jié)點(diǎn)。需要

注意 [usbc0] usb_wakeup_suspend = 1 //1 表示支持 USB0 喚醒,0 表示屏蔽該喚醒源。

3.2.2.5 hdmi_cec 不能喚醒系統(tǒng)

問題現(xiàn)象

HDMI 不能喚醒系統(tǒng)。

問題分析

HDMI 需要設(shè)置為喚醒源。

問題解決

需要在 sys_config.fex 配置 hdmi 節(jié)點(diǎn)。

[hdmi] hdmi_cec_support = 1 hdmi_cec_super_standby = 1

3.2.2.6 cpus 退出休眠失敗

問題現(xiàn)象

休眠后,無法喚醒,串口沒有輸出。

問題分析

可能是 cpus 退出休眠失敗。

如果通過寫 time_to_wakeup 命令,系統(tǒng)沒法正常喚醒,則考慮是 cpus 退出休眠失敗的了,這時(shí)需要短接 reset 腳重啟系統(tǒng)(注意不是完全斷電,完全斷電將無法保留 RTC 值),然后將 boot 階段打印的 RTC 碼值發(fā)送給休眠喚醒負(fù)責(zé)人,定位問題。

[2341]HELLO! pmu_init stub called! [2645]set pll start [2648]set pll end [2649]try to probe rtc region [2652]rtc[0] value = 0x00000000 [2655]rtc[1] value = 0x000000e0 [2658]rtc[2] value = 0xf1f18000 [2661]rtc[3] value = 0x0000000f [2663]rtc[4] value = 0x00000000 [2666]rtc[5] value = 0x00000000

問題解決

? 確認(rèn)是否 dram 錯(cuò)誤。

? 確認(rèn)是否上下電時(shí)序錯(cuò)誤。

? 將復(fù)位重啟時(shí)的 RTC 寄存器信息發(fā)給相關(guān)負(fù)責(zé)人。

3.2.3 系統(tǒng)無法休眠

3.2.3.1 系統(tǒng)持鎖無法休眠

問題現(xiàn)象

系統(tǒng)持鎖,suspend 失敗。

問題分析

suspend 失敗,可能是系統(tǒng)持鎖阻止休眠。

問題解決

? 安卓查看是否有持鎖相關(guān)信息:

dumpsys power | grep PART

? 內(nèi)核中是否有相關(guān)持鎖信息:

cat /sys/kernel/debug/wakeup_sources

查看 active_since 項(xiàng),若對(duì)應(yīng)模塊不為 0,則該模塊一直阻止系統(tǒng)進(jìn)入休眠,查看該模塊是否異常;

cat /sys/power/wake_lock

查看是否有安卓申請(qǐng)的鎖。

? Linux devices driver suspend 失敗:

3.2.3.2 Android 系統(tǒng)持鎖無法休眠

問題現(xiàn)象

定時(shí)休眠到時(shí)后,屏幕亮屏,串口可以輸入,系統(tǒng)無法休眠。

問題分析

系統(tǒng)無法休眠,確認(rèn) Android 是否支持,是否禁止定時(shí)休眠。

串口輸入 dumpsys power,查看如下打印。如果發(fā)現(xiàn) mStayOn=true,則系統(tǒng)是不支持定時(shí)休眠功能,可以將該屬性設(shè)置成 false;另外 screen off timeout 表示休眠時(shí)間,可通過該值判斷你設(shè)置的定時(shí)時(shí)間是否正確;如果是 androidN ,screen off timeout 還取決于 Sleep timeout,Sleep timeout 的值比 Screen off timeout 小時(shí),系統(tǒng)取 Sleep timeout 當(dāng)做定時(shí)休眠的時(shí)間,當(dāng) Sleep timeout 為-1 時(shí),也表示系統(tǒng)無法定時(shí)休眠。如果是以上情況可咨詢 android 系統(tǒng)的同事,修改相應(yīng)的屬性。

Power Manager State: ...... mStayOn=true //true 保持常亮,false 可以支持定時(shí)休眠 Sleep timeout: -1 ms //只有androidN 平臺(tái)無該該值,定時(shí)休眠時(shí)間 Screen off timeout: 1800000 ms //定時(shí)滅屏?xí)r間 Screen dim duration: 7000 ms //屏保時(shí)間

常見場(chǎng)景:eng 固件開發(fā)階段為了測(cè)試長時(shí)間老化的測(cè)試項(xiàng),會(huì)禁止系統(tǒng)定時(shí)進(jìn)入休眠。

問題解決

確認(rèn)是 Android 系統(tǒng)持鎖阻止休眠,方案開發(fā)人員可以自行解決。

3.2.4 休眠喚醒過程中掛掉

3.2.4.1 分階段過程掛掉

問題現(xiàn)象

在 Linux 某個(gè)階段出現(xiàn)的休眠或者喚醒失敗。

問題分析

打開內(nèi)核選項(xiàng)

CONFIG_PM_DEBUG=y

查看具體失敗在哪個(gè)階段:

echo freezer > /sys/power/pm_test 查看 freezer 階段是否正常;

echo devices > /sys/power/pm_test 查看 freezer/devices 階段是否正常;

echo platform > /sys/power/pm_test 查看 freezer/devices/platform 階段是否正常;

echo processors > /sys/power/pm_test 查看 freezer/devices/platform/processors 階段是否正常;

echo core > /sys/power/pm_test 查看 freezer/devices/platform/processors/core 階段是否正常;

echo mem > /sys/power/state 測(cè)試分階段休眠喚醒。

問題解決

確認(rèn)是哪個(gè)階段出現(xiàn)的休眠或者喚醒失敗,方案開發(fā)人員可以自行解決。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2786

    瀏覽量

    50111
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11500

    瀏覽量

    213362
  • 開發(fā)指南
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    7759
  • Standby
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    7185
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    EAC0945 linux開發(fā)指南

    EAC0945 linux開發(fā)指南
    發(fā)表于 09-28 12:40

    EAC0945 linux開發(fā)指南

    `EAC0945 linux開發(fā)指南`
    發(fā)表于 10-31 12:18

    Rockchip Linux SDK uboot logo開發(fā)指南

    arm嵌入式vs-rk3399 板卡uboot logo 開發(fā)指南概述:本文檔主要介紹 rockchip linux sdk uboot logo 顯示的相關(guān)功能、配置以及開發(fā)過程中的注意事項(xiàng)。適用于 rockhip
    發(fā)表于 10-09 08:12

    CPLD FPGA高級(jí)應(yīng)用開發(fā)指南

    CPLD FPGA高級(jí)應(yīng)用開發(fā)指南
    發(fā)表于 04-15 10:56 ?58次下載
    CPLD FPGA高級(jí)應(yīng)用<b class='flag-5'>開發(fā)指南</b>

    Tiny6410 Linux開發(fā)指南詳解

    Tiny6410 Linux 開發(fā)指南
    發(fā)表于 07-08 17:12 ?210次下載
    Tiny6410 <b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)指南</b>詳解

    A64開發(fā)板LCD開發(fā)指南

    A64開發(fā)板LCD開發(fā)指南,驅(qū)動(dòng)開發(fā)指南
    發(fā)表于 06-21 17:02 ?0次下載

    彩光燈開發(fā)指南

    彩光燈開發(fā)指南
    發(fā)表于 12-29 20:15 ?0次下載

    Linux的平臺(tái)下Mini210S裸機(jī)程序開發(fā)指南

    Linux的平臺(tái)下Mini210S裸機(jī)程序開發(fā)指南
    發(fā)表于 10-29 10:52 ?59次下載
    <b class='flag-5'>Linux</b>的平臺(tái)下Mini210S裸機(jī)程序<b class='flag-5'>開發(fā)指南</b>

    Rockchip Linux SDK的開發(fā)指南的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Rockchip Linux SDK的開發(fā)指南的詳細(xì)資料說明。
    發(fā)表于 01-10 17:17 ?74次下載
    Rockchip <b class='flag-5'>Linux</b> SDK的<b class='flag-5'>開發(fā)指南</b>的詳細(xì)資料說明

    迅為RK3399開發(fā)板嵌入式linux開發(fā)指南

    迅為RK3399開發(fā)板嵌入式linux開發(fā)指南迅為RK3399開發(fā)板發(fā)布《北京迅為嵌入式linux開發(fā)指
    發(fā)表于 11-01 16:58 ?79次下載
    迅為RK3399<b class='flag-5'>開發(fā)</b>板嵌入式<b class='flag-5'>linux</b><b class='flag-5'>開發(fā)指南</b>

    nRF52832開發(fā)指南-下冊(cè)

    nRF52832開發(fā)指南-下冊(cè)
    發(fā)表于 06-16 14:14 ?51次下載

    Tina_Linux_系統(tǒng)軟件開發(fā)指南

    Tina_Linux_系統(tǒng)軟件開發(fā)指南
    的頭像 發(fā)表于 03-02 15:25 ?2970次閱讀
    Tina_<b class='flag-5'>Linux</b>_系統(tǒng)軟件<b class='flag-5'>開發(fā)指南</b>

    Tina Linux配置開發(fā)指南

    Tina Linux配置開發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.8w次閱讀
    Tina <b class='flag-5'>Linux</b>配置<b class='flag-5'>開發(fā)指南</b>

    Linux NOR開發(fā)指南

    Linux NOR開發(fā)指南
    的頭像 發(fā)表于 03-06 09:55 ?1340次閱讀
    <b class='flag-5'>Linux</b> NOR<b class='flag-5'>開發(fā)指南</b>

    【北京迅為】itop-龍芯2k1000開發(fā)指南Linux基礎(chǔ)入門vim 編輯器

    【北京迅為】itop-龍芯2k1000開發(fā)指南Linux基礎(chǔ)入門vim 編輯器
    的頭像 發(fā)表于 10-25 14:56 ?661次閱讀
    【北京迅為】itop-龍芯2k1000<b class='flag-5'>開發(fā)指南</b><b class='flag-5'>Linux</b>基礎(chǔ)入門vim 編輯器