Какую среду я могу использовать для написания двоичного кода операционной системы?

Для изучения начальной загрузки операционных систем я делаю несколько простых тестов следующим образом:

  • Я устанавливаю оракул viratualbox и создаю жесткий диск

  • Я устанавливаю hex-редактор HxD и записываю код на этот жесткий диск, открывая файл, который представляет этот жесткий диск

В конце первого 512-байтового сектора я записываю 55 AA в 1FE и 1FF байт,

и другой код, который я пишу из первого байта первого сектора.

Таким образом, я должен разблокировать hdd файл из HxD, потому что virtualbox не может запустить его, пока это не будет сделано.

Я хочу использовать виртуальную машину или другую реальную машину (второй способ менее удобен), поскольку он создает независимую среду разработки.

Как я могу более эффективно выполнять эти тесты для обучения начальной загрузке (и после простой разработки) операционной системы?

1 ответ

Решение

Когда я занимаюсь разработкой такого рода, я создаю образ диска с нуля и указываю на него виртуальную машину как дискету. Таким образом, выходной файл вашего ассемблера, объектный файл, может быть полным загрузочным сектором для дискеты, и вы можете легко загружать последующие сектора. Например:

;   x86 architecture systems all support MBR style boot sectors.  An
;   MBR boot sector must be 512 bytes in length and have machine
;   language code originating at 0000:7c00.  Additionally, it must
;   have the signature "0x55aa" as the final word in the sector or it
;   is not a valid boot sector.



org 0x7c00                  ; BIOS will load the MBR to this location 
                            ; and then jump here to continue execution

; Your code here!

                            ; As stated above, the boot sector must 
times   510-($-$$) db 0     ; Create padding to fill out to 510 bytes
dw      0xaa55              ; Magic number in the trailer of a boot sector
                            ; We write it as 0xaa55 because we're little
                            ; endian and it will be reversed to the required
                            ; 0x55 0xaa

Просто добавьте ваш начальный код. Создайте ссылку на объектный файл с именем "floppy.img" или что-то в этом роде, а затем сообщите VirtualBox, где его найти. Вуаля!

Вы не спрашивали, но я надеюсь, что вы видите, что вы действительно можете поместить весь свой код в этот файл; просто добавьте код для загрузки по цепочке из более поздних секторов после 0xaa55 и вы можете просто загрузить его в память, потому что вы знаете, что он падает в начале следующего сектора.

Другие вопросы по тегам