如何访问PCI打印机卡的I / O位?

问题描述

enter image description here

较早的时候,在我的PC的P4主板上,集成了带有DB-25连接器的并行打印机端口。这些I / O引脚非常便于与外部数字设备进行通信。 我可以使用这些I / O引脚从Linux下的C程序控制外部硬件,因为:

我知道0x378或0x278上的I / O映射,并且我使用了ioperm(0x378,2,1)函数来授予在Linux下直接访问的特权。 之后,我可以使用outb(data,0x378)inb(0x378+1)函数(使用#include )简单地进行读写。 (我使用root特权运行它,或者使用了setuid权限。)

但是现在我有一个没有任何并行端口的较新的主板GA-870A-USB3。 我在图片上似乎买了一块并行PCI卡。 由于主板的缘故,我不得不选择PCI接口。(我认为使用ISA总线没有问题,但是今天主板上没有ISA总线。)

我能否以上述相同的方式从C程序访问Linux下该PCI打印机卡上的DB-25引脚,或者如何使用该卡的I / O引脚?(最好是位更改速度约为.5-1毫秒。使用旧的P4主板在认的并行端口(0x378)上可以轻松执行此位速率。尽管我对硬件的通信协议对位速率不敏感。)>

续在10月5日。
我插入并拔出了上面的PCI I / O卡,便意识到这条线
03:06.0 Serial controller: TXIC Device 5073 (rev 10)
与我的卡有关。
这是详细的列表:

lspci -vvvxxxs 03:06.0
03:06.0 Serial controller: TXIC Device 5073 (rev 10) (prog-if 02 [16550])
Subsystem: TXIC Device 3273
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- disINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 20
NUMA node: 0
Region 0: I/O ports at cf00 [size=8]
Region 1: I/O ports at ce00 [size=8]
Region 2: I/O ports at cd00 [size=8]
Region 3: I/O ports at cc00 [size=8]
Kernel driver in use: serial
00: 51 46 73 50 01 00 00 02 10 02 00 07 00 00 00 00
10: 01 cf 00 00 01 ce 00 00 01 cd 00 00 01 cc 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 51 46 73 32
30: 00 00 00 00 00 00 00 00 00 00 00 00 03 01 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 51 46 73 50 01 00 00 02 10 02 00 07 00 00 00 00
90: 01 cf 00 00 01 ce 00 00 01 cd 00 00 01 cc 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 51 46 73 32
b0: 00 00 00 00 00 00 00 00 00 00 00 00 03 01 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

此I / O卡只有一条记录是正常的, 但是此卡占用两个串行端口和一个并行端口?

我可以看到有一些编写设备驱动程序的漂亮文档:
https://lwn.net/Kernel/LDD3/
https://www.kernel.org/doc/html/latest/PCI/pci.html#

但是,我希望我可以使用C程序从用户上下文访问I / O卡。 我已经安装了PCI Utilities软件包:pciutils-3.7.0.tar.gz
来自:https://git.kernel.org/pub/scm/utils/pciutils/pciutils.git
我已经使用root用户用户上下文运行了example.c,我可以 得到与lspci相似的列表。

访问I / O卡是否是正确的计划?

我认为这是我的主要问题:我怎么知道我的PCI卡256字节的含义? 我认为它们为两个串行和一个并行接口提供了控制/状态和数据传输。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)