только сохраняет метаинформации о том, куда загрузить сегмент, которую далее из эльфика читает grub(ну если граб)? Но я тогда не совсем понимаю, если мы делаем higher half ядро и делаем базовый offset для релокаций 0xC0100000, но при этом загружаем все сегменты в 1мб, то граб загрузит нас в 1мб, но далее-то все адреса в будут с оффсетом 0xC01000000, а paging еще не включен(так как это вообще первая инструкция), то как это работает? В том смысле, что у нас все символы сдвинуты на 3gb, получается к ним нельзя достучаться пока не включить paging и не замаппить 1мб в 3gb.
Ну поэтому стартовый кусок кода сделан в pie чтобы загрузить мму и потом уже все как обычно
А если в теории хочется инициализировать mmu, higher half уже в сишном коде, то в таком случае не на надо делать релокейшн в линкере? Чисто заммапить сначала 1mb identity, затем этот же 1mb в higher half и дропнуть identity?
Обсуждают сегодня