如何使 g_printer(USB 小工具打印机)在 Raspberian Pi 中工作

如何使 g_printer(USB 小工具打印机)在 Raspberian Pi 中工作

我正在尝试在 Raspberry Pi Zero W 和设备上使用小工具模式g_printer来模拟打印机,以便我可以捕获数据、处理数据并通过 wi-fi 将其发送到某些 API。我已按照以下说明设置了该板https://gist.github.com/gbaman/50b6cca61dd1c3f88f41。使用该g_ether设备,该板将在我的 Macbook 上显示为网络设备。但是,如果我将 编辑/etc/modules为包含g_printer而不是g_ether(仅一个,然后重新启动),该板不会显示为 Macbook 可用的打印机。

modinfo 返回:

pi@raspberrypi:~ $ modinfo g_printer
filename:       /lib/modules/4.9.65+/kernel/drivers/usb/gadget/legacy/g_printer.ko
license:        GPL
author:         Craig Nadler
description:    Printer Gadget
srcversion:     2F1D50E570B8D48FA4C2DD9
depends:        libcomposite,udc-core
intree:         Y
vermagic:       4.9.65+ mod_unload modversions ARMv6 p2v8 
parm:           idVendor:USB Vendor ID (ushort)
parm:           idProduct:USB Product ID (ushort)
parm:           bcdDevice:USB Device version (BCD) (ushort)
parm:           iSerialNumber:SerialNumber string (charp)
parm:           iManufacturer:USB Manufacturer string (charp)
parm:           iProduct:USB Product string (charp)
parm:           iSerialNum:1 (charp)
parm:           iPNPstring:MFG:linux;MDL:g_printer;CLS:PRINTER;SN:1; (charp)
parm:           qlen:uint

所以看起来已经加载了。开发板还需要什么才能显示为打印机?

答案1

可以使用与模块相同的方式将模块g_printer添加到其中。cmdline.txtg_ether

编辑 cmdline.txt 文件并将其直接添加到后面rootwait

modules-load=dwc2,g_printer

编辑 config.txt 文件并将其直接添加到文件的最后一行之后:

dtoverlay=dwc2

当 Raspberry Pi 通过 USB 电缆插入 GNU/Linux 系统启动时,您将在系统消息中收到类似以下内容:

dmesg

[40692.579011] usb 2-1.4.3: New USB device found, idVendor=0525, idProduct=a4a8
[40692.579014] usb 2-1.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[40692.579016] usb 2-1.4.3: Product: Printer Gadget
[40692.579018] usb 2-1.4.3: Manufacturer: Linux 4.9.59+ with 20980000.usb
[40692.579020] usb 2-1.4.3: SerialNumber: 1
[40692.600820] usblp 2-1.4.3:1.0: usblp0: USB Bidirectional printer dev 18 if 0 alt 0 proto 2 vid 0x0525 pid 0xA4A8
[40692.600851] usbcore: registered new interface driver usblp

我没有方便测试的 MacOSx 机器,但 Raspberry Pi 应该被视为打印机设备。

查看加载了哪些模块

modinfo不显示哪些模块正在运行。 lsmod将显示所有加载的模块。

答案2

基本上,要使用 ,g_printer您必须使用模块参数vendorIDproductIDiPNPstring。可以从您自己的打印机中取出这些或找到它们这里。我建议只添加

dtoverlay=dwc2,dr_mode=peripheral

到 结束config.txt。稍后您将g_printer在启动后加载该模块。

克雷格·W·纳德勒 (Craig W. Nadler) 发布了很好的示例代码关于如何使用/dev/g_printer device描述符。

我创建了一个存储库如果您想详细了解如何使用 Raspberry Pi Zero 作为打印机,请获取更详细的说明。

相关内容