2014-10-23 4 views
2

При компиляции моего модуля, я получаю это предупреждение:Почему спецификатор формата `% pa` printk не распознается для типа` resource_size_t`?

# make modules 
    CC [M] /jriskhome/repos/module/my_module.o 
/jriskhome/repos/module/my_module.c: In function ‘_pci_probe’: 
/jriskhome/repos/module/my_module.c:882:3: warning: format ‘%p’ expects argument of type ‘void *’, but argument 7 has type ‘resource_size_t’ [-Wformat=] 
    pr_info("Mapped Bar %d: %p -> %pa (%pa)", bar_number, BAR, pci_resource_start(dev, bar_number), pci_resource_len(dev, bar_number)); 
^
/jriskhome/repos/module/my_module.c:882:3: warning: format ‘%p’ expects argument of type ‘void *’, but argument 8 has type ‘resource_size_t’ [-Wformat=] 

Я консультировался это: http://lxr.free-electrons.com/source/Documentation/printk-formats.txt?v=3.10 и она выглядит для меня. Ядро и версия компилятора являются:

# uname -r 
3.10.0-123.8.1.el7.x86_64 
# gcc --version 
gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-16) 
Copyright (C) 2013 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

Я могу бросить его, но было интересно, почему спецификатор формата не принимаются.

ответ

3

Из документации вы указали на:

Для печати типа phys_addr_t (и его производные, такие как resource_size_t), которые могут варьироваться в зависимости от вариантов сборки, независимо от ширины канала передачи данных CPU. Передано по ссылке.

Необходимо передать указатель на свое значение, а не само его значение. Я предполагаю, что этот поворот необходим именно для того, чтобы достичь вышеупомянутой независимости от существующих вариантов сборки.

+0

Спасибо. Я подумал, что это будет что-то простое. – Jamie

Смежные вопросы