Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Cortex A8 MMU
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11446
Страница 1 от 3

Автор:  relsys [ Пон Юни 10, 2013 11:56 pm ]
Заглавие:  Cortex A8 MMU

Защо след като спра MMU модула и после го пусна отново, процесорът не може да продължи изпълнението ...?

Автор:  relsys [ Вто Юни 11, 2013 10:11 am ]
Заглавие:  Re: Cortex A8 MMU

Предполагам, това ще да е причината, или има и още нещо:

Цитат:
After a CP15 c1 instruction enables the MMU, the processor flushes all following instructions in the pipeline. The processor then begins refetching instructions, and the MMU performs virtual-to-physical address mapping according to the translation table descriptors in main memory.

After a CP15 c1 instruction disables the MMU, the processor flushes all following instructions in the pipeline. The processor then begins refetching instructions and uses flat address mapping. In flat address mapping, PA = VA.

Автор:  ДедоБоре [ Вто Юни 11, 2013 10:22 am ]
Заглавие:  Re: Cortex A8 MMU

имаш предвид да изключиш изобшо контролера, или да сменяш нещо по таблиците?

не се сещам за някаква причина да спираш MMU, че пък после да го пускаш пак...
може ли да дадеш по-подробно примерче?

Автор:  relsys [ Вто Юни 11, 2013 11:34 am ]
Заглавие:  Re: Cortex A8 MMU

Нищо не сменям, само го спирам, за да получа достъп до паметта на адреси 0xFFxx xxxx... и после го пускам пак.
Или пък ако знаете друго решение за достъп до тази област докато си е пуснат MMU контролера?

Автор:  palavrov [ Вто Юни 11, 2013 11:50 am ]
Заглавие:  Re: Cortex A8 MMU

relsys написа:
Нищо не сменям, само го спирам, за да получа достъп до паметта на адреси 0xFFxx xxxx... и после го пускам пак.
Или пък ако знаете друго решение за достъп до тази област докато си е пуснат MMU контролера?

Ако си под линукс си има функция на кернела за мапване на какъв да е физически адрес в адресното пространство на програмата ти в юзер спейс.
Трябва да мапнеш /dev/mem с mmap() и си готов. Виж в гугле за примери ...

Автор:  relsys [ Вто Юни 11, 2013 1:36 pm ]
Заглавие:  Re: Cortex A8 MMU

palavrov написа:
relsys написа:
Нищо не сменям, само го спирам, за да получа достъп до паметта на адреси 0xFFxx xxxx... и после го пускам пак.
Или пък ако знаете друго решение за достъп до тази област докато си е пуснат MMU контролера?

Ако си под линукс си има функция на кернела за мапване на какъв да е физически адрес в адресното пространство на програмата ти в юзер спейс.
Трябва да мапнеш /dev/mem с mmap() и си готов. Виж в гугле за примери ...


Да де, но аз не искам да пиша под линукса, а да го дебъгвам...

Автор:  palavrov [ Вто Юни 11, 2013 2:56 pm ]
Заглавие:  Re: Cortex A8 MMU

Ако на този Cortex A8 си пуснал някакъв линукс, това е начина да четеш който и да е регион на паметта без да спираш MMU-то му. Ако ще дебъгваш май един JTAG ще ти свърши по добра работа. Спирането на MMU-то си е тънка работа, ако искаш да го правиш трябва да си подсигуриш, че кода който ще се изпълни след като го спреш е на същия физически адрес какъвто е и виртуалния му в момента.

Автор:  relsys [ Вто Юни 11, 2013 3:26 pm ]
Заглавие:  Re: Cortex A8 MMU

palavrov написа:
Ако на този Cortex A8 си пуснал някакъв линукс, това е начина да четеш който и да е регион на паметта без да спираш MMU-то му. Ако ще дебъгваш май един JTAG ще ти свърши по добра работа. Спирането на MMU-то си е тънка работа, ако искаш да го правиш трябва да си подсигуриш, че кода който ще се изпълни след като го спреш е на същия физически адрес какъвто е и виртуалния му в момента.


Именно през JTAG. Трябва да накарам JTAG-а да чете тези адреси, след като линукса пусне MMU модула...

Автор:  tgi [ Вто Юни 11, 2013 3:46 pm ]
Заглавие:  Re: Cortex A8 MMU

Въобще не ти знам процесора ама спиране/пускане на MMU има кой знае колко
последици дето нито се виждат, нито ги знае някой (освен тоя дето е кроил
логиките а и той сигурно отдавна ги е забравил :) ). Примерно ако MMU-то
е с кеш за транслираните адреси знаеш ли го какво става с тоя кеш.

Ама щом просто искаш през JTAG да пипнеш адрес нямаш ли опцията просто
физически адрес да му кажеш да пипне? Или няма ли BAT (Block Array Translation)
както в power с приоритет над page translation да навреш адресите дето ти
трябват в такъв (обиконвено голям) блок и да мирясаш? Ако въпросният адрес
е вън от чипа на процесора винаги имаш и опцията да го прочетеш ползвайки
boundary scan - ако toolchain-ът то го може, разбира се.

Но да ти кажа и аз не бих се засилил да спирам и пускам MMU-то насред вече
сбутнат DPS, това си е откачено начинание :) . Е, мога да се бутна и "без"
MMU (всъщност е със ама транслацията е 1:1) та не би ми се и наложило
предполагам.

Автор:  relsys [ Вто Юни 11, 2013 3:51 pm ]
Заглавие:  Re: Cortex A8 MMU

Явно аз се изразявам грешно.....

Аз трябва да осъществя тази функция на туулчейна/дебъгера... без да променям конфигурацията на ОС, или каквото и да е там.

Както чете 0x80хх хххх, така да се държи и ако е 0хFFxx xxxx....

За кеша пише, че се затрива при пускане/спиране....

Автор:  tgi [ Вто Юни 11, 2013 4:27 pm ]
Заглавие:  Re: Cortex A8 MMU

Е това с кеша е навярно значи, щом се трие при пускане/спиране как да продължи ОС-ът
след това.

Автор:  relsys [ Вто Юни 11, 2013 4:38 pm ]
Заглавие:  Re: Cortex A8 MMU

tgi написа:
Е това с кеша е навярно значи, щом се трие при пускане/спиране как да продължи ОС-ът
след това.


Е така де, дай идея някаква...

Автор:  tgi [ Вто Юни 11, 2013 5:09 pm ]
Заглавие:  Re: Cortex A8 MMU

Ми не ти познавам процесора/архитектурата та не мога да давам идеи.

В моите бих покрил адреса който ме интересува в някой от всичките блок-транслации
и нуждата да спирам MMU-то би отпаднала.
То въобще това, което трябва да гониш като резултат е как да си свършиш работата
ползвайки само логически адреси след като си пуснал MMU-то, някак да му осигуриш
фиксирана транслация към твоя адрес. Може би има начин да го направиш преди да сбутясаш
линукса, след това навярно е късно (такива работи стават по-лесно в процеса на самото
бутване, аз основно там ги правя - е понякога ги правя и другаде ама това предполага
пълно познаване на целия код от рисет до приложение което едва ли ти е така с тоя
линукс).

Автор:  ДедоБоре [ Вто Юни 11, 2013 6:44 pm ]
Заглавие:  Re: Cortex A8 MMU

tgi написа:
...

така де, MMU се пуска в началото, много преди за почнеш да зареждаш кернели.
наистина трябва да познаваш машинката, но не е толкова необозримо като задача.

обаче след като вдигнеш кернел... трябва вече да го знаеш и той какво маже. щото заемане/освобождаване на памет и ремапване на пространства за видео, PCI и т.н. става с активното СЪУЧАСТИЕ на MMU под мъдрото ръководство на кернела. а това е любимото място за мазане на всички активисти с прогресивни идеи...

но съм абсолютно сигурен, че спирането на MMU на работещ кернел е катастрофа. за повторно пускане, дори със същите дескриптори пък и дума не може да става. при това, без да е намесена виртуализация. не случайно в х386 има инструкция само за пускане. спирането става с ресет.

и изобщо да ровиш през JTAG-а в работещ линукс е лудница.

Автор:  ike [ Вто Юни 11, 2013 7:40 pm ]
Заглавие:  Re: Cortex A8 MMU

ДедоБоре написа:
не случайно в х386 има инструкция само за пускане. спирането става с ресет.

Цитат:
By design, the 286 could not revert from protected mode to the basic 8086-compatible "real mode" without a hardware-initiated reset. In the PC/AT introduced in 1984, IBM added external circuitry as well as specialized code in the ROM BIOS to enable special series of program instructions to cause the reset, allowing real-mode reentry (while retaining active memory and control). Though it worked correctly, the method imposed a huge performance penalty.

http://en.wikipedia.org/wiki/Intel_80286

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/