загрузка с диска / cd / usb - PullRequest
5 голосов
/ 03 марта 2010

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

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

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

Ответы [ 2 ]

3 голосов
/ 03 марта 2010

Загрузчик должен быть 512 байт. Не меньше, не больше. И он должен заканчиваться стандартной подписью загрузки ПК: 0xAA55.

Также обратите внимание, что компьютер загружается в 16-битном режиме. Вам нужно загрузить ядро ​​или секундный загрузчик из этого кода в память, а затем перейти к этому коду (и, возможно, переключить процессор в 32-битный защищенный режим).

Например (нос):

BITS 16

; Your assembly code here (510 bytes max)...
jmp $

; Fills the remaining space with 0
times 510 - ( $ - $$ ) db  0

; Boot signature
dw 0xAA55
2 голосов
/ 03 марта 2010

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

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...