在消費類電子中,功耗是很重要的,甚至項目后期一直在調功耗,看看哪里還可以再省電。由此就有了 Linux電源管理子系統,該子系統包含很多方面:什么時候可以降幀、什么時候可以關掉其他 CPU core、系統運行時如果某外設很少用需要讓它運行時休眠、系統休眠時要保證哪些外設可以喚醒系統。
博主今天要討論的,就是一個按鍵如何喚醒系統,類似于手機的電源鍵。
這個功能并不是新功能,所以 Linux 內部有一個 demo 可以使用,先教大家如何使用該demo,然后較大家如何撰寫中斷喚醒系統驅動。
官方 demo
demo 目錄:/kernel4.14/drivers/input/keyboard/gpio_keys.c
該驅動是專門為按鍵準備的,是一個身經百戰的驅動,任何時候測試按鍵中斷或者中斷喚醒系統都可以用它,很多時候比自己寫的驅動靠譜。
要想使用該驅動,首先在該目錄的 Makefile 中增加:
obj-y += gpio_keys.o
設備樹中增加:
gpio-keys {
compatible = "gpio-keys";
#address-cells = < 1 >;
#size-cells = < 0 >;
autorepeat;
key0 {
label = "GPIO Key Enter";
linux,code = < KEY_ENTER >;
gpios = < &gpio1 18 GPIO_ACTIVE_LOW >;
gpio-key,wakeup;
};
};
compatible 屬性是 “gpio-keys”,gpio_keys.c文件的674行會匹配這個屬性,匹配到了該驅動就會運行。
linux,code 屬性是按鍵值,Linux 對所有按鍵事件都有編號,所以KEY_ENTER實際是一個數字,是驅動向上層報告的一個按鍵值。
gpios 屬性是標明哪一個 GPIO 口,低電平觸發,大家可以自己選一個 GPIO。
gpio-key,wakeup是代表此GPIO支持中斷喚醒,你也可以寫成:wakeup-source。新老版本而已。
修改就是這么簡單,不過語法要符合各位手中的開發板平臺。然后編譯出內核和設備樹文件,下載到板子中。(Linux內核根目錄會有 .config 文件,確保 CONFIG_PM_SLEEP=y 有打開)
如果驅動加載成功,在 /proc/interrupts 中可以看到:
從左往右第一列是軟件中斷號(唯一)。
第二列是 CPU,表示該中斷在該CPU上觸發了多少次,多核會有多列。
第三列是中斷控制器,imx6ull開發板根中斷控制器是GPC,外部中斷控制器是gpio-mxc,兩者是級聯關系。
第四列是硬件中斷號,也就是GPIO口編號。
第五列表示該中斷是邊沿觸發還是電平觸發。
第六列是中斷名稱,可以找到一個 GPIO Key Enter,如果驅動加載成功就能看到,如果失敗就看不到。
-
嵌入式
+關注
關注
5141文章
19526瀏覽量
314888 -
驅動
+關注
關注
12文章
1899瀏覽量
86524 -
Linux
+關注
關注
87文章
11459瀏覽量
212773 -
按鍵
+關注
關注
4文章
227瀏覽量
57935
發布評論請先 登錄
【OneNET麒麟座試用體驗】2.按鍵與點燈(Demo的按鍵掃描有錯喔)
【Thunderboard Sense試用體驗】之(四)體驗官方Demo
應廣單片機休眠和按鍵喚醒介紹
esp32-c3進入light-sleep模式后,用按鍵來喚醒,長時間睡眠用按鍵就喚醒不了怎么解決?
常用的通過按鍵喚醒休眠的系統怎么實現?
【高云半導體Combat開發套件試用體驗】Combat demo調試運行及小建議

按鍵喚醒系統驗證方法

評論