Android无法自动创建USB打印机节点/dev/usb/lp0【转】
本文转载自:http://blog.csdn.net/u013686019/article/details/50165059
- Android: 4.4.4
一、问题分析
当把USB打印机插入Android设备后,在系统/dev目录下并没有打印机节点(/dev/usb/lp0)产生。
第一反应是查看打印机设备,接入装有Ubuntu的PC,正常:有/dev/usb/lp0
第二反应是查看打印机驱动信息:
- [178931.515572] usb 1-1: new full-speed USB device number 40 using xhci_hcd
- [178931.644906] usb 1-1: New USB device found, idVendor=0483, idProduct=5720
- [178931.644909] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
- [178931.644911] usb 1-1: Product: SPRT Printer
- [178931.644912] usb 1-1: Manufacturer: Spirit
- [178931.644913] usb 1-1: SerialNumber: 11101800002
- [178931.645918] usblp 1-1:1.0: usblp0: USB Bidirectional printer dev 40 if 0 alt 0 proto 2 vid 0x0483 pid 0x5720
也正常。和PC机显示信息关键部分都一样。
驱动正常,问题在于系统无法创建节点。那么就手动创建一下!
二、问题初步解决
在嵌入式Linux系统下,可以通过mdev创建设备节点。mdev是通过扫描系统/sys/class/目录获取设备信息,进而在/dev/下创建节点。通过:
- ls /sys/class/
可以发现,系统中是有打印机设备的信息的:
- /sys/class/usbmisc
那么就可以执行下:
- busybox mdev -s
再次查看/dev/,惊喜的发现:/dev/usb/lp0,有了!
三、问题根本解决
经过以上探测,我们知道:
1、驱动正常
2、系统中有打印机设备信息
那么问题就是:系统无法自动为我们创建打印机节点/dev/usb/lp0
在Linux下, 跟热插拔相关的可以在/etc/init.d/rcS脚本中添加如下:
- echo /system/bin/mdev > /proc/sys/kernel/hotplug
- /system/bin/mdev -s
但是,在Android中,跟设备节点创建相关的在文件:
- system/core/init/devices.c
- static void handle_generic_device_event(struct uevent *uevent)
- {
- if (!strncmp(uevent->subsystem, "usb", 3)) {
- if (!strcmp(uevent->subsystem, "usb")) {
- ....
- }
- }
- }
通过在devices.c文件中添加如下打印信息:
我们发现, USB打印机信息如下:
- uevent->subsystem = "usbmisc"
- uevent->device_name = "usb/lp0"
而代码在找不到"usbmisc" 处理逻辑后直接return了。
至此,解决方案就出来了:
添加处理uevent->subsystem = "usbmisc"的代码:
编译, 烧写,重启,插入,Ok!
四、 测试
节点/dev/usb/lp0是有了,能不能用,还得测试呀,我们是用打印机,不是看着节点好玩。
通过echo命令往/dev/usb/lp0输出字符,可以打印:
- echo "111" > /dev/usb/lp0
Android无法自动创建USB打印机节点/dev/usb/lp0【转】相关推荐
- 新字符设备驱动实验(自动分配设备号、自动创建应用层设备节点、新字符设备注册到内核的结构体)
目录 自动分配和释放设备号 示例代码 新的字符设备注册到内核方法 字符设备结构体(前面的设备号也放进来) cdev_init结构体初始化函数 cdev_add 添加到linux内核 cdev_del内 ...
- linux mdev 命令,linux设备驱动----利用mdev(udev)自动创建设备文件节点
1.mdev的使用方法和原理: mdev是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合.其具有使用简单的特点.它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程 ...
- qt on android 桌面鼠标事件,Qt on Android 不能自动创建Qt套件的问题的解决
在按照<Qt on Android核心编程>在搭建Qt on Android开发环境的时,虽然完全按书上的做法做了好几遍,但是在Qt Creator配置Android的Qt套件时,看到Qt ...
- Android系统上部署usb打印机
Android系统上部署usb打印机 一.综述 android系统现多用于手持设备,为手机等设备应用提供了很好的系统级支持.但对于PC机常用的打印功能,android到目前并不支持,也没有打印机厂家专 ...
- linux字符驱动之自动创建设备节点
上一节中,我们是手工创建设备节点,大家肯定也会觉得这样做太麻烦了. 上一节文章链接:https://blog.csdn.net/qq_37659294/article/details/10430270 ...
- linux内核创建节点,Linux内核驱动自动创建设备节点文件
Linux下生成驱动设备节点文件的方法有3个:1.手动mknod:2.利用devfs:3.利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上L ...
- linux 杂项设备,Linux下自动创建节点的字符杂项设备 misc_register
Linux下自动创建节点的字符杂项设备 misc_register admin • 2020 年 01 月 07 日 杂项设备 Linux里面的misc杂项设备是主设备号为10的驱动设备 定义头文件: ...
- Linux驱动编程 step-by-step (四) 字符设备的注册与设备节点的自动创建
字符设备的注册与设备节点的自动创建 cdev 结构 内核内部使用struct cdev<linux/cdev.h>来表示一个字符设备 struct cdev { struct ko ...
- linux驱动:自动创建设备节点
在加载驱动模块后,就要自己使用mknod创建设备节点,这样虽然是可行的,但是比较麻烦.我们可以在__init()函数里面添加一些函数,自动创建设备节点.创建设备节点使用了两个函数 class_crea ...
最新文章
- Electron中实现通过webview实现内嵌网页并嵌入css样式和js脚本等
- c 语言怎么编译 .dll,将你的 C 语言代码编译成 .NET
- Cocos游戏引擎3D特效全新升级 更流畅更炫酷
- @property的必要性
- python数据类型之间的转换
- 使用某个文件夹下的所有文件去替换另一个文件夹下及其子文件夹下存在的同名文件(Python实现)...
- 【洛谷 P2513】 [HAOI2009]逆序对数列(DP)
- android js 代码混淆工具,好用的JS(Javascript)混淆加密工具-HDS JSObfuscator 2.14版
- 前端面试大全(问题+答案)2
- nodejs学习(一)--express+ejs生成项目
- 返回数组指针或引用。
- windows 安装SNMP MIB Browser
- marlin固件烧录教程_i3型3D打印机制作详解――Marlin固件介绍
- 【狂神Java笔记】Java网络编程实战详细笔记整理(附代码)
- 音响为什么要做CCC认证以及流程有哪些
- 泛微软件服务器,泛微移动平台 服务器设置
- 自制图标字体FontAwesome
- 西门子828D 840Dsl数控程序PLC西门子数控程序中文注释,详细解释介绍
- 电子邮件市场中,如何使用您的Gmail?
- 上海初中计算机课程大纲,《上海市普通中小学校教育装备配备指南(试行稿)》解读...
热门文章
- 大学计算机基础教程第14章信息安全
- Java操作es 查询时 [search_phase_execution_exception] all shards failed
- WebRTC Native M96收集网卡地址信息以及筛选过滤VPN网络(CreateNetworks、FilterNetworks)
- 介绍一种知识管理系统-PARA
- KindEditor 文件上传漏洞漏洞
- [内网]RDP远程桌面密码凭证获取
- c++ 11 原子操作库 (std::atomic)(二)
- STM32的CRH、CRL、ODR和IDR寄存器的使用总结
- 如何用tf刚出一个高效的FM和DeepFM实操模型
- ART-Pi入门篇——(一)软件篇