我正在尝试在使用 libusb 的 Android 应用程序中调试 USB 问题。我不确定问题是由用户代码还是内核代码引起的。我认为,无论哪种方式,添加一些 printk 语句来跟踪内核代码(XHCI 驱动程序)相关部分的执行路径都会有所帮助。
但是,当我使用 printk 语句启动新编译的内核并插入 OTG 电缆时,内核会因为 NULL 指针取消引用而出现恐慌,这似乎是由ENOMEM
XHCI 代码中的错误引起的。如果我注释掉一些 printks,内核不再在插入 OTG 电缆时出现恐慌,但它无法枚举连接的 USB 设备,这又是由于ENOMEM
错误。
简单地添加一些printk
带有字符串文字的语句(不占用堆栈内存,对吗?)怎么会导致ENOMEM
错误?有没有可能 XHCI 代码已经危险地接近填满 8k 堆栈,而添加 printk 调用只是压垮骆驼的最后一根稻草?还是有更简单的解释?
printk
我添加的行类型示例:
printk("BUGHUNT: xhci-mem.c: xhci_urb_enqueue(): ENTER\n");