Android無法自動(dòng)創(chuàng)建USB打印機(jī)節(jié)點(diǎn)/dev/usb/lp0

Android無法自動(dòng)創(chuàng)建USB打印機(jī)節(jié)點(diǎn)/dev/usb/lp0

一、問題分析

當(dāng)把USB打印機(jī)插入Android設(shè)備后,在系統(tǒng)/dev目錄下并沒有打印機(jī)節(jié)點(diǎn)(/dev/usb/lp0)產(chǎn)生。

第一反應(yīng)是查看打印機(jī)設(shè)備,接入裝有Ubuntu的PC,正常:有/dev/usb/lp0

第二反應(yīng)是查看打印機(jī)驅(qū)動(dòng)信息:

[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機(jī)顯示信息關(guān)鍵部分都一樣。
驅(qū)動(dòng)正常,問題在于系統(tǒng)無法創(chuàng)建節(jié)點(diǎn)。那么就手動(dòng)創(chuàng)建一下!

二、問題初步解決

在嵌入式Linux系統(tǒng)下,可以通過mdev創(chuàng)建設(shè)備節(jié)點(diǎn)。mdev是通過掃描系統(tǒng)/sys/class/目錄獲取設(shè)備信息,進(jìn)而在/dev/下創(chuàng)建節(jié)點(diǎn)。通過:

ls /sys/class/

可以發(fā)現(xiàn),系統(tǒng)中是有打印機(jī)設(shè)備的信息的:

/sys/class/usbmisc

那么就可以執(zhí)行下:

busybox mdev -s

再次查看/dev/,驚喜的發(fā)現(xiàn):/dev/usb/lp0,有了!

三、問題根本解決

經(jīng)過以上探測(cè),我們知道:

1、驅(qū)動(dòng)正常

2、系統(tǒng)中有打印機(jī)設(shè)備信息

那么問題就是:系統(tǒng)無法自動(dòng)為我們創(chuàng)建打印機(jī)節(jié)點(diǎn)/dev/usb/lp0

1,在Linux下, 跟熱插拔相關(guān)的可以在/etc/init.d/rcS腳本中添加如下:

echo /system/bin/mdev > /proc/sys/kernel/hotplug
 /system/bin/mdev -s

2,但是,在Android中,跟設(shè)備節(jié)點(diǎn)創(chuàng)建相關(guān)的在文件:

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文件中添加如下打印信息:


image.png

我們發(fā)現(xiàn), USB打印機(jī)信息如下:

uevent->subsystem = "usbmisc"
uevent->device_name = "usb/lp0"

而代碼在找不到"usbmisc" 處理邏輯后直接return了。

至此,解決方案就出來了:

添加處理uevent->subsystem = "usbmisc"的代碼:

else if(!strncmp(uevent->subsystem,"usbmisc",7)){
             if(!strncmp(uevent->device_name,"usb/lp",6)){
                 base = "/dev/usb/";
                 make_dir(base,0755);
             }
         } 
image.png

編譯, 燒寫,重啟,插入,Ok!

四、 測(cè)試

節(jié)點(diǎn)/dev/usb/lp0是有了,能不能用,還得測(cè)試呀,我們是用打印機(jī),不是看著節(jié)點(diǎn)好玩。
通過echo命令往/dev/usb/lp0輸出字符,可以打?。?/p>

echo "111" > /dev/usb/lp0


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 之前就想著,弄個(gè)打印機(jī),一方面,我們自己平??梢源蛴⌒┪募?;另一方面,等寶寶長(zhǎng)大了,給他打印試卷、錯(cuò)題啥的...
    張勝東閱讀 1,454評(píng)論 0 0
  • 1.前言 在現(xiàn)在的辦公環(huán)境中,打印機(jī)只連接一臺(tái)電腦的效率顯然太低了,于是網(wǎng)絡(luò)打印機(jī)應(yīng)運(yùn)而生,它允許多個(gè)設(shè)備通過網(wǎng)絡(luò)...
    AnthonyMSen閱讀 5,795評(píng)論 0 1
  • 《基于ARM的多終端自助打印系統(tǒng)》是以前和控制工程學(xué)院的建斌同學(xué)和儀器與電子學(xué)院的培松同學(xué)一起做的一個(gè)創(chuàng)新項(xiàng)目。 ...
    free_will閱讀 3,196評(píng)論 1 2
  • 環(huán)境:Win10 電腦華碩AC68U 使用EZ模式 1 登陸管理系統(tǒng)配置 無論是原生系統(tǒng)還是梅林都可以,我的環(huán)境是...
    DavidOcean閱讀 9,949評(píng)論 0 0
  • https://github.com/SubLuLu/thermal_printer 小票打印機(jī), 目前主要有這么...
    索易開發(fā)閱讀 5,592評(píng)論 0 0

友情鏈接更多精彩內(nèi)容