начальная загрузка от диска/CD/usb

Как может я загружать свою маленькую консоль от диска/CD/usb, со следующей конфигурацией:

  1. Медиа, которые я хочу использовать, будут полностью сырыми данными т.е. никакой файловой системой на них.
  2. Когда я ввожу медиа в свою систему или предполагаю, что ее уже вставленный, хочу заставить ее загрузить мою собственную маленькую ОС.

Процедура, которую я хочу использовать, - то, что, когда моя система запускается, она загружается от диска/CD/usb и запускает мою ОС. На данный момент предположите, что ОС будет привет мировой программой. Я на самом деле хочу видеть, как реальный мир ОС реализует себя.

5
задан Dominic Rodger 3 March 2010 в 08:21
поделиться

2 ответа

Загрузчик должен быть 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
3
ответ дан 14 December 2019 в 19:10
поделиться

Это работа загрузчика. Загрузчик должен находиться в первых 512 байтах жесткого диска. Это место называется MBR (Master boot record)

  1. Когда bios загружается, он проверяет, содержит ли носитель MBR. Он проверяет подпись MBR 0xAA55, которая должна присутствовать в последних 2 байтах MBR.

  2. Затем Bios загружает BootLoader в RAM по адресу 0x7C00

  3. Затем загрузчик загружает ядро в память, читая файловую систему.

  4. обычно невозможно уместить весь код в 512 байт, поэтому существует вторичный загрузчик.

  5. вторичный загрузчик будет загружен вашим первичным загрузчиком.

  6. вторичный загрузчик загружает IDT и GDT (таблицу векторов прерываний и таблицу глобальных дескрипторов). Позволяет затвору A20 перейти в защищенный режим.

  7. вторичный загрузчик загружает 32-битное ядро с диска в память, затем переходит к коду ядра

Для получения дополнительной информации вы можете скачать ядро Linux v0.01 (первая версия). Посмотрите, как это сделано. К моему удивлению, код для чтения файловой системы + код для перехода в защищенный режим уместились в 512 байт кода.

2
ответ дан 14 December 2019 в 19:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: