在消費(fèi)類電子中,功耗是很重要的,甚至項(xiàng)目后期一直在調(diào)功耗,看看哪里還可以再省電。由此就有了 Linux電源管理子系統(tǒng),該子系統(tǒng)包含很多方面:什么時(shí)候可以降幀、什么時(shí)候可以關(guān)掉其他 CPU core、系統(tǒng)運(yùn)行時(shí)如果某外設(shè)很少用需要讓它運(yùn)行時(shí)休眠、系統(tǒng)休眠時(shí)要保證哪些外設(shè)可以喚醒系統(tǒng)。
博主今天要討論的,就是一個(gè)按鍵如何喚醒系統(tǒng),類似于手機(jī)的電源鍵。
這個(gè)功能并不是新功能,所以 Linux 內(nèi)部有一個(gè) demo 可以使用,先教大家如何使用該demo,然后較大家如何撰寫中斷喚醒系統(tǒng)驅(qū)動(dòng)。
官方 demo
demo 目錄:/kernel4.14/drivers/input/keyboard/gpio_keys.c
該驅(qū)動(dòng)是專門為按鍵準(zhǔn)備的,是一個(gè)身經(jīng)百戰(zhàn)的驅(qū)動(dòng),任何時(shí)候測(cè)試按鍵中斷或者中斷喚醒系統(tǒng)都可以用它,很多時(shí)候比自己寫的驅(qū)動(dòng)靠譜。
要想使用該驅(qū)動(dòng),首先在該目錄的 Makefile 中增加:
obj-y += gpio_keys.o
設(shè)備樹(shù)中增加:
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行會(huì)匹配這個(gè)屬性,匹配到了該驅(qū)動(dòng)就會(huì)運(yùn)行。
linux,code 屬性是按鍵值,Linux 對(duì)所有按鍵事件都有編號(hào),所以KEY_ENTER實(shí)際是一個(gè)數(shù)字,是驅(qū)動(dòng)向上層報(bào)告的一個(gè)按鍵值。
gpios 屬性是標(biāo)明哪一個(gè) GPIO 口,低電平觸發(fā),大家可以自己選一個(gè) GPIO。
gpio-key,wakeup是代表此GPIO支持中斷喚醒,你也可以寫成:wakeup-source。新老版本而已。
修改就是這么簡(jiǎn)單,不過(guò)語(yǔ)法要符合各位手中的開(kāi)發(fā)板平臺(tái)。然后編譯出內(nèi)核和設(shè)備樹(shù)文件,下載到板子中。(Linux內(nèi)核根目錄會(huì)有 .config 文件,確保 CONFIG_PM_SLEEP=y 有打開(kāi))
如果驅(qū)動(dòng)加載成功,在 /proc/interrupts 中可以看到:
從左往右第一列是軟件中斷號(hào)(唯一)。
第二列是 CPU,表示該中斷在該CPU上觸發(fā)了多少次,多核會(huì)有多列。
第三列是中斷控制器,imx6ull開(kāi)發(fā)板根中斷控制器是GPC,外部中斷控制器是gpio-mxc,兩者是級(jí)聯(lián)關(guān)系。
第四列是硬件中斷號(hào),也就是GPIO口編號(hào)。
第五列表示該中斷是邊沿觸發(fā)還是電平觸發(fā)。
第六列是中斷名稱,可以找到一個(gè) GPIO Key Enter,如果驅(qū)動(dòng)加載成功就能看到,如果失敗就看不到。
-
嵌入式
+關(guān)注
關(guān)注
5126文章
19446瀏覽量
313314 -
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1882瀏覽量
86369 -
Linux
+關(guān)注
關(guān)注
87文章
11425瀏覽量
212398 -
按鍵
+關(guān)注
關(guān)注
4文章
225瀏覽量
57895
發(fā)布評(píng)論請(qǐng)先 登錄
【OneNET麒麟座試用體驗(yàn)】2.按鍵與點(diǎn)燈(Demo的按鍵掃描有錯(cuò)喔)
【Thunderboard Sense試用體驗(yàn)】之(四)體驗(yàn)官方Demo
應(yīng)廣單片機(jī)休眠和按鍵喚醒介紹
求個(gè)簡(jiǎn)單的單個(gè)觸摸按鍵的Demo
esp32-c3進(jìn)入light-sleep模式后,用按鍵來(lái)喚醒,長(zhǎng)時(shí)間睡眠用按鍵就喚醒不了怎么解決?
常用的通過(guò)按鍵喚醒休眠的系統(tǒng)怎么實(shí)現(xiàn)?
k210官方的demo有最新的嗎?
APM32F030C8T6_軟件問(wèn)題_進(jìn)入stop模式之后無(wú)法使用按鍵喚醒

【高云半導(dǎo)體Combat開(kāi)發(fā)套件試用體驗(yàn)】Combat demo調(diào)試運(yùn)行及小建議

按鍵喚醒系統(tǒng)驗(yàn)證方法

評(píng)論