Я ARM Cortex A9 CPU с 2 ядрами. Но я просто использую 1 ядро, а другой - только в замкнутом цикле. Я настраиваю таблицу MMU с использованием раздела (1 МБ на запись) следующим образом:ARM bare-metal с MMU: записывать в неперехватываемую, небуферируемую отображаемую область сбой
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. Будет хорошо, если кто-нибудь может дать мне какое-то объяснение. Огромное спасибо.
У вас есть 0x15000000, нанесенный на два разных места? Как вам это удалось? –
@ dwelch: Я предполагаю, что левая сторона - это физические адреса. – unixsmurf
Как вы знаете, что запись не происходит до сброса кеша? Я собираюсь взять удар в темноте, но вы пишете до '0x95000000', но читаете с' 0x15000000' (у которого могут быть устаревшие данные в кеше)? – tangrs