PCIe转打印口芯片CH382/CH384以及PCI转打印口芯片CH351/CH352/CH353/CH356CH358 打印口转接方案支持Windows和Linux操作系统,在系统下会生成独立的打印口,本文主要介绍Linux操作系统如何为设备加载打印口驱动。

确认系统是否默认支持

Linux系统是自带并口驱动的,因此只需确认系统默认有没有支持该并口设备即可,Linux下的并口设备节点:/dev/lp*,可以进行如下确认:

1、执行:ls /dev/lp*,在卡插入前后对比是否有新的节点产生;

2、执行:lpinfo -v,查看是否有如下信息:

direct parallel /dev/lp0

确认硬件工作状态

当默认没有打印机节点时,可通过lspci命令确认当前硬件的工作状态以及驱动匹配情况。CH35x和CH38x芯片使用的VID有2种:0x1C00和0x4348,命令为:

lspci -vd 1c00:*

lspci -vd 4348:*

运行如上命令后,若设备存在,则会显示如下设备信息:

07:00.0 Serial controller: Device 1c00:3470 (rev 10) (prog-if 05 [16850])
Subsystem: Device 1c00:3470
Flags: fast devsel, IRQ 41
I/O ports at 1000 [size=256]
Memory at 58700000 (32-bit, prefetchable) [size=32K]
I/O ports at 1100 [size=4]
Expansion ROM at 58700000 [size=32K]
Capabilities: [60] Power Management version 3
Capabilities: [68] MSI: Enable- Count=1/32 Maskable+ 64bit+
Capabilities: [80] Express Legacy Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Kernel driver in use: serial
Kernel modules: 8250_pci

如上所示,在“Kernel modules”信息中会显示当前已经为该设备加载的驱动。

手动加载并口驱动

1、卸载驱动

sudo rmmod lp
sudo rmmod parport_pc

2、确认系统给设备分配的打印口IO基地址和中断资源

07:00.0 Serial controller: Device 1c00:3470 (rev 10) (prog-if 05 [16850])
Subsystem: Device 1c00:3470
Flags: fast devsel, IRQ 41
I/O ports at 1000 [size=256]
Memory at 58700000 (32-bit, prefetchable) [size=32K]
I/O ports at 1100 [size=4]
Expansion ROM at 58700000 [size=32K]
Capabilities: [60] Power Management version 3
Capabilities: [68] MSI: Enable- Count=1/32 Maskable+ 64bit+
Capabilities: [80] Express Legacy Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Kernel driver in use: serial
Kernel modules: 8250_pci

 如以上设备信息,可确认:

并口地址:
I/O ports at 1100 [size=4]

IRQ中断号:
41

3、加载parport_pc驱动

sudo insmod /usr/lib/modules/$(shell uname -r)/kernel/drivers/parport/parport_pc io=0x1100 irq=41
或者 
sudo modprobe parport_pc io=0x1100 irq=41

如果执行成功,会生成设备节点 /dev/parport*;

4、加载lp驱动

sudo modprobe lp

如果执行成功,会生成设备节点/dev/lp*;

出错可能原因

1、系统当前未发现任何CH35x和CH38x并口卡。

2、系统默认为CH35x和CH38x并口卡分配的IO地址不可用,导致驱动无法成功访问硬件,甚至造成系统Crash。原因:CH35x和CH38x并口卡的相关串口寄存器均位于IO空间内,部分非X86和X64的架构不支持独立编址或者支持分配地址但地址无法通过原生IO地址操作直接访问,此时可联系相应CPU或系统厂商咨询解决方法。

此外,WCH的CH38x和CH35x的全系列串口并口卡已经提交给国内主流OS厂商做了生态适配(UOS/Kylin等),可以直接和OS厂商联系获取适配的驱动补丁包或者操作系统。