ARM-Linux GPIO 占用问题(sh: write error: Device or resource busy)
linux驱动调试方法
·
一般在芯片供应商处获取的内核代码可能需要修改,以适配自己的电路板,尤其是电路板与供应商电路板有区别时。因内核调试较少,写博客记录一些自己在调试内核中遇到的问题;
坑1:
Linux 驱动调试中可能遇到gpio无法申请的问题,需要查找gpio被哪个驱动占用,用来解决管脚占用问题,介绍几种查找gpio占用的方案
方案1:
mount -t debugfs none /media
cat /media/gpio ; #左边红色一列为gpio管脚,右边绿色列为驱动名称,如果右边驱动列不为? 那么可以根据驱动名称去查找 gpio被哪个驱动占用;
方案2:
内核中自带堆栈调试(dump_stack)功能,对于驱动调试非常有用,在驱动中函数内添加dump_stack可以看到函数被调用的流程;如上例子,从厂商手中获取的内核gpio-69 无法得知被哪个驱动占用,应用使用时出现 gpio sh: write error: Device or resource busy,因此需要解除占用。 在gpiolib.c 中添加 如下代码:
编译后,刷入电路板,最终会显示gpio-69的申请过程 kernel_init->sunxi_hci_init,在内核源码中grep -rn sunxi_hci_init, 找到对应的.c 然后根据.c 找Makefile ,Kconfig……,即可判断该gpio的用途;
(此问题为调试allwinner s3 官方bsp遇到的问题;)
更多推荐
已为社区贡献1条内容
所有评论(0)