Какую среду я могу использовать для написания двоичного кода операционной системы?
Для изучения начальной загрузки операционных систем я делаю несколько простых тестов следующим образом:
Я устанавливаю оракул 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
и вы можете просто загрузить его в память, потому что вы знаете, что он падает в начале следующего сектора.