Функция 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()? Или что-то другое?

Кто-нибудь может помочь?

0 ответов

Другие вопросы по тегам