著者:宇野博士
ページ数:258
¥1,250 → ¥0
1975年にベル研究所がUnix Version 6(Sixth Edition Unixとも呼ばれます)をリリースしました。これはカリフォルニア大学バークレー校をはじめとする大学で広く教育ツールとして活用されました。今回ビルドするUnix-xv6は、ANSI Cでマルチプロセッサx86に移植されたUnix Version 6で、現在もマサチューセッツ工科大学などの大学で教育ツールとして活用されています。
「Windows10とコマンドプロンプト(cmd.exe)でxv6をビルドして動作させた。」これが、わたしのやり遂げたことです。Linuxでビルドするのではなく、Windwos10+WSLの環境、Windwos10+CygwinやMSYS環境でビルドするのでもなく、Windows10とコマンドプロンプトの環境でビルドしました。
わざわざ苦労してなぜWindowsでビルドしたのか。今振り返ってみて次のように感じています。Linuxでのビルドは、例えれば大阪から東京までを飛行機で行くようなものです。1時間もあれば目的地に到着します。ビルドが完了し、目標が達成され、それで終わってしまいます。大阪と東京の間にある名所の事などはまったく知る余地もありません。Windowsでのビルドは、東海道五十三次を歩いて旅するような感じでした。約2週間かかりましたが、様々なツールに触れ、次々と問題に遭遇し、そのたびに少し知識を得て自分がスキルアップした気分になり、問題が解決すると幸せを感じ、そしてついにxv6がプロンプトを表示してくれたときには本当に感動しました。そして、やっと動いてくれたxv6にも愛着が生まれていました。この2週間はわくわくしながら推理小説を読んでいる、アドベンチャーゲームに没頭している、そんな感じでした。わざわざ遠回りをしてWindowsでビルドすることで私はとても得をしたような気がしています。
どのような旅だったのか、ここで少しご紹介しましょう。「xv6のソースファイルをダウンロードして、makeコマンドを実行する。」Linuxではこれだけでxv6のビルドが完了します。そして「QEMUをインストールして、make qemuとコマンドをたたく。」これでxv6が走ります。一方、Windows10でmakeコマンドを実行するとエラーが多発します。エラーの原因を調べてすべて解決しなければなりません。makeコマンドのエラー、Cコンパイラのエラー、その他のコマンドのエラーを1つ1つ消して行きました。私はプログラムの素人ですので知らないことばかりで、進捗は亀のような遅さでした。makeコマンドでは、Makefileに記述されている内容を理解することからはじめました。具体的にはMakefileの記述方法に加えて、Makefileで使用しているgcc、ld、objcopy、dd、qemu、gdbなどのツールの動作とそのオプションの意味を調べました。当たり前ですが、これらのツールのWindows10版のプログラムも探して入手しました。Makefileに記載されているコマンドを実際にコマンドプロンプトに入力し、その出力結果から自分の理解が正しいことを確認しながら、一歩一歩進んで行きました。
大きな問題の1つに、「Linux版とWindows版でツールの仕様や動作が異なっている」がありました。特にgcc(ld)の差異は致命的でした。UNIXやLinuxでは、オブジェクトファイル(object file)や実行ファイル(executable file)にELFフォーマット(Executable and Linking Format)を採用しています。xv6はUNIXなので、xv6のビルド時にはコンパイラにkernelやinitなどのユーザープログラムをELFフォーマットで出力させる必要があります。Linux版のgcc(ld)はデフォルトでELFフォーマットで出力します。一方でWindowsはPE形式(Potable Executable)を採用しています。当然ですが、Windows版のgcc(ld)はプログラムをPE形式で出力します。問題は、Windows版のgccではいかなるオプションを指定してもELFフォーマットで出力できなかったのです。さて、この問題を解決した方法については本文で詳しくご説明します。
数日間の格闘の後、一応コンパイルが通るようになりました。次の課題はデバッグです。Makefileの記述を見ていると、xv6自体はQEMUというPCエミュレーター上で動作させます。そして、デバッグはこのQEMUとデバッガのgdbを連動させて行うようです。Makefileの記述をコピペしてWindowsでコマンドをたたいてみました。しかし、QEMUとgdbは連動しません。またもや、QEMUとgdbのマニュアルを検索して動作とオプションの理解を深めました。いろいろと実験した結果、ようやく1つのコマンドプロンプトでQEMUを実行し、別のコマンドプロンプトでgdbを実行して、これらをtelnet接続することによって連動させることができました。
旅の様子はこんな感じです。ここまでの工程で東海道の浜松あたりに来れた感じでしょうか。こんな旅でしたが、私はやってみてよかった。諦めずに最後まで歩き切って本当によかったと思います。もし、挑戦したい人がおられたら全力で応援したいと思いました。私の旅の記録が誰かの役にたつかもしれない。この思いからこの本が生まれました。
「Windows10とコマンドプロンプト(cmd.exe)でxv6をビルドして動作させた。」これが、わたしのやり遂げたことです。Linuxでビルドするのではなく、Windwos10+WSLの環境、Windwos10+CygwinやMSYS環境でビルドするのでもなく、Windows10とコマンドプロンプトの環境でビルドしました。
わざわざ苦労してなぜWindowsでビルドしたのか。今振り返ってみて次のように感じています。Linuxでのビルドは、例えれば大阪から東京までを飛行機で行くようなものです。1時間もあれば目的地に到着します。ビルドが完了し、目標が達成され、それで終わってしまいます。大阪と東京の間にある名所の事などはまったく知る余地もありません。Windowsでのビルドは、東海道五十三次を歩いて旅するような感じでした。約2週間かかりましたが、様々なツールに触れ、次々と問題に遭遇し、そのたびに少し知識を得て自分がスキルアップした気分になり、問題が解決すると幸せを感じ、そしてついにxv6がプロンプトを表示してくれたときには本当に感動しました。そして、やっと動いてくれたxv6にも愛着が生まれていました。この2週間はわくわくしながら推理小説を読んでいる、アドベンチャーゲームに没頭している、そんな感じでした。わざわざ遠回りをしてWindowsでビルドすることで私はとても得をしたような気がしています。
どのような旅だったのか、ここで少しご紹介しましょう。「xv6のソースファイルをダウンロードして、makeコマンドを実行する。」Linuxではこれだけでxv6のビルドが完了します。そして「QEMUをインストールして、make qemuとコマンドをたたく。」これでxv6が走ります。一方、Windows10でmakeコマンドを実行するとエラーが多発します。エラーの原因を調べてすべて解決しなければなりません。makeコマンドのエラー、Cコンパイラのエラー、その他のコマンドのエラーを1つ1つ消して行きました。私はプログラムの素人ですので知らないことばかりで、進捗は亀のような遅さでした。makeコマンドでは、Makefileに記述されている内容を理解することからはじめました。具体的にはMakefileの記述方法に加えて、Makefileで使用しているgcc、ld、objcopy、dd、qemu、gdbなどのツールの動作とそのオプションの意味を調べました。当たり前ですが、これらのツールのWindows10版のプログラムも探して入手しました。Makefileに記載されているコマンドを実際にコマンドプロンプトに入力し、その出力結果から自分の理解が正しいことを確認しながら、一歩一歩進んで行きました。
大きな問題の1つに、「Linux版とWindows版でツールの仕様や動作が異なっている」がありました。特にgcc(ld)の差異は致命的でした。UNIXやLinuxでは、オブジェクトファイル(object file)や実行ファイル(executable file)にELFフォーマット(Executable and Linking Format)を採用しています。xv6はUNIXなので、xv6のビルド時にはコンパイラにkernelやinitなどのユーザープログラムをELFフォーマットで出力させる必要があります。Linux版のgcc(ld)はデフォルトでELFフォーマットで出力します。一方でWindowsはPE形式(Potable Executable)を採用しています。当然ですが、Windows版のgcc(ld)はプログラムをPE形式で出力します。問題は、Windows版のgccではいかなるオプションを指定してもELFフォーマットで出力できなかったのです。さて、この問題を解決した方法については本文で詳しくご説明します。
数日間の格闘の後、一応コンパイルが通るようになりました。次の課題はデバッグです。Makefileの記述を見ていると、xv6自体はQEMUというPCエミュレーター上で動作させます。そして、デバッグはこのQEMUとデバッガのgdbを連動させて行うようです。Makefileの記述をコピペしてWindowsでコマンドをたたいてみました。しかし、QEMUとgdbは連動しません。またもや、QEMUとgdbのマニュアルを検索して動作とオプションの理解を深めました。いろいろと実験した結果、ようやく1つのコマンドプロンプトでQEMUを実行し、別のコマンドプロンプトでgdbを実行して、これらをtelnet接続することによって連動させることができました。
旅の様子はこんな感じです。ここまでの工程で東海道の浜松あたりに来れた感じでしょうか。こんな旅でしたが、私はやってみてよかった。諦めずに最後まで歩き切って本当によかったと思います。もし、挑戦したい人がおられたら全力で応援したいと思いました。私の旅の記録が誰かの役にたつかもしれない。この思いからこの本が生まれました。
シリーズ一覧
- 同シリーズの電子書籍はありませんでした。
Kindle Unlimitedは、現在30日間無料体験キャンペーンを行っています!
この期間中は料金が980円→0円となるため、この記事で紹介している電子書籍は、すべてこのKindle Unlimited無料体験で読むことが可能です。