由于页面错误而导致值不匹配

时间:2020-06-17 10:35:43

标签: linux-device-driver kernel-module mmap memory-mapped-files page-fault

我正在编写一个伪字符设备驱动程序。还有另一个 util 程序可以处理该驱动程序的文件。 util 程序从用户处获取一条消息字符串,并将其填充到设备文件中。我面临的问题是,当发生页面错误时,先前写入文件的字符正在当前位置写入。下图显示了它:

假设在写“ ... test ..”时页面错误发生在“ t”,我的页面大小是4096 然后 dev_mem [4095] =='t',这是可以预期的。 dev [4096]也是“ t”,应该是“ e”。从那里开始,它是在写这个转换后的版本,而不是原始版本。

我正在使用内存映射的I / O,页面错误在驱动程序文件中处理。在这种情况下,我使用“ MAP_POPULATE”进行预取。由于页面是预取的,因此我不认为此错误是否可归因于页面错误。 在每个页面错误中都会发生这种情况。我不明白哪里出了问题。应该清除缓存还是什么?任何帮助表示赞赏。

预先感谢

0 个答案:

没有答案