Я использую 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, I я получаю следующее предупреждение
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 –
@ ANBU.SANKAR Спасибо, что поделились им здесь. Но я прошел через это, но не нашел ответа. Как вы можете видеть в 'struct check1'' base_regs' также помечен '__iomem', и в обоих случаях я назначаю указатель тега' __iomem', в чем разница. ? –
@AmitSharma Читать это http://lwn.net/Articles/102232/. Это показывает аналогичное обсуждение https://lkml.org/lkml/2014/9/24/1187. – iqstatic