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

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

По сути, мне нужно иметь возможность переназначить их таким образом, поэтому, когда ядро ​​ARM пытается выполнить вектор, оно должно выполнить пользовательский вектор исключений, который хранится в бите ОЗУ ядра, а не в ПЗУ, которое находится в 0x0, Это возможно? Или я должен направлять прерывания в ядро ​​из ПЗУ?

По сути, есть ли способ сообщить ядру ARM: "вот новый адрес для вашей таблицы векторов"? Я знаю, что вы можете запустить процессор в режиме высокого вектора, но это не то, что я ищу. Мне нужно иметь возможность динамически устанавливать векторную базу на произвольный адрес.

4 ответа

Решение

Это сильно зависит от ядра, с которым вы работаете.

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

Я думаю, что из "традиционных" чипов (ARM7/9, Cortex-A/R) ни один не позволяет вам указать произвольную базу, хотя большинство из них может переключаться между 00000000 и FFFF0000, а некоторые позволяют использовать "начало RAM"адрес.

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

Для процессора 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

Более того, если ваш процессор имеет расширение безопасности, вы можете использовать VBAR(Vector Base Address Address Register)

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

См. B4.1.156 в Справочном руководстве по архитектуре ARM.

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

Другие вопросы по тегам