Как сделать загрузочный диск (.iso), загружающий ядро ​​(.elf)

Я сделал очень простое ядро ​​и хочу создать образ загрузочного диска, который загружает ядро. Я попытался преобразовать ядро ​​из .elf в .bin в .iso, но в результате получился незагрузочный образ диска. Когда я пытаюсь загрузить образ диска в virtualbox или qemu, он сообщает мне, что образ диска находится в необработанном формате и не загружается.

Я преобразовал из .elf в .bin, используя objcopy -O binary kernel.elf kernel.bin, а затем попытался преобразовать в .iso, используя такие преобразователи, как poweriso, winiso и magiciso. Преобразование либо завершилось неудачно, либо был создан образ незагрузочного диска.

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


person Daemon Beast    schedule 04.01.2020    source источник


Ответы (1)


Это гораздо больше, чем просто преобразование файла ядра в двоичный и размещение его на 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