ARM Trust Zone - ошибка при переключении с SVC в режим мониторинга

Я новичок в ARM TrustZone, я немного играю с ним, пытаясь понять, как он работает (поэтому все последствия этого подхода для безопасности не важны для меня в данный момент). У меня есть плата Sabrelite с процессором iMX6 Cortex-A9, которая загружается в безопасном режиме (ядро Linux). Я написал простой модуль ядра, который должен переключать режим процессора с режима SVC на режим мониторинга, но в результате возникает ошибка сегментации.

Что не так с этим подходом?

Вот код:

static int __init hello_trustzone_init(void)
{
  int res = 0;

  printk(KERN_INFO "TZ - init trust zone - before monitor call\n");

  res = monitor();

  printk(KERN_INFO "TZ - init trust zone - after monitor call - %X\n", res);

  return 0;
}

и процедура сборки монитора:

#define cpsr_mode_mon       (0x16)

.global monitor
ENTRY(monitor)
        push    {r4-r8, lr}
.arch_extension sec
        CPS     #cpsr_mode_mon  // Move to monitor mode
        MRS     R0, CPSR    // Copy CPSR into R0
        pop {r4-r8, pc}
ENDPROC(monitor)

insmod этот модуль приводит к:

TZ - init trust zone - before monitor call
Bad mode in data abort handler detected
Internal error: Oops - bad mode: 0 [#1] PREEMPT SMP ARM

0 ответов

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