Я работаю над расширением зоны доверия на Raspberry Pi B + с процессором ARM1176JZF-S. Согласно документации по arm11, будет по 3 таблицы векторов исключений для каждого защищенного мира, незащищенного (NS) мира и режима монитора, соответственно. А регистр c12 будет содержать базовый адрес как защищенной, так и базовой таблицы векторов исключений NS.
Я добавил оба этих адреса в регистр c12 в их соответствующих мирах (Secure / NS). Я пробовал SWI (svc) в обоих мирах. Я обнаружил, что он отлично работает в безопасном мире, но в мире NS управление передается обработчику сброса NS для SWI, а не обработчику SWI. Я использовал следующие команды:
For secure world :
LDR r0, =_start //_start - base address of secure vector table
MCR p15, 0, r0, c12, c0, 0
For Non-secure World :
LDR r0, =_ns_start //ns_start - base address of non-secure vector table
MCR p15, 0, r0, c12, c0, 0
Вот мой код: https://github.com/avk7vk/arm_bare_metal/tree/master/trustzone-smc
Пожалуйста, дайте мне знать о проблеме здесь.