我试图利用gpio-poweroff程序。我试图了解我所用方法的后果。
这就是我做的事情
1)添加
power_ctrl: power_ctrl {
compatible = "gpio-poweroff";
gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>;
force;
};
到arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo-plus2.dts
2)重新编译设备树blob并将其放在它所属的位置
gpio-poweroff的代码被探测但由于pm_poweroff_handler
设置为某些内容而失败。所以我发现它在drivers/firmware/psci.c中设置为psci_sys_poweroff
。
3)我评论了这一行
4)使用新内核重新启动并在命令行上发出poweroff
5)GPIO按预期被拉高
6)通过外部电路关闭电路板
我非常渴望知道在嵌入式系统上这是否可行?好像我做了一件令人讨厌的事情。想到的唯一合理的方法是使用某种回调链,并将GPIO poweroff处理程序的优先级设置为低。这样我就可以切换GPIO,然后使用PSCI逻辑正确关闭。但是这种方法的RFC被拒绝了,似乎没有人踩到。
另一种解决方案是在gpio-poweroff.c中进行丑陋的黑客攻击并将旧回调保存到变量并在gpio切换后调用它。
那你们觉得怎么样?