2014-12-31 3 views
0

У меня есть цель ARM.ioremap не работает по физическому адресу

Мне нужно узнать физический адрес. Этот адрес является адресом в parralel NOR flash rom. Ром находится непосредственно на адресной шине.

если я создать модуль с:

if ((rmap = ioremap(ROM_BASE, ROM_SIZE)) == NULL) 
{ 
    printk(KERN_ERR "Mapping ROM failed\n"); 
    return -1; 
} 

(используя базовый размер 0x40000000 0x100) Если не удается: [+1091,270686] Mapping ROM не удалось insmod: ошибка вставки 'rom.ko': -1 Операция не разрешено

У цели нет/dev/mem в этом случае ... но с другим ядром у него..и прочитав такой же адрес работа. Таким образом, адрес правильный и читаемый.

Благодаря

+0

попробуйте увеличить размер, например 0x10000000, не имеет значения, если вы используете только 0x100. –

+0

#dwelch, спасибо .. но попробовали разные размеры, все тот же результат. – arnold

+0

часто больший размер помогает, о хорошо ... –

ответ

2

ioremap на руке заканчивается вызовом __arm_ioremap_pfn_caller с MTYPE = MT_DEVICE, что может потерпеть неудачу в ряде способов:

  • адрес не должен быть определен в качестве адреса памяти (проверьте MemInfo)
  • процесс может быть из VM пространства (маловероятном)
  • Там не может быть никаких записей свободной таблицы страниц (зависит от архитектуры)

Для получения дополнительной информации о распределении памяти памяти ARM this page

+0

Спасибо за информацию. Если я прав Linux, то 2.6 (как это есть) не проверяет адрес RAM. Но, проверяя это, я нашел функцию __arm_ioremap..просил ее, и она работает! Я уверен, что это не самый аккуратный способ ... но достаточно хорош для моей потребности в данный момент. Так как этот ответ заставил меня найти решение, я отмечаю его как принятое. Спасибо! – arnold

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