我一直在阅读Linux设备驱动程序第3版,并在QEMU中运行linux 2.6 . 但是,我需要真正的硬件 . 我试图在QEMU中模拟一个paralleport连接器而没有运气 . 主机没有并行端口连接器 .

qemu-system-x86_64 -parallel file:outputfile  --enable-kvm -smp 2   -initrd initramfs.igz -kernel arch/x86/boot/bzImage -m 1024 -append "console=ttyS0 loglevel=8" -nographic

然后我写了一个模块来通过 request_region(0x378,1,"parallelport"); 访问并行端口连接器 . 但是,每当我尝试写入ioport区域时,在引导QEMU的工作目录中的文件"outputfile"中都看不到任何输出 . 我还在内核中添加了 CONFIG_PARPORT 选项并添加了一些相关的CONFIG(即CONFIG_PARPORT_PC ...),它似乎只添加了linux内置驱动程序或注册了一个IRQ处理程序 . 有了这个,我仍然无法写入主机上的parallelport "outputfile" .

但是,我可以读写ioport区域(意思是我用 outb 写的任何东西都可以用 inb 读取 . 但是,它不会被写入并行端口 outfile ,这让我相信某些东西仍然是错误的 .

我想知道我是否可以得到一些关于我可能做错了什么或如何开始这个问题的建议?我发现的唯一研究是qemu的不同paralleport选项(使用主机设备,udp等等),我试过没有运气 . 此外,使用outputfile选项或任何不需要主机并行端口的选项,是否可以模拟中断?

更新:在玩了一下之后,似乎从ioport写入和读取的操作正在工作(仍然没有出现在输出文件中) . 这是因为当我做 -parallel none 时,我可以获得ioport并写入它,但是从中读取会产生不可打印的字符(不是我输入的字符) . 默认情况下不会发生这种情况(指定没有 -parallel 选项或 -parallel file:outputfile 时) .

Update2:从QEMU -device 文档中我发现 -parallel 是遗留的 . 所以我把命令改为:

qemu-system-x86_64 -chardev file,path=./outputfile,id=parallel0 -device isa-parallel,chardev=parallel0,iobase=0x378,irq=7,index=0 --enable-kvm --smp 2   -initrd initramfs.igz -kernel arch/x86/boot/bzImage -m 1024 -append "console=ttyS0 loglevel=8" -nographic

然后加载驱动程序并创建一个chardev / dev / parallel0 . 但是,这仍然无效 .