我使用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