Как может я загружать свою маленькую консоль от диска/CD/usb, со следующей конфигурацией:
Процедура, которую я хочу использовать, - то, что, когда моя система запускается, она загружается от диска/CD/usb и запускает мою ОС. На данный момент предположите, что ОС будет привет мировой программой. Я на самом деле хочу видеть, как реальный мир ОС реализует себя.
Загрузчик должен быть 512 байт. Не меньше и не больше. И он должен заканчиваться стандартной сигнатурой загрузки ПК: 0xAA55.
Также обратите внимание, что ПК загружается в режиме 16 бит. Вам нужно загрузить в память ядро или загрузчик второй ступени, а затем перейти к этому коду (и, возможно, переключить процессор в защищенный режим 32 бит).
Например (nasm):
BITS 16
; Your assembly code here (510 bytes max)...
jmp $
; Fills the remaining space with 0
times 510 - ( $ - $$ ) db 0
; Boot signature
dw 0xAA55
Это работа загрузчика. Загрузчик должен находиться в первых 512 байтах жесткого диска. Это место называется MBR (Master boot record)
Когда bios загружается, он проверяет, содержит ли носитель MBR. Он проверяет подпись MBR 0xAA55, которая должна присутствовать в последних 2 байтах MBR.
Затем Bios загружает BootLoader в RAM по адресу 0x7C00
Затем загрузчик загружает ядро в память, читая файловую систему.
обычно невозможно уместить весь код в 512 байт, поэтому существует вторичный загрузчик.
вторичный загрузчик будет загружен вашим первичным загрузчиком.
вторичный загрузчик загружает IDT и GDT (таблицу векторов прерываний и таблицу глобальных дескрипторов). Позволяет затвору A20 перейти в защищенный режим.
вторичный загрузчик загружает 32-битное ядро с диска в память, затем переходит к коду ядра
Для получения дополнительной информации вы можете скачать ядро Linux v0.01 (первая версия). Посмотрите, как это сделано. К моему удивлению, код для чтения файловой системы + код для перехода в защищенный режим уместились в 512 байт кода.