我正在编写一个伪字符设备驱动程序。还有另一个 util 程序可以处理该驱动程序的文件。 util 程序从用户处获取一条消息字符串,并将其填充到设备文件中。我面临的问题是,当发生页面错误时,先前写入文件的字符正在当前位置写入。下图显示了它:
假设在写“ ... test ..”时页面错误发生在“ t”,我的页面大小是4096 然后 dev_mem [4095] =='t',这是可以预期的。 dev [4096]也是“ t”,应该是“ e”。从那里开始,它是在写这个转换后的版本,而不是原始版本。
我正在使用内存映射的I / O,页面错误在驱动程序文件中处理。在这种情况下,我使用“ MAP_POPULATE”进行预取。由于页面是预取的,因此我不认为此错误是否可归因于页面错误。 在每个页面错误中都会发生这种情况。我不明白哪里出了问题。应该清除缓存还是什么?任何帮助表示赞赏。
预先感谢