0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows で MikanOS (その2:VisualStudio2017(2015))

0
Posted at

お疲れ様です!お世話になっております。!!
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

【手順】

  1. 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さん、ありがとうございます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?