首页 > 解决方案 > 在 Linux 内核 XHCI 驱动程序中插入 printk 调用会导致 ENOMEM 错误?

问题描述

我正在尝试在使用 libusb 的 Android 应用程序中调试 USB 问题。我不确定问题是由用户代码还是内核代码引起的。我认为,无论哪种方式,添加一些 printk 语句来跟踪内核代码(XHCI 驱动程序)相关部分的执行路径都会有所帮助。

但是,当我使用 printk 语句启动新编译的内核并插入 OTG 电缆时,内核会因为 NULL 指针取消引用而出现恐慌,这似乎是由ENOMEMXHCI 代码中的错误引起的。如果我注释掉一些 printks,内核不再在插入 OTG 电缆时出现恐慌,但它无法枚举连接的 USB 设备,这又是由于ENOMEM错误。

简单地添加一些printk带有字符串文字的语句(不占用堆栈内存,对吗?)怎么会导致ENOMEM错误?有没有可能 XHCI 代码已经危险地接近填满 8k 堆栈,而添加 printk 调用只是压垮骆驼的最后一根稻草?还是有更简单的解释?

printk我添加的行类型示例:

printk("BUGHUNT: xhci-mem.c: xhci_urb_enqueue(): ENTER\n");

标签: androidlinux-kernelout-of-memoryprintk

解决方案


推荐阅读