Зона доверия на неожиданном поведении Raspberry Pi?

Я работаю над расширением зоны доверия на 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

Пожалуйста, дайте мне знать о проблеме здесь.


person AvK    schedule 09.11.2014    source источник
comment
Нижние 5 бит регистра базового адреса вектора игнорируются, поэтому вам необходимо обеспечить выравнивание таблицы векторов по 32 байтам.   -  person unixsmurf    schedule 09.11.2014


Ответы (1)


В векторном регистре базового адреса (VBAR) нижние пять битов определены как «res0», что означает, что они будут игнорироваться и обрабатываться как ноль. В результате ваша векторная таблица должна быть выровнена по 32 байта. Достигнуто:

    .align 5
_ns_start:
    ldr pc, ns_Reset
    ...
person unixsmurf    schedule 10.11.2014