Это гораздо больше, чем просто преобразование файла ядра в двоичный и размещение его на ISO-диске (образе).
У вас должен быть загрузчик какой-то. Если вы загружаетесь на устаревшей машине с BIOS, вам понадобится загрузчик, который понимает файловую систему ISO, находит, а затем считывает файл ядра в память. Некоторые из них уже сделаны, приходит на ум Grub.
Поскольку вы хотите создать свою собственную (и я вас за это рекомендую), вам нужно будет прочитать, как файловая система ISO хранится на диске, как BIOS загружает для вас один или несколько секторов и т. Д.
Например, BIOS загрузит один или несколько секторов с диска разными способами. Один может быть эмуляцией дискеты, другой может быть эмуляцией жесткого диска, а другой может быть прямым чтением сектора диска ISO.
Я бы посоветовал вам не начинать с ISO. Начните с образа дискеты или, что еще лучше, образа жесткого диска. Затем все, что вам нужно сделать, это написать загрузочный сектор и загрузчик, который использует службы чтения диска BIOS. Это намного проще.
Однако не поймите меня неправильно, предстоит еще много работы.
Если вы хотите пропустить все это, вы можете написать свое ядро как (Win) PE-файл и использовать более новую прошивку (UEFI), чтобы загрузить его за вас. EFI будет использовать диск в формате GPT с одним или несколькими томами FAT и найдет и загрузит исполняемый файл в формате PE за вас.
Тем не менее, и некоторые могут не согласиться, но, поскольку вы делаете этот проект в качестве учебного опыта, я предлагаю вам выбрать путь Legacy BIOS. Это позволит вам узнать больше о том, как компьютер загружается, загружает первые инструкции и т. Д.
Для маршрута гибкого или жесткого диска Legacy BIOS выполните поиск загрузочных секторов и дискеты или жесткого диска. Это покажет вам, как некоторые выполнили задачу. Этот загрузочный сектор обычно загружает другой файл, который является загрузчиком ОС. Затем этот загрузчик используется для загрузки ядра и (возможно) других файлов, настраивая необходимые элементы перед переходом к ядру.
Если хотите, у меня есть написано несколько книг на эту тему, показывающих, как писать загрузочные секторы. для дискет, жестких дисков, а также образов дисков ISO. У меня также есть пример исходного кода из более ранней версии.
person
fysnet
schedule
04.01.2020