2015-04-09 1 views
1

Я изучаю QSB i.MX53 и расширения TrustZone. Я запускаю ОС в безопасном мире благодаря загрузчику U-Boot. Теперь я в безопасном мире. У меня есть три вопроса:i.MX53 QSB и ARM TrustZone

  • Первый вопрос: когда я должен делиться памятью и прерываниями между безопасным и нормальным миром?
  • Во-вторых, как я могу перейти в нормальный мир, чтобы запустить на нем богатую ОС?
  • Третий вопрос касается кода режима мониторинга, где я должен его писать? Является ли это модулем ядра в безопасном мире?
+0

См. Также: [TZ scheduler] (http://stackoverflow.com/questions/22659472/arm-trustzone-behaviour-of-the-scheduler-in-secure-and-non-secure-os) вопрос. –

ответ

1

.. когда следует делиться памятью и прерываниями между безопасным и нормальным миром?

Распределение памяти зависит от ваших системных требований/дизайна. Можно использовать smc, чтобы использовать регистры только для обмена информацией. Никто не может дать общий ответ на обмен памяти.

Редко имеет смысл делиться прерываниями. Вам понадобится драйвер в обоих мирах. Весь смысл trustzone - это разделение аппаратного обеспечения.

Некоторые аппаратные средства trustzone осведомлены. То есть, он может изменить его регистр/представление на основе того, что мир выполняет. Как правило, это аппаратное обеспечение имеет только прерывание для одного мира или отдельный номер прерывания. Если у вас нет устройства trustzone, это, вероятно, глупо, что нужно попробовать.

.. как я могу перейти в нормальный мир, чтобы запустить на нем богатую ОС?

Ну, это довольно просто, когда у вас есть режим монитора. Таким образом, с безопасной загрузки (возможно, безопасная ОС задача/нить),

  1. Загрузите нормальный мир OS памяти.
  2. Установка режима монитора и других контекстов; для режима мониторинга требуется буфер памяти для хранения мировых контекстов.
  3. Переключиться в режим мониторинга.
  4. Настройка разметки памяти (в принципе разрешить все для нормального мира).
  5. Изменить NS бит, чтобы установить нормальный мир CP15.
  6. Конфигурирование CP15 регистрируется в соответствии с загрузкой по умолчанию. Многие операционные системы ожидают, что они будут загружаться в обычном режиме. Большинство trustzone ЦП не настраивают нормальный мир CP15 регистры по умолчанию.
  7. Маска прерывает, выключает кеш и т. Д., Как требуется для загрузки обычная ОС.
  8. С NS бит все еще установлен, сделать мировой переключатель.

Мировой выключатель зависит от конструкции вашей системы. Если безопасный мир OS используется только регистры R0-R12 инструкция может быть как,

# NS bit is set. 
    msr  spsr_fsxc, lr # mon_lr contains normal world mode, etc. 
    ldm sp, {r0 - r12, pc}^ # monitor 'sp' is a context pointer. 

The ldm rX, {xxx, pc}^ будет делать переключатель режимов работы. Монитор «sp» может иметь 13 нулей (для r0-r12), а затем нормальную точку входа в мир для «ПК». Монитор «lr» будет иметь режим запуска (прерывание в масках и т. Д.) Для нормального мира.

ПРИМЕЧАНИЕ: Это простой пример, который не предназначен для вашей конкретной ОС. Это только концептуально. Специфика зависит от конкретных нормальных/безопасных требований мировой ОС. Как правило, вам нужно сделать все, что загрузочный загрузчик сделает для этой платформы/ОС без TrustZone. Кроме того, вам необходимо инициализировать все регистры во всех режимах. Вам могут не нравиться регистры, которые безопасный мир не использует (NEON/VFP), и оставлять их в соответствии с загрузочными значениями по умолчанию; это более верно для реального кода «world switch».

... относительно кода режима монитора, где его записать? Является ли это модулем ядра в безопасном мире?

Monitor mode will always USE the CP15 registers of the secure world. Это означает, что режим мониторинга имеет вид MMU, кеш и т. Д. Защищенной ОС. Когда бит «NS» установлен, а режим мониторинга делает mcr или mrc, он устанавливает нормальные мировые регистры. Ну, технически это может быть «отдельно», вероятно, будет много взаимодействия между защищенной ОС и монитором. Опять же, это зависит от специфики. Есть много типов операционных систем (или мировые контексты),

  1. режим опроса
  2. невытесняющего
  3. Преимущественного

Вы перестановки выше для обоего безопасных и нормального мировое и мировое управление переключением будет зависеть от требований обоих. Для наиболее сложного случая (Pre-emptive secure/normal) вам нужна интеграция планировщиков, зависящих от ОС.

+0

Спасибо за ваш ответ !!! но у меня все еще есть вопросы относительно второго пункта **, как я могу перейти в нормальный мир, чтобы запустить Rich OS на нем. ** Если я понимаю, я должен запустить безопасную ОС благодаря u-boot для примера. После этого в потоке в этой защищенной ОС я реализую все, что связано с инициализацией системы мониторинга, после чего я вызываю SMC для перехода в режим монитора ... ect? Это не u-boot как загрузчик для нормального мира, который сделает это, я должен сделать это вручную? Второй вопрос касается репозитория github, с которым я столкнулся с этим – EngineerN

+0

. В этом репо [link] (https://github.com/finallyjustice/liboot-tz) человек использовал u-boot-2009 в качестве защищенной ОС и Linux как богатая ОС. Можете ли вы показать мне, в каком файле, все мы говорим о i.e **, как я могу перейти в обычный мир, чтобы запустить Rich OS на нем? – EngineerN

+0

Переключатель находится в моем ответе 'ldm rX, {xxx, pc} ^' несколько раз. 'Smc' используется для вызова из ** нормального мира ** в ** monitor-> secure world **. «Libboot-tz» имеет файлы ** u-boot/arch/arm/lib/tz-secure * .S **; это код для изучения. Он использует 'msr spsr_cxsf, # mode_SVC' и' movs pc, lr' для выполнения начального вызова. Это не так эффективно, как мое предложение. Код монитора может использовать один и тот же контекстный переключатель; но он настраивает оба. Кроме того, я думаю, что эта настройка - это режим безопасного опроса, защищенный мир/упреждающая ОС. Это упрощает реализацию режима монитора. * u-boot * не является ОС. –

2

Подумайте о безопасном коде монитора как о гипервизоре, который оповещает безопасную ОС и незащищенную ОС. Как правило, это была бы отдельная прошивка для простого металлического прожектора, которая в основном просто посылает вызовы и прерывания на защищенную ОС. Я полагаю, что технически это может быть полностью интегрировано в безопасную ОС, но это борется с возможностью повторного использования и открывает возможности для гораздо большего дыры безопасности, поэтому, как правило, было бы крайне не приветствуется.

Код монитора также несет ответственность за переключение в мире - как только защищенная ОС будет запущена и запущена, он должен вызывать на монитор, который устанавливает SCR.NS и выполняет возврат исключения к незащищенному мир, чтобы начать незащищенный загрузчик.

Что касается совместного использования ресурсов между безопасными и незащищенными, это полностью зависит от того, что вы хотите сделать - относительно простая защищенная полезная нагрузка, такая как программный TPM, возможно, вообще не нужны общие ресурсы; что-то вроде полной защиты содержимого контента включает в себя передачу буферов и целых устройств между мирами и намного сложнее.

+0

Благодарим за отзыв.Но на практике предположим, что у меня есть безопасная ОС и Rich OS и U-Boot в качестве загрузчика. Это U-Boot, который загружает безопасный мир, устанавливает программное обеспечение защищенного монитора и называет конструкцию SMC? Или я должен сделать это вручную после загрузки защищенной ОС? И можете ли вы дать более подробную информацию, если у вас есть ответ, пожалуйста, – EngineerN

+0

Мне неизвестен код в «u-boot», который работает в режиме мониторинга; он может иметь код заглушки для обработки какой-то «гипервизорной» загрузки на 64-битных ARM-процессорах. Если в «u-boot» отсутствует код (общедоступный источник, который вы можете посмотреть для вашей конкретной версии), то, конечно, вы должны реализовать его самостоятельно. –

+0

@EngineerN IIRC (из защищенного загрузочного кода Exynos 5410), из сброса U-Boot SPL выполняет базовую инициализацию платы, переводит U-Boot непосредственно в ОЗУ, загружает blob встроенной программы в безопасную SRAM и просто перескакивает на нее. Затем прошивка устанавливает свои собственные векторы монитора и возвращает выполнение в незащищенную копию ОЗУ точки входа U-Boot. Однако это была совсем другая система, поэтому лучше всего взглянуть на код U-Boot от Freescale - если они не используют SPL и не запускают все это в безопасном мире, тогда вы сами по себе начался нормальный мир. – Notlikethat

Смежные вопросы