如何在Linux上模拟用于单元测试的内存I/O设备?
我正在为一些用于嵌入式部署的源代码编写单元测试。
该代码正在访问特定的地址空间,以便与芯片通信。
intervention.
对于如何解决这一问题,我能从哪里获得灵感呢?
普通用户能否以某种方式告诉MMU,必须在特定地址进行特定的内存分配。还是数据块必须位于特定的内存区域?
据我所知:
无法使用
谢谢
亨利·
发布于 2012-05-31 21:22:37
首先,使要读取的地址成为代码的注入依赖项,而不是硬编码依赖项。现在您不必担心测试条件下的位置,它可以是您喜欢的任何东西。
然后,您还可能需要将函数作为依赖项从/将其从/写入到魔术地址,这取决于您正在测试的内容。现在,您不必担心它将如何欺骗正在测试的代码,使其认为它正在执行I/O。您可以使用存根/模拟/任何硬件I/O行为。
在您描述的条件下测试低级代码是相当困难的,同时在非测试模式下保持它的超级效率,因为您不想引入太多的间接级别。
然而,“精确的源代码”可以隐藏大量的罪恶,这取决于您如何解释它。例如,您的“依赖项注入”可以通过宏进行,因此单元源是“相同的”,但是您已经完全改变了它使用鬼鬼祟祟的-D编译器选项所做的事情。
发布于 2012-05-31 21:46:17
AFAIK您需要创建一个块设备(我不确定字符设备是否工作)。创建一个将内存范围映射到自身的内核模块。创建读/写函数,因此每当触及内存范围时,就会调用这些读/写函数。
将这些读/写函数注册到内核中,这样,每当对这些地址进行读/写时,内核就会被调用,内核代表用户执行读/写功能。
https://stackoverflow.com/questions/10841410
复制相似问题