【Linux驱动调试技巧】如何弄清楚为什么在内核阶段GPIO不能被软件控制?

在目前的Qualcom平台B系列芯片组上,我们使用pinctrl框架来控制内核的gpio。

无法控制gpio的问题。 需要按照下面的步骤来解释原因。

1.首先添加下面的调试代码,看是否有一些未知的模块是控制gpio的,这里以gpio38作为exmaple

如果有调试信息有控制gpio的调用堆栈,那么你需要检查不应该控制gpio的代码并删除它

2.如果没有明显的控制gpio输出的调试信息,那么我认为你需要删除/ firmware / images下的所有image再次测试。 如果你可以控制gpio,那么意味着一些子系统正在控制这个gpio,然后你逐个添加删除image来找出哪个子系统正在控制它。

3.如果你仍然无法控制这个GPIO,那么我认为首先你需要检查你是否添加了不使用pinctrl来控制GPIO的代码, 如果你确认没有添加任何旁路pinctrl的代码,请移动到下一个。

4.由于所有软件控制路径都已经过验证,所以现在需要删除此GPIO上的所有连接以再次测试GPIO。 如果你可以控制的GPIO。那么你需要联系你的硬件团队来检查你的硬件,并让你的硬件团队知道你的gpio配置(方向/拉式/驱动程序的强度)。 如果你仍然无法控制gpio,那么你需要读取芯片组的gpio寄存器软件界面(通常TLMM部分)来加倍你的gio配置。

5.一个特别的,请确认你的gpio是否只能在电源崩溃后才能控制,如果是的话,请先禁用free_io进行测试, 这只是测试,如果工作的话需要和你的硬件小组核对是否需要外部拉动

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux25391 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月15日
下一篇 2020年1月15日

相关推荐