yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

「ゼロからのOS自作入門」をHyper-Vで動かしたときのメモ

「ゼロからのOS自作入門」を読んで作成した自作osを、Hyper-Vで動かしたときに難しかったところをメモしておきます。
ACPI PMタイマまで作成しましたが、USBドライバ、windowなど作成していない機能もあります。

まずはブート可能なイメージファイルを作成する手順を載せます。
1:UEFIブート可能なUSBメモリを作成する。
2:そのUSBメモリをUSB Image Toolなどで丸ごとイメージファイルにする。これをos.imgとする。
3:WinISOなどブート可能なイメージファイルを作成できるソフトウェアのboot imageにos.imgを設定してブート可能なイメージファイルを作成する。これをos.isoとする。
4:os.isoをhyper-v仮想マシンのdvdドライブにセットして起動する。

bootloderで変更したところを載せます。
まず、FrameBufferSizeを使うことをやめました。その代わり、VerticalResolution、HorizontalResolution、PixelsPerScanLineを使います。
次に、CDやDVDは書き込みができないため、memory mapをファイルに書くことをやめました。
そして、カーネルのロードのときにエラーが出たため。カーネルのビルドの時に--image-baseオプションの値を変更しました。私の環境では0x464c000で動きました。

kiernelで変更したところを載せます。
ACPI PMタイマが動かなかったので、osdevのサイトを見てFADTの構造体を変更して、X_PMTimerBlockを使用してACPI PMタイマを動かしました。