0

在此处输入图像描述

以前在我的 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 <sys/io.h> )进行简单的读写操作。(我让它以 root 权限运行,或者我使用了 setuid 权限)。

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

我能否以与上述相同的方式从我的 C 程序在 Linux 下访问此 PCI 打印机卡上的 DB-25 引脚,或者如何使用此卡的 I/O 引脚?(优选的比特变化速度约为 0.5-1 毫秒。这个比特率很容易在默认并行端口 (0x378) 上使用旧 P4 主板执行。虽然我的硬件通信协议对比特率不敏感。 )

续。在 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卡只有一条记录,但是这张卡占用2个串口和1个并口,这正常吗?

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

但我希望我可以使用我的 C prg 从用户上下文访问我的 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 字节的含义? 我认为它们为两个串行和一个并行接口提供控制/状态和数据传输。

4

0 回答 0