Переместить векторы исключения 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).