お疲れ様です!お世話になっております。!!
2回目もどうぞよろしくお願いいたします!!!
【前回から】
前回の「その1」では VMware で"みかん本" の「1.1章 ハローワールド」を
動作させましたが、ソースコードのコンパイルやリンクは行っていません
でした。
今回は Visual Studio Community 2017 をインストールしてコンパイルと
リンクをしみたいと思います。
なぜ Visual Studio Community 2017 にしたかというと、
・"みかん本"を先に読み進める場合には、UEFI開発キット EDK2 の
環境構築が必要となりますが、推奨されるVisual Studio は 2015 と
なっています。
・そこで、Visual Studio Express 2015 for Windows 10 のインストールを
試しましたが、インストール中に一部のパッケージが破損している
趣旨のメッセージが表示されたためインストールをやめました。
※破損のメッセージが出るパッケージはスキップしてインストールを
完了させましたが、このまま使い続けるのは若干不安でした。
この現象が起きたのは2021/05/10ころのお話で、 Microsoft が
何らかの対応をするかもしれないです。
・上記のことがあり Visual Studio Community 2017 を使うことにしました
が、インストールの際に「C++によるデスクトップ開発」の構成として
「デスクトップ用 VC++ 2015.3 v14.00 (v140) ツールセット」を追加する
ことができるため、 Visual Studio 2015 相当になるから結果オーライ!
というのが理由です。
また、今後の読み進めをするうえで "みかん本" のソースコードや
パッケージファイルも必要になると思いますので、Gitもインストール
してちょっとだけ使ってみたいと思います。
【今回の目標】
・"みかん本" の「1.9章 C言語でハローワールド」を
Visual Studio Community 2017(に含まれる2015) でコンパイル/リンクする。
・Gitをインストールしてちょっとだけ使ってみる。
【結果】
!今回も動作しました!
仮想環境だけでなく実機でも動作することを確認しました。
【必要なもの】
・通称"みかん本"(『ゼロからのOS自作入門』)
・Windows 10が動作しているPC
・VMware Workstation 16 Player (以降「VMware」と略します)
・仮想マシンハードディスクイメージ変換(convert)ツール NHC
https://euee.web.fc2.com/tool/nhc.html
・Microsoft Visual Studio Community 2017
・Windows版のGit
http://git-scm.com/download/win
【手順】
- Windows 10が動作しているPC に Visual Studio Community 2017 を
インストールする
※詳細なインストール手順は省略しますが、基本の構成については
「C++によるデスクトップ開発」を選択し、インストールの詳細で
「デスクトップ用 VC++ 2015.3 v14.00 (v140) ツールセット」を
追加しましょう。
2. Windows版のGitをインストールする
※こちらも詳細なインストール方法は省略します。
デフォルトの設定でよいと思います。
3. "みかん本"の「1.9章 C言語でハローワールド」にある hello.c を
準備する
※本章とあわせて「付録A 開発環境のインストール」(の特に序盤)も
よく読みましょう。
フォルダ構成が "みかん本" の内容とは異なりますので、ここでは
コマンドプロンプトを起動して以下のように入力します。
1) cd /d c:\WinMikanOS
2) ren osbook _osbook
3) git clone https://github.com/uchan-nos/mikanos-build.git osbook
4) robocopy _osbook osbook *.* /s /move
5) exit
※2)、4)は前回の「その1」のデータが残っているとGitのcloneに失敗
するための対策です。
これで C:\WinMikanOS\osbook\day01\c\hello.c が準備できます。
4. コンパイル・リンクを行う
以下の操作を行います
1) 「スタートメニュー」 - 「Visual Studio 2015」 -
「VS2015 x64 Native Tools コマンド プロンプト」 を起動する
2) カレントディレクトリをソースファイルのあるディレクトリに
移動する
- cd /d C:\WinMikanOS\osbook\day01\c
3) 以下の内容でコンパイルする
- **cl.exe /Fo.\hello.o /c /GS- /Gs32768 /D UNICODE /O1b2s /GL /Gy /EHs-c- /GR- /GF .\hello.c**
4) hello.o が生成されたか確認する
- dir hello.o
5) hello.o が生成されていたら、以下の内容でリンクする
- **link.exe /OUT:.\hello.efi /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /ENTRY:EfiMain /SUBSYSTEM:EFI_APPLICATION /SAFESEH:NO /BASE:0 /DRIVER .\hello.o**
6) hello.efi が生成されたか確認する
- dir hello.efi
5. 4.で生成された hello.efi を使って VMware で動作確認する。
※仮想マシンそのものは前回のものを使用し、仮想ディスクのみを
今回作成したファイルを適用するようにしてください。
前回との違いは、今回生成した hello.efi を BOOTX64.EFI にリネームして、
仮想ディスクの \EFI\BOOT にコピーするところです。
【コンパイラ・リンカのオプションについて】
手順のコンパイラ オプションやリンカー オプションを選択した
理由ですが、正直なところ具体的な根拠はありません(滝汗)
実は先にWindows環境でEDK2を構築して "みかん本" の「2.2章 EDKIIで
ハローワールド(osbook_day02a)」を進めた際、EDK2のビルドで使われる
オプションをパクった参考としただけなのです。
動いてよかったというのが正直なところだったりします。
・コンパイラ オプションに関する説明はこちらです。
https://docs.microsoft.com/ja-jp/cpp/build/reference/compiler-options-listed-alphabetically?view=msvc-140
・リンカー オプションに関する説明はこちらです。
https://docs.microsoft.com/ja-jp/cpp/build/reference/linker-options?view=msvc-140
【紆余曲折】
・コンパイル時にとりあえず cl hello.c とだけやって叱られました。
・今回の動作確認そのものは2時間くらいでできたのですが、
記事を書くのに結構時間がかかりました(汗)
【次回の目標】
"みかん本" の「2.1章 EDK II入門」を Windows環境に構築する。
にしようと思います。
【参考とか引用とか】
・Microsoftさん、ありがとうございます。