来自Linux设备驱动程序的短驱动程序

时间:2018-04-02 17:00:11

标签: linux-device-driver parallel-port

我正在尝试从 Linux设备驱动程序一书中运行 short ,该驱动程序默认使用io地址库0x378上的pc的并行接口。我特意使用/ dev / short0设备。 从书中引用

  

/ dev / short0写入和读取8位端口   位于I / O地址库(0x378,除非在加载时更改)。

写操作(默认行为)基本上就是这样做

while (count--) {
   outb(*(ptr++), port);
   wmb( );
}

ptr变量包含指向用户请求写入设备的数据的指针。当然只有最后一个字节存在,因为先前的字节被覆盖。通过使用inb而不是outb,读取操作的工作方式类似。

也可以从书中引用

  

如果您选择从输出中读取   您最有可能回到写入端口的最后一个值(这适用于并行接口和常用的大多数其他数字I / O电路)

所以当我做的时候

$ echo -n "a" > /dev/short0
$ dd if=/dev/short0 bs=1 count=1 | od -t x1

正如书中所建议的那样,我希望能够找回“acii”的代码。十六进制,但我得到的是0xff:

1+0 records in
1+0 records out
1 byte (1 B) copied, 0,000155485 s, 6,4 kB/s
0000000 ff
0000001

我已经验证,添加了一些printks并使用了dmesg,驱动程序的相关代码实际上已被执行,除此之外,我还是我被卡住了。造成这种情况的可能原因是什么?或者我应该在哪里查看它为什么不起作用?

对于它的重要性,io地址范围0x378-0x37a最初是从parport模块分配的,所以i rmmod以及其他一些在加载短模块之前使用parport的模块。最后,在我的系统上uname -a给出了

Linux Crete 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:31:42 UTC 2014 i686 i686 i686 GNU/Linux

0 个答案:

没有答案