This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/BEAGLEBK:GPIO 事件唤醒

Guru**** 2895600 points

Other Parts Discussed in Thread: TPS65217

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/663050/linux-beaglebk-wakeup-on-gpio-event

器件型号:BEAGLEBK

工具/软件:Linux

您好!

我使用的是运行最新 Debian Stretch 的 BeagleBone Black。

Debian@BeagleBone:~$ cat /etc/os-release
相当名="Debian GNU/Linux 9 (扩展版)"
name="Debian GNU/Linux"
version_ID="9"
版本="9 (拉伸)"
Id=debian
home_url="https://www.debian.org/"
support_url="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Debian@BeagleBone:~$ uname -a
Linux BeagleBone 4.4.9.91-ti-R133 #1 SMP 星期二10月10日05:18:08 UTC 2017 armv7l GNU/Linux

我从下面下载了 Linux 内核源代码、以编译和使用自定义器件树。
https://github.com/beagleboard/linux.git

diff --git a/arch/arm/boot/dts/am335x-bonebblack-custom.dts b/arch/arm/boot/dts/am335x-bonebblack-custom.dts
索引0c68a88..a85990d 100644
--- a/arch/arm/boot/dts/am335x-bonebblack-custom.dts
++ b/arch/arm/boot/dts/AM335x-bonebblack-custom.dts
@@-10 + 10、49 @@
 #include "am33xx.dtsi"
 #include "am335x-bone-common-no-capemgr.dtsi"
 #include
+#include
 
 /{
       型号="TI AM335x BeagleBone Black";
       兼容="ti、am335x-bone-black"、"ti、am335x-bone-"、"ti、am33xx";
+
+   GPIO 键{
+       compatible ="GPIO-keys";
+       pinctrl-names ="default";
+       pinctrl-0 = <&WAKEUP_GPIO_PINs>;
+
+       power1{
+           label ="CAN1_Wakeb";
+           GPIO =<&GPIO2 GPIO_ACTIVE_HIGH_>;
+           Linux、代码= ;
+           去抖间隔=<10>;
+           唤醒源;
+}       ;
+
+       power2{
+           label ="CAN1_WakeA";
+           GPIO =<&GPIO1 13 GPIO_ACTIVE_HIGH_>;
+           Linux、代码= ;
+           去抖间隔=<10>;
+           唤醒源;
+}       ;
+
+       power3{
+           label ="CAN0_Wakeb";
+           GPIO =<&GPIO1 15 GPIO_ACTIVE_HIGH_>;
+           Linux、代码= ;
+           去抖间隔=<10>;
+           唤醒源;
+}       ;
+
+       Power4{
+           label ="CAN0_WakeA";
+           GPIO =<&GPIO2 22 GPIO_ACTIVE_HIGH_>;
+           Linux、代码= ;
+           去抖间隔=<10>;
+           唤醒源;
+}       ;
+}   ;
 };
 
 ldo3_reg{(&L)
@@-52、6 +91、15 @@
            BON_P9_17 (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE3)
        >;
    };
+
+   WAKEUP_GPIO_Pins:pinmux_WAKEUP{
+       pinctrl-single、pins =<
+           BON_P8_07 (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE7)
+           BON_P8_11 (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE7)
+           BON_P8_15 (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE7)
+           BON_P8_27 (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE7)
+       >;
+}   ;
 };

我可以看到事件是使用"evtest"生成的。

root@BeagleBone:/home/debian evtest
未指定设备,正在尝试扫描所有/dev/input/event
可用器件:
/dev/input/event0:     tps65217_pwer_but
/dev/input/event1:     GPIO 键
选择器件事件编号[0-1]:1.
输入驱动程序版本为1.0.1
输入设备 ID:总线0x19供应商0x1产品0x1版本0x100
输入器件名称:"GPIO 密钥"
支持的事件:
 事件类型0 (EV_SYN)
 事件类型1 (EV_KEY)
   事件代码143 (key_wakeup)
属性:
正在测试... (中断以退出)
事件:时间1517970542.951410、类型1 (EV_KEY)、代码143 (KEY_WAKEUP)、值0
事件:时间1517970542.951410,--- SYN_REPORT --------
事件:时间1517970544.088480、类型1 (EV_KEY)、代码143 (KEY_WAKEUP)、值1
事件:时间1517970544.088480,--- SYN_REPORT --------
事件:时间1517970544.163876、类型1 (EV_KEY)、代码143 (KEY_WAKEUP)、值0
事件:时间1517970544.163876,--- SYN_REPORT --------
事件:时间1517970546.154112、类型1 (EV_KEY)、代码143 (KEY_WAKEUP)、值1
事件:时间1517970546.154112,--- SYN_REPORT --------
事件:时间1517970546.217212、类型1 (EV_KEY)、代码143 (KEY_WAKEUP)、值0
事件:时间1517970546.217212,--- SYN_REPORT --------

但是、进入内存挂起时、通过执行"echo mem >/sys/power/state "、不会在引脚上发生任何活动时唤醒。

root@BeagleBone:/home/debian 回波 mem >/sys/power/state
[377.767576] PM:正在同步文件系统... 完成。
[379.788251] 冻结用户空间进程... (已用0.001秒)。
[379.797231] 冻结剩余可自由执行的任务... (已用0.001秒)。
[379.929843] PM:122.411毫秒后设备挂起完成
[379.940029] PM:3.962m 秒后器件延迟挂起完成
[379.950444] PM:3.970毫秒后器件挂起完成
[379.957124] 正在禁用非引导 CPU ...

不过、从 RTC 唤醒会起作用

root@BeagleBone:/home/debian echo +15 >/sys/class/rtc/rtc0/wakealarm;echo mem >/sys/power/state
[75.428962]  PM:正在同步文件系统... 完成。
[86.901348]  冻结用户空间进程... (已用0.001秒)。
[86.910330]  冻结剩余可自由执行的任务... (已用0.001秒)。
[87.042805]  PM:122.277毫秒后设备挂起完成
[87.053071]  PM:4.023毫秒后器件延迟挂起完成
[87.063483]  PM:3.947ms 后器件挂起完成
[87.070025]  正在禁用非引导 CPU ...
[87.073988]  PM:成功地将所有电源域置于目标状态
[87.093775]  PM:19.523ms 后器件恢复完成
[87.103980]  PM:2.689ms 后器件的早期恢复完成
[87.280782]  net eth0:正在初始化 cpsw 版本1.12 (0)
[87.286247]  Net eth0:初始化 cpsw ale 版本1.4
[87.291537]  净 eth0:ALE 表大小1024
[87.298751]  net eth0:找到 PHY:id:0x7c0F1
[87.424691]  PM:314.316毫秒后器件恢复完成
[87.435170]  正在重新启动任务... 完成。


这是已知问题吗? 有人尝试过这种方法吗? 我是否需要为 TI 的功勋尝试主线内核或内核? 还有人知道 CAN 唤醒是否正常工作吗?


谢谢、此致、
Sanchayan Maity。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TI 不支持 Debian。 请在 www.beagleboard.org 上提出您的问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    映像可能是 Debian、但这只是用户空间。 内核仍然是具有 TI 标签的内核。

    root@BeagleBone:~# uname -a
    Linux BeagleBone 4.4.9.91-ti-R133 #1 SMP 星期二10月10日05:18:08 UTC 2017 armv7l GNU/Linux
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您希望获得此论坛的支持、请使用 AM335x Linux 处理器 SDK :www.ti.com/.../PROCESSOR-SDK-AM335X
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ||_|_______|_|_|__||_
    | |_|.'|。 |. ||_|_|. |||-_|_|_|
    ||||||||、||||||||||||||||||________________||
    |__| |__|

    Arago 项目 http://arago-project.org AM335x-EVM ttyS0

    Arago 2017.10 AM335x-EVM ttyS0

    AM335x-EVM 登录:root
    root@AM335x-EVM:~# cat /etc/os-release
    id="Arago"
    name="Arago"
    版本="2017.10"
    version_ID="2017.10"
    相当名字="Arago 2017.10"
    root@AM335x-EVM:~# uname -a
    Linux AM335x-EVM 4.9.59-ga75d8e9305 #1挤占 Sat Dec 23 09:46:08 EST 2017 armv7l GNU/Linux

    我现在使用的是 Processor SDK。 我的上一个问题是原样。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请参阅 processors.wiki.ti.com/.../Linux_Core_Power_Management_User's_Guide_(v4.4) 只有 UART0、GPIO0和触摸屏提供唤醒源。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sanchayan、

    从 AM335x 器件的角度来看、您可以在 AM335x TRM 中检查可能的唤醒源。 请查看以下部分:

    8.1.4.3.4深度睡眠0
    8.1.4.5唤醒源/事件

    此致、
    帕维尔