Функция printk() принимает неверные аргументы при выводе их содержимого
Когда я отлаживаю код ядра (связанный с управлением памятью), я сталкиваюсь с проблемами с функцией printk() (так же, как при использовании pr_info ()). На нем напечатано неверное содержание аргументов.
static int __init rcar_gen2_scan_mem(unsigned long node, const char *uname,
int depth, void *data)
{
.... /* some code here */
mrc->reserved = SZ_256M;
....
/* keep the area at top near the 32-bit legacy limit */
mrc->base = base + size - mrc->reserved;
mrc->size = mrc->reserved;
pr_info("DEBUG2: mrc->base=0x%08lx\n", mrc->base);
pr_info("DEBUG2: mrc->reserved=0x%08lx\n", mrc->reserved);
pr_info("DEBUG2: mrc->size=0x%08lx\n", mrc->size);
pr_info("DEBUG2: base=0x%08lx\n", base);
pr_info("DEBUG2: size=0x%08lx\n", size);
pr_info("DEBUG: %s , base=0x%08lx, size=0x%08lx, mrc->reserved=0x%08lx, mrc->base=0x%08lx, mrc->size=0x%08lx\n", __func__, base, size, mrc->reserved, mrc->base, mrc->size);
return 0;
}
А вот что распечатывает на терминал:
DEBUG2: mrc->base=0x00000000
DEBUG2: mrc->reserved=0x00000000
DEBUG2: mrc->size=0x00000000
DEBUG2: base=0x00000000
DEBUG2: size=0x00000000
DEBUG: rcar_gen2_scan_mem , base=0x40000000, size=0x00000000, mrc->reserved=0x40000000, mrc->base=0x00000000, mrc->size=0x10000000
Я ожидаю, что значение, напечатанное в DEBUG2, будет таким же, как в DEBUG, но все же странно, потому что значения base, mrc->reserved, mrc->size были разными. Более того, каждая пара значений была напечатана в строках, которые находятся рядом друг с другом.
Это ошибка функции printk()? Или что-то другое?
Кто-нибудь может помочь?