ioremap — невозможно обработать запрос на пейджинг ядра по виртуальному адресу XXXXXXXX

Я пытаюсь получить доступ к заданной области памяти на процессоре am335x в Linux. Идея состоит в том, чтобы сначала назначить физические адреса, а затем получить доступ к этим адресам, используя ioremap. Я уже некоторое время гуглю эту проблему, но, похоже, не могу найти хороших решений.

Функции для выполнения этих задач следующие:

Функция для получения физических адресов:

static int initPaddr(struct regref **reg, long unsigned int *base, int count)
{
    int i;

    reg = kmalloc(sizeof(struct regref*) * count, GFP_KERNEL);
    for(i = 0; i < count; i++)
        reg[i] = kmalloc(sizeof(struct regref), GFP_KERNEL);

    for(i = 0; i < count; i++)
        reg[i]->paddr = REG_ADDR(base, regArray[i]);

    return 0;
}

Функция для регистрации виртуальных адресов:

static int initVaddr(struct regref **reg, int blocksize, int count)
{
    int i;

    for(i = 0; i < count; i++)
        reg[i]->vaddr = (unsigned long*) ioremap( (unsigned long) reg[i]->paddr, blocksize);

    return 0;
}

Здесь regArray[] — это просто массив, содержащий все соответствующие физические адреса, а структура regref определяется следующим образом:

struct regref = {
    long unsigned int *paddr;
    long unsigned int *vaddr;
};

Чтобы код компилировался, но когда я пытаюсь его загрузить, я получаю следующую ошибку:

Unable to handle kernel paging request at virtual address 702f7373

Где адрес может меняться.

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


person Tom    schedule 24.06.2014    source источник


Ответы (1)


Оказывается, ошибка была не в коде выше, а где-то еще. Приведенный выше код является рабочим примером использования ioremap().

person Tom    schedule 25.06.2014
comment
Можете ли вы поделиться немного больше о том, что было проблемой? Это не очень полезно, как это. - person tothphu; 05.07.2016