Я процессор ARM Cortex A9 с 2 ядрами. Но я использую только 1 ядро, а другое просто занято. Я настраиваю таблицу MMU, используя раздел (1 МБ на запись) следующим образом:
0x00000000-0x14ffffff => 0x00000000-0x14ffffff (non-cachable, non-bufferable)
0x15000000-0x24ffffff => 0x15000000-0x24ffffff (cachable, bufferable)
0x25000000-0x94ffffff => 0x25000000-0x94ffffff (non-cachable, non-bufferable)
0x15000000-0x24ffffff => 0x95000000-0xa4ffffff (non-cachable, non-bufferable)
0xa5000000-0xffffffff => 0xa5000000-0xffffffff (non-cachable, non-bufferable)
Это довольно просто. Я просто хочу иметь зеркало памяти объемом 256 МБ для некэшируемого доступа. Однако, когда я делаю несколько записей в раздел некэшируемой памяти по адресу 0x95000000-0xa4ffffff. Я обнаружил, что запись на самом деле не записывается, пока я явно не дам кэш-память.
Я что-то не так делаю или такое отображение недействительно? Если это так, то я не понимаю, как ioremap Linux будет работать на ARM. Было бы хорошо, если бы кто-нибудь мог дать мне какое-то объяснение. Большое спасибо.
0x95000000
, а читаете на0x15000000
(в кеше которого могут быть устаревшие данные)? - person tangrs   schedule 20.11.2013ioremap()
будет выделять только некэшируемые/небуферизуемые, он не отображает два раздела/страницы. - person artless noise   schedule 21.11.2013