GSoC 2012 week2:擬似BIOSの雛形を作る
PC起動時のCPUの開始アドレスはいくつかな、と思ったのだがthe processor to always begin executing code at address "FFFF:0000"とか書いてあるので、リニアアドレスで言うと0xFFFF0からスタートするようだ。
擬似BIOSを作るには、まずここにリアルモードで動く小さなプログラムをロードしてVMCALL命令を実行してみるのがよさそうだと考えた。
Makefile
all: cc -m32 -c pseudobios.S -o pseudobios.o ld -melf_i386_fbsd -T ldscript.lds pseudobios.o -o pseudobios.elf objcopy -I elf32-i386-freebsd -O binary pseudobios.elf pseudobios.bin clean: rm *.o *.elf *.bin
ldscript.lds
OUTPUT_FORMAT("elf32-i386") OUTPUT_ARCH("i386") SECTIONS { .text 0xffff0 : { *(.text) *(.rodata) } = 0 .data : { *(.data) } .sbss : { *(.sbss) *(.scommon) } .bss : { *(.bss) *(COMMON) } }
pseudobios.S
.code16gcc vmcall
…で、これをロードしないといけないのだけれども。
bhyveloadのローダを改造してBIOSのバイナリをゲストのメモリ空間にmemcpyするのが手っ取り早そうかな。