Android中USB打印机无法创建/dev/usb/lp0节点

一、问题及问题分析

Android设备接入USB打印机,在驱动正常的情况下,却无法创建/dev/usb/lp0节点。

何以确定驱动是正常的

  1. 接上USB打印机,在/sys/class/usbmisc/有打印机的信息
  2. 执行mdev -s命令,就会生成/dev/usb/lp0节点

接下来,通过echo命令往/dev/usb/lp0输出字符,可以打印

echo "test" > /dev/usb/lp0

至此可以确定,问题不在驱动。

问题仅仅是lp0节点没有创建。

谁负责lp0节点的创建呢?

init进程

system/core/init/devices.cpp
static void handle_generic_device_event(struct uevent uevent)
{
	if (!strncmp(uevent->subsystem, "usb", 3)) {
		if (!strcmp(uevent->subsystem, "usb")) {
		....
		} else {
			/ ignore other USB events */
			return;
		}
	}
}

USB设备属于热插拔设备,设备的插入/移除都会产生相应的事件并上报。但上述代码在检测到uevent->subsystem不是"usb"后就直接退出了,,,而通过前述访问sysfs我们知道,USB打印的uevent->subsystem是"usbmisc"。


二、解决问题

现在我们找到了问题的原因,解决起来就容易了:

Android中USB打印机无法创建/dev/usb/lp0节点_第1张图片

你可能感兴趣的:(Android源码)