«Как загрузить ядро» сводится к знанию, где ядро находится на диске и где вы хотите его в памяти, а затем к использованию дисковых сервисов BIOS для его чтения.Если вы хотите, чтобы ядро загружалось выше 0x00100000, то вам может потребоваться загрузить каждую часть во временный буфер (доступ к которому BIOS может получить в реальном режиме), а затем использовать защищенный режим или «нереальный режим», чтобы скопировать его из буфера вгде вы на самом деле хотите это.Если вы хотите поддерживать сжатие, вам может потребоваться загрузить файлы, а затем распаковать их.Если вы хотите, чтобы ядро использовало сложный формат файла (например, ELF или PE, а не простой плоский двоичный файл), то вам, возможно, потребуется проанализировать заголовки, переместить разделы и т. Д.
Мои загрузчики обычно бывают многобольше, чем 1 сектор.Код в первом секторе загружает второй сектор, а код в первом и втором секторах загружает оставшуюся часть загрузчика.Таким образом, загрузчик может быть 20 КиБ (например), если вы будете осторожны и не пытаетесь использовать какой-либо код или данные, которые еще не были загружены.Вы также можете иметь второй этап (и третий, четвертый и т. Д. Этапы, если хотите), когда загрузчик загружает второй этап, а второй этап - следующий фрагмент и т. Д.
Гдесохраните двоичные файлы, это зависит от того, какую файловую систему / системы вы планируете использовать.Если вам не нужна какая-либо файловая система (или если файловая система, которую вы хотите использовать, имеет достаточно «зарезервированного» пространства в начале), вы можете просто объединить двоичные файлы вместе и сохранить их сразу после загрузчика.В противном случае загрузчику (и / или дополнительным этапам) потребуется найти файлы в той файловой системе, которую вы используете.
Примечание. Различные загрузчики работают по-разному.Для чего-то вроде загрузки из сети, загрузчик может быть 512 КБ и должен загружать данные из сети, используя PXE API.Для CD-ROM вы, вероятно, в конечном итоге будете использовать файловую систему ISO9660 (и 2 сектора КиБ).Для жестких дисков вам потребуется обрабатывать разделы (и, возможно, иметь один загрузчик для «MBR-разделов» и другой загрузчик для «GPT-разделов»).В итоге вы получите несколько совершенно разных загрузчиков, которые все загружают ядро (или, может быть, какой-то образ RAM-диска, если это микроядро) и оставляют компьютер в определенном состоянии при запуске ядра (например,определенный режим ЦП, ядро по определенному адресу, другие файлы в определенных местах и т. д.), так что самому ядру не нужно заботиться о том, какой загрузчик его загрузил.Для дополнительной сложности можно включить намного больше в это «предопределенное состояние» (например, адрес таблиц ACPI, описание предварительно сконфигурированного режима видео и т. Д.), Чтобы можно было писать загрузчики для других типов систем, и ядро победило.не нужно заботиться, загружается ли он из «BIOS компьютера», UEFI, OpenFirmware или чего-то еще.