2012-01-23 3 views
2

Как бы переместить ARM исключения векторов?Переместить векторы исключения ARM?

В принципе, мне нужно, чтобы иметь возможность переназначить их в пути, так что, когда ядро ​​ARM пытается выполнить вектор, он должен выполнить вектор пользовательских исключений, который хранится в RAM битого ядра, а не в ROM то есть на 0x0. Это возможно? Или я собирался перенаправить прерывания в ядро ​​с ROM?

По существу, есть способ рассказать ядро ​​ARM, «вот новый адрес для вашей векторной таблицы»? Я знаю, что вы можете запустить CPU в режиме высоких векторов, но это не то, что я ищу. Я должен иметь возможность динамически устанавливать векторную базу в пользовательский адрес.

ответ

5

Это сильно зависит от того, с чем вы работаете.

Чипы Cortex-M3 могут изменять базовый адрес, используя регистр смещения векторной таблицы (VTOR) в блоке системного управления. Некоторые реализации могут ограничивать возможные адреса.

Из «традиционных» чипов (ARM7/9, Cortex-A/R) я думаю, что ни один из них не позволяет указать произвольную базу, хотя большинство из них могут переключаться между 00000000 и FFFF0000, а некоторые позволяют использовать адрес «начало ОЗУ».

Однако, если чип имеет MMU, вы можете, как правило, отображать страницу RAM на FFFF0000 и копировать свои обработчики. Я считаю, что это то, что делает Linux.

+1

для ARMv7 (Cortex-A7, -A8 и т.д.) поиск Vbar, MVBAR и HVBAR в архитектурном справочном руководстве для перемещения таблицы исключений. –

1

Более того, если ваш процессор имеет расширение безопасности, вы можете принять использование Vbar (Vector Base адресный регистр)

MCR p15, 0, <Rt>, c12, c0, 0

Смотрите B4.1.156 в ARM Architecture Reference Manual.

0

Системный регистр VBAR определяет базовый адрес таблицы векторов. VBAR можно изменить с PL1 или выше. Как и большинство системных регистров, VBAR также используется для обеспечения безопасности (TrustZone).

1

Для процессора cortex-A9 это можно сделать, используя регистр VBAR в регистре сопроцессора Cp15. Целью Регистра векторного базового адреса является сохранение базового адреса для вектора исключения монитора.

MRC p15, 0, <Rd>, c12, c0, 0 ; Read Secure or Non-secure Vector Base Address Register 
MCR p15, 0, <Rd>, c12, c0, 0 ; Write Secure or Non-secure Vector Base Address Register