Trustzone: CPU0 незащищенный и CPU1 безопасный в

Я использую zynq-7000 (плата zed) с процессором A9 (двухъядерный). Я пытаюсь работать с Trustzone.

Я хочу настроить cpu1 для работы только в безопасном мире, а cpu0 для работы в обычном мире (petalinux). Я читал ug1019 и некоторые другие документы, но не мог понять, как этого добиться. Я нашел это,

MRC p15,0,<Rt>,c1,c1,0 ; Read SCR into Rt

MCR p15,0,<Rt>,c1,c1,0 ; Write Rt to SCR

где я могу настроить бит NS, но я не уверен, что он будет работать, и какой процессор будет переведен в безопасное/небезопасное состояние. Если кто-то может привести меня к некоторому примеру или идее.


person Khurram    schedule 02.09.2019    source источник


Ответы (1)


Я хочу настроить cpu1 для работы только в безопасном мире, а cpu0 для работы в обычном мире (petalinux).

Обычно CPU0 является загрузочным CPU, и во время загрузки необходимо запустить CPU1. Обычно ничего не нужно делать для загрузки в безопасном режиме. Итак, шаги во время загрузки CPU0, которые я считаю необходимыми,

  • раздел памяти между безопасным/нормальным миром.
  • создайте векторы/код монитора для обработки запросов обычного мира.
  • загрузите CPU1 в безопасном режиме.
  • загрузить лепестинукс в обычном мире

Вам нужно запретить обычному миру доступ к памяти в безопасном мире (или в этом мало смысла). Сюда могут входить устройства, которые нужны безопасному миру.

Есть несколько регистров, которые Linux должен обновить, доступ к которым возможен только через защищенный мир. Например, cache-l2x0 необходимо записать несколько безопасных регистров. В конечном итоге вам нужно будет использовать инструкцию SMC для изменения миров на CP0, чтобы получить разрешение на изменение этих регистров, а затем вернуться в Linux в обычном мире. SMC также будет полезен, если вы хотите обмениваться данными между CPU0 и CPU1 Linux.

Вам, вероятно, придется включить раннюю отладку загрузки, чтобы найти все проблемы, к которым Linux может потребоваться безопасный доступ. Частично это может быть связано с драйвером в системе Zync и проблемой безопасного/нормального мира. Другие проблемы заключаются в том, что банковские регистры CP15 нормального мира обычно являются мусором при загрузке, тогда как безопасные банковские регистры имеют известные значения.

Вам также потребуется изменить дерево устройств с любыми изменениями, внесенными на этапе раздел памяти. Например, вы можете захотеть, чтобы таймеры и т. д. имели RTOS на CPU1. Linux, очевидно, не может их использовать.

Петалинукс загрузки в обычном мире должен быть таким же, как uboot предоставит.


person artless noise    schedule 02.09.2019
comment
большое спасибо за ваш подробный ответ. Я буду смотреть в него. БР, КА - person Khurram; 03.09.2019