Доброго времени суток!
Изучаю туториал по разработке ядра (был недавно в новостях), возник такой вопрос: загрузчик выполняет 32-битный код (по моему так) после чего передает управление в ядро. Значит начальный код ядра должен быть 32-битным. Затем ядро осуществляет переход в long mode (64 бит), становятся доступны адресация и команды 64 битного режима. Получаем что в одном файле ядра мы должны иметь и 32-битный и 64-битный код, но ld-ругается при линковке при попытке сотворить такое.
Чую, что я где-то неправильно себе представляю процесс загрузки 64-битных ядер, объясните в двух словах, как это должно происходить?
У меня есть только предположение, что код инициализации такого ядра и перевод в long mode тоже должен быть 64-битным ([BITS 64] в nasm), но до этого перехода использовать 32-битные команды (с регистрами eax, ebx и т.п. а не rax и rbx)
Спасибо!