Я смог перевести свой процессор в режим ожидания из режима svc, используя команду hvC#0
. Я сделал некоторые операции чтения и записи в регистре HVBAR, и я хочу вернуться в режим супервизора.
Я попытался следующими способами:как переключиться обратно в режим svc из режима hyp с помощью ELR_Hyp в armv7
скопировал зр и Л перед вызовом HVC, а затем восстановить их после того, как регистр операция закончена. Затем разветвляется на значение регистра связи.
mov r5,sp; mov r6,lr; bx lr;
Я также попробовал старый метод прохождения регистра связи непосредственно к программному счетчику
mov pc,lr;
Я пытался сделать SVC вызова из режима Hyp и ожидается его изменить процессор состояния в режиме супервизора
svC#0;
Я использовал
eret
инструкцию в конце операции регистра в себе е будет ли это иметь эффект. Это не оказало никакого влияния.
Но ничего из этого не вызвало изменение процессором состояния. После запуска кода Режим в моем CPSR и SPSR - это режим небезопасного гипервизора.
После изучения литературы у меня появилась идея, что мне нужно работать с регистром ELR_Hyp, так как я использую расширения виртуализации. Но я не понимаю, как использовать ELR_Hyp для возврата в режим Supervisor из режима Hyp.
Справедливо, что вам нужен возврат исключений (а не только ветка), я думаю, что это явная инструкция в ARMv7 (но у меня нет времени на проверку прямо сейчас) –
@achoora Не могли бы вы поделиться своим кодом для ввода hyp mode? Я имею в виду всю подготовку, прежде чем вы сможете назвать «hvC# 0». Для него нет кода для всей сети. – Joey
@Joey Sorry Dude, я понимаю беспокойство, но код, который я написал, теперь запатентован. руководство по архитектуре руки имеет все, что вам нужно. особенно на странице B1136. Вы должны следить за стеками, возвращаясь из режимов, если хотите сохранить контекст. – achoora