В скрипте ссылки начальный адрес — 0xffffffff00000000. Затем я могу загрузить собственное ядро с нуля (для aarch64) по произвольному (физическому) адресу и использовать относительную адресацию. Итак, когда я включаю MMU, как я узнаю, что память не будет записываться туда, где загружено ядро? Я имею в виду, что если я загрузил ядро по адресу 0x01000000 и сопоставил физическую память с 0xffffffff00000000 на 0xffffffffffffffffff, мне кажется, что у меня все еще будут проблемы, если я совмещаю относительную адресацию с абсолютной. И кажется, что единственное решение — обеспечить загрузку ядра всегда по одному и тому же физическому адресу, а затем сопоставить его с 0xffffffff00000000... Но каким-то образом это превосходит цель MMU. Я прав в своих размышлениях?
mmu в руке: как сопоставить код ядра (голое железо)
Ответы (1)
На самом деле осознание того, что инструкция ADR на Aarch64 возвращает физический адрес, помогло мне добиться того, чего я хотел. Я надеюсь, что я прав в своих мыслях, хотя:
ADR x0, label # here we get physical address of label to x0
LDR x0, =label # here we get start address from linker + label address to x0
Так что мне действительно не нужно знать физический адрес (по которому было загружено ядро) во время компиляции, чтобы установить границу вокруг ядра, чтобы правильно настроить MMU.
person
samuzu.pazael
schedule
05.12.2020
how do I know memory won't be written at where kernel is loaded?
- потому что вы операционная система и вы не позволяете туда писать? - person Siguza   schedule 05.12.2020