一般在芯片供应商处获取的内核代码可能需要修改,以适配自己的电路板,尤其是电路板与供应商电路板有区别时。因内核调试较少,写博客记录一些自己在调试内核中遇到的问题;

坑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遇到的问题;)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐