我在许多项目中使用模拟/数字 I/O 卡(数字万用表-16-AT来自 Diamond Systems),这是一种 PC/104(ISA 等效)卡。
问题是,地址 BASE + 3 处有 8 个数字输出,在启动时为 0V,但在启动过程中约 10 秒后为 5V(逻辑 1)。我怀疑另一个内核驱动程序或程序等正在该地址写入。有没有办法“监视”对特定地址的写入以追踪问题?
注意:基地址是0x300,Linux的总启动时间约为45秒,因此与我自己的程序无关。
从数据表:
Base + 3 写入数字输出端口
+-------+-------+-------+-------+-------+-------+-------+-------+
Bit No. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+-------+-------+-------+-------+-------+-------+-------+-------+
Name | DOUT7 | DOUT6 | DOUT5 | DOUT4 | DOUT3 | DOUT2 | DOUT1 | DOUT0 |
+-------+-------+-------+-------+-------+-------+-------+-------+
这些引脚直接对应于 I/O 连接器 J3 上的同名引脚。
上电或复位时,输出寄存器被清零。
答案1
您可以告诉内核不要探测某些地址。来自男人启动参数:
reserve=iobase,extent[,iobase,extent]...
Reserve 启动时间参数指定不应探测的 I/O 端口区域。设备驱动程序不会探测保留区域,除非另一个引导参数明确指定它这样做。
reserve=0x300,32 blah=0x300
阻止除“blah”驱动程序之外的所有设备驱动程序探测 0x300-0x31f。
当然,它仍然可能是引导加载程序(例如grub)在进行探测。