Android電源管理 Healthd 2

2021-06-29 11:52:35 字數 2056 閱讀 3613

adb shell進入到/sys/class/power_supply目錄,我們可以看到power_supply驅動建立的一些執行時檔案(我的裝置是nuxus 7, android 4.4.2, kernel 3.4.0):

1adb root

2adb shell

3cd/sys/class/power_supply

4ll

輸出如下:

1lrwxrwxrwx root  root  2014-09-19 14:30 ac -> ../../devices/i2c-0/0-0055/power_supply/ac

2lrwxrwxrwx root  root  2014-09-19 14:30 battery -> ../../devices/i2c-0/0-0055/power_supply/battery

3lrwxrwxrwx root  root  2014-09-19 14:30 usb -> ../../devices/i2c-0/0-0055/power_supply/usb

4lrwxrwxrwx root  root  2014-09-19 14:30 wireless -> ../../devices/i2c-0/0-0055/power_supply/wireless

看檔名稱就能知道其含義,但是問題是這裡一下子列出了4種電源型別,android系統究竟是怎麼判斷當前使用的是那一種呢?要回答這個問題,我們不妨進入其中任乙個資料夾,看看裡面記錄的是些什麼。

1cdusb

2ls

輸出如下:

1lrwxrwxrwx root root        2014-09-20 22:03 device -> ../../../0-0055

2-r--r--r-- root root   4096 2014-09-19 14:30 online

3drwxr-xr-x root root        2014-09-20 22:03 power

4lrwxrwxrwx root root        2014-09-20 22:03 subsystem -> ../../../../../class/power_supply

5-r--r--r-- root root   4096 2014-09-19 18:24type

6-rw-r--r-- root root    4096 2014-09-20 22:03 uevent

檢視online檔案,發現裡面的值為1,這是因為我的裝置正在使用usb電源,此時如果檢視ac或者wireless資料夾中的online檔案,你會發現其值為0;

再檢視type檔案,發現裡面的值為usb,這個檔案記錄了對於的名稱。

所以android系統對當前電源型別的判別邏輯是這樣的:

本人補充:epoll 於healthd使用:

static int healthd_init()

.......

}int healthd_register_event(int fd, void (*handler)(uint32_t))

static void healthd_mainloop(void)

eventct++;

return 0;}

}

android的電源管理

1.裝置的電源管理struct dev pm ops 在struct bus type,struct dev type,struct class,struct devic driver中包含有次結 構體對於rumtime,會一次檢查dev type,class,bus type,呼叫其中rumtim...

電源管理 電源變動試驗 CRANKING

需求描述 主機廠一般要求做emc試驗 如掉電試驗 時產品不能復位。比如da跑android系統,重啟的話需要20s左右 比如tbox cranking時候復位了,重啟約要1min 期間不能正常使用,影響使用者體驗。解決辦法 法1 很多情況下都是硬體計算好儲能電容,保證產品掉電後還能給mcu 4g w...

arm電源管理

由於arm系統中沒有bios裝置,所以只能為arm系統建立乙個虛擬的字元裝置與使用者空間進行通訊.這就是 arch arm kernel amp.c 1.工作原理 這個apm中實現乙個misc裝置,實質上也是乙個字元裝置,misc裝置的主裝置號是10,而apm bios作為一 個misc裝置,次裝置...