我使用sparse linux tool
来清除代码中的噪音。假设我有以下文件abc.c
定义为结构:void __iomem *和void * __iomem之间的区别?
static struct check1 {
void __iomem **base_regs;
};
在同一个文件abc.c
。我有以下的代码线以及(设X为正整数):
壳体1:
static struct check1 *check1_var;
struct check2 {
void* __iomem base= check1_var -->base_regs[X];
}
壳体2:
struct check2 {
void __iomem *base= check1_var-->base_regs[X];
}
在情况1中,我我收到以下警告
warning: incorrect type in initializer (different address spaces)
但是,当我切换到第2种情况时,此警告消除。
我的问题是:void __iomem *
和void* __iomem
之间有什么区别。在我看来,他们应该是一样的?请帮我在这里,我没有得到为什么这个警告的情况下遭到移除2.
http://stackoverflow.com/questions/19100536/what-is-the-use-of-iomem-in-linux-while-writing-device-drivers – 2014-10-29 09:03:22
@ ANBU.SANKAR谢谢你在这里分享。但我已经经历了这个,但没有找到我的答案。正如你在'结构check1'看到'base_regs'还标有'__iomem'并在这两个情况下,我分配'__iomem'标记指针则什么区别。 ? – 2014-10-29 09:06:20
@AmitSharma阅读http://lwn.net/Articles/102232/。这显示了类似的讨论https://lkml.org/lkml/2014/9/24/1187。 – iqstatic 2014-10-29 10:08:56