Я разрабатываю базовый гипервизор на ARM (используя плату Arndale Exynos 5250). Я хочу загрузить Linux (ubuntu или smth else)/Android в качестве гостя. В настоящее время я использую дистрибутив Linaro.ARM: безопасная позиция физической памяти (для резервирования) для моего гипервизора ARM относительно гостя Linux/Android
Я почти там, большинство из больших проблем уже было рассмотрено, за исключением последней, кроме: оговорку памяти для моего гипервизора таким образом, что ядро не попытки перезаписать его ПЕРЕД разбора FDT или командной строки ядра.
Проблема заключается в том, что мой дистрибутив Линаро в U-Boot проходит FDT в R2 с Linux ядра, но ядро пытается перезаписать память моего гипервизор, прежде чем увидеть, что я зарезервировал эту область памяти в FDT (по декомпиляция DTB, изменение DTS и перекомпиляция его). Я попытался изменить параметры командной строки ядра, но они также анализируются ПОСЛЕ того, как ядро пытается перезаписать мою зарезервированную часть памяти.
Таким образом, мне нужна безопасная ячейка памяти в физической памяти, где можно поставить код моего гипервизора таким образом, чтобы ядро Linux не пыталось получить доступ (r/w) до того, как разбор FDT или его ядра командная строка.
Контекст деталь:
- Компоновка системы ОЗУ на Exynos 5250 является: физическая память начинается с 0x4000_0000 (= 1 Гб) и имеет длину 0x8000_0000 (= 2 Гб).
- Ядро Linux загружается (с помощью U-Boot) при 0x4000_7000, это размер (несжатый uImage) меньше, чем 5MB и это точка входа устанавливается, чтобы быть в 0x4000_8000;
- uInitrd загружается при 0x4200_0000 и имеет размер меньше, чем 2MB
- ПТД (board.dtb) загружают в 0x41f0_0000 (принят в R2) и имеет размер меньше 35KB
- в настоящее время я загрузить мой гипервизор на 0x40C0_0000 и я хочу, чтобы зарезервировать 200MB (0x0C80_0000), начиная с этого а ddress, но ядро пытается там написать (), а второй HYP-ловушка уровня 2 сообщает мне, что) перед тем, как смотреть в FDT или в командной строке, чтобы увидеть, что регион действительно зарезервирован. Если вместо этого я загружу свой гипервизор в 0x5000_0000 (даже не изменяя оригинальный DTB или командную строку), он не пытается перезаписать меня!
- ПТД передается непосредственно, а не через ATAGs
Поскольку при загрузке моего гипервизор на 0x5000_0000 ядро не пытается переписать его вообще, я предполагаю, что есть области памяти, что Linux делает не касаться перед парсингом FDT/командной строки. Мне нужно знать, верно это или нет, и если это правда, некоторые подробности относительно этих областей памяти.
Спасибо!
СОПУТСТВУЮЩИЕ ВОПРОС:
Кто-нибудь случиться, чтобы знать, что является приоритетом между следующими: ATAGs/ядра командной строки/FDT? Например, если я оставляю памяти через ядра командной строки, но не в FDT (.dtb) она должна работать или в командной строке перекрываться в FDT? Есть ли какое-то отношение между этими тремя?
Если U-Boot может перезаписать ваш гипервизорный код, то вы еще не совсем там. Вы должны сначала сосредоточиться на этом: не должно быть возможным, чтобы гостевая среда выполнения изменяла гипервизор. Пересмотреть дизайн изоляции памяти. –
Я не сказал, что U-Boot - это тот, который перезаписывает мой гипервизор :) Это ядро Linux. Мой гипервизорный код выполняет BETWEEN u-boot (гипервизор загружается u-boot), а ядро (гипервизор загружает linux).И дело не в том, что оно на самом деле перезаписывает его, просто он пытается (очевидно, в результате попадает в HYP-ловушку) –
Хорошо, мое недоразумение, поэтому кажется, что изоляция памяти в порядке. Но тогда вы не настроили гостевое адресное пространство так, чтобы 0x40000000 отображался на 0x0c800000? –