我可以使用什么环境来编写操作系统的二进制代码?
What environment can I use to write binary code of the operating system?
为了学习操作系统的引导,我用这种方式做了一些简单的测试:
我安装了oracle viratualbox并创建了硬盘
我安装了hex-editor HxD 并写入代码到这个硬盘,打开这个硬盘的文件
在我写的第一个512字节扇区的末尾
55 AA
在 1FE 和 1FF 字节中,
和我从第一个扇区的第一个字节写的其他代码。
这样我必须从 HxD 中解锁 hdd 文件,因为在完成之前 virtualbox 无法启动它。
我想用虚拟机或者其他真机(第二种方式不太方便),因为它创建了一个独立的开发环境。
如何更有效地进行此测试以学习引导(以及简单开发后)操作系统?
当我进行此类开发时,我会从头开始构建磁盘映像并将 VM 指向它作为软盘。这样,汇编器的输出,即目标文件,可以是软盘的完整引导扇区,您可以轻松地链式加载更多扇区。例如:
; 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" 或类似名称的目标文件创建一个 link,然后告诉 VirtualBox 在哪里可以找到它。瞧!
你没有问,但我希望你能看到你实际上可以将所有代码放在这个文件中;只需在 0xaa55
之后添加要从后面的扇区链式加载的代码,您就可以简单地将其加载到内存中,因为您知道它落在下一个扇区的开头。
为了学习操作系统的引导,我用这种方式做了一些简单的测试:
我安装了oracle viratualbox并创建了硬盘
我安装了hex-editor HxD 并写入代码到这个硬盘,打开这个硬盘的文件
在我写的第一个512字节扇区的末尾 55 AA 在 1FE 和 1FF 字节中,
和我从第一个扇区的第一个字节写的其他代码。
这样我必须从 HxD 中解锁 hdd 文件,因为在完成之前 virtualbox 无法启动它。
我想用虚拟机或者其他真机(第二种方式不太方便),因为它创建了一个独立的开发环境。
如何更有效地进行此测试以学习引导(以及简单开发后)操作系统?
当我进行此类开发时,我会从头开始构建磁盘映像并将 VM 指向它作为软盘。这样,汇编器的输出,即目标文件,可以是软盘的完整引导扇区,您可以轻松地链式加载更多扇区。例如:
; 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" 或类似名称的目标文件创建一个 link,然后告诉 VirtualBox 在哪里可以找到它。瞧!
你没有问,但我希望你能看到你实际上可以将所有代码放在这个文件中;只需在 0xaa55
之后添加要从后面的扇区链式加载的代码,您就可以简单地将其加载到内存中,因为您知道它落在下一个扇区的开头。