Помещение ядра 0 в незащищенный мир

Я использую пользовательскую плату с zynq-7000. Я запускаю два приложения на обоих ядрах. Я хочу поместить cpu0 в незащищенный мир и cpu1 в безопасный мир. Поскольку Cpu1 уже находится в безопасном мире, я пытаюсь сделать Cpu0 в незащищенном мире.

Я пытаюсь поместить cpu0 в нормальный мир и добавляю следующие строки в fsbl.

__asm__ (
    "MRC     p15, 0, r0, c1, c1, 0;"
    "ORR     r0,  r0, #0x1;"
    "MCR     p15, 0, r0, c1, c1, 0;"
);

Но, к сожалению, у меня система зависает, и некоторое время выдает «DATA_ABORT_HANDLER FSBL Status = 0xA304». Я добавил эти строки (инструкцию по сборке) в fsbl и попробовал как патч для u-boot (если я загружаю linux вместо baremetal-приложения).

Я также установил биты в регистрах TZ как незащищенные для тестирования.

Xil_Out32( TZ_OCM_RAM0, 0xffffffff);
Xil_Out32( TZ_OCM_RAM1, 0xffffffff);
Xil_Out32( TZ_OCM, 0xffffffff);
Xil_Out32( TZ_DDR_RAM, 0x0000ffff);

Может ли кто-нибудь сказать мне, куда идти отсюда?

Спасибо.


person Khurram    schedule 19.09.2019    source источник
comment
Это более важно, чем вы думаете. В соответствии с режимом монитора TZ и ifsr и т. д. вы можете установить Регистр CP15 для нормального мира из режима монитора. Банковские регистры CP15 имеют нормальные мировые значения, которые являются мусором при загрузке. Вам необходимо установить для них значения по умолчанию (перезагрузить безопасный мир) перед запуском кода. Также регистр ЦП ARM, вероятно, следует изменить перед входом в нормальный мир. Также сам Linux нуждается в некоторой поддержке со стороны безопасного мира, и вы должны предоставить ее через режим монитора SMC.   -  person artless noise    schedule 21.09.2019


Ответы (1)


Я думаю, вам нужно изменить доверенную прошивку ARM, чтобы сделать это.

person user12091136    schedule 19.09.2019