我正在尝试使用函数outb(0x378,val)
写入我的lpt寄存器;
好吧..我尝试通过调用int ret=inb(0x378);
进行调试无论我之前使用ret=255
插入什么值,我总是得到outb
。
*我正在编写内核模式,因为我的程序是驱动程序,因此我没有使用ioperm()
等。
提前谢谢。
答案 0 :(得分:2)
您的outb
函数参数错误,正确的顺序是:
outb(value, port)
所以你必须改变你的代码:
outb(val, 0x378)
有关详细信息,请阅读Linux I/O Programming Howto
。
答案 1 :(得分:0)
您是否设置了方向寄存器?如果将其设置为输入,则您将读取端口上的内容。
答案 2 :(得分:0)
您是否知道您在该地址安装了并行端口?
给自己一个小型低电流LED。将长端插入引脚2(LSB)至引脚9(MSB)之一,短引脚插入引脚25(接地)。
尝试编写各种值,看看是否可以通过所写内容的位值来改变LED。
这应该有效(除非前面提到过你已经在输入模式下编程了)能够回读端口值不太确定,具体取决于并行端口的类型和实现细节(例如,你可能无法使用在原始PC中实现它的缓冲芯片
另请注意,大多数USB“打印机”适配器都不提供按位寄存器访问。悬挂在PCI或PCMCIA等上的东西也可能在传统端口地址处直接寄存器访问时出现问题。有很好的USB并行接口芯片,如FT245和后继产品,如果没有可用的芯片组“真正的”并行端口,你可以使用它。
答案 3 :(得分:0)
inb(0x378)不需要返回写入的内容;至少我看过筹码表现如此。好吧,既然你在某个时候已经打电话给outb,你知道到底是什么。