您的位置:首页 > 移动开发 > Android开发

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

2017-02-10 08:47 1036 查看

一、问题及问题分析

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

何以确定驱动是正常的

接上USB打印机,在/sys/class/usbmisc/有打印机的信息
执行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"。

二、解决问题

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: