自作OS入門の環境をOS Xで整える
動機
「30日でできる!OS自作入門」を読み実装しようと思ったところ、環境がwindows。おまけにアセンブラやビルド環境がWindows故、そのまま流用できませんでした。
そこで少し色々調べた結果、http://bttb.s1.valueserver.jp/wordpress/blog/2017/11/14/make-os1/ この方のブログが大変シンプルに纏まっており参考にさせていただくことにしました。 このブログの環境はLinuxなので大体は流用することができます。
1日、2日目の内容はアセンブラオンリーなので特に問題はなかったのですが3日目以降はC言語とアセンブラをリンクしてビルドする必要がでてきます。 この際、OS Xだと少々一筋縄ではいかない問題がでてきます。
それがgccとldリンカです。OS Xに標準で入っているのは恐らくXcode-command-line-toolsを入れた時に一緒に入るgccです。
gccは別にいいのですがldはGNU ldではないため、リンカスクリプトを指定する-T
オプションがありません。
そこで、本はi386をターゲットにビルドしているのでi386のクロスコンパイル環境を構築することにしました。
以下にその際の手順を示します。
QEMU
brew install qemu
nasm
brew install nasm
i386-elf-gcc, gnu ld
ここからが少し長いです。 基本的に同じコマンドを実行すれば大丈夫なはずです(2018-5現在)
brew install gcc6 export CC=/usr/local/Cellar/gcc@6/6.4.0_2/bin/gcc-6 # ↑の手順でinstallしたGCCのパス export LD=/usr/local/bin/gcc@6/6.4.0_2/bin/gcc-6 export PREFIX="/usr/local/i386elfgcc" export TARGET=i386-elf export PATH="$PREFIX/bin:$PATH" # binutilsのインストール mkdir /tmp/src cd /tmp/src curl -O http://ftp.gnu.org/gnu/binutils/binutils-2.28.tar.gz tar xf binutils-2.28.tar.gz mkdir binutils-build cd binutils-build ../binutils-2.28/configure --target=$TARGET --enable-interwork --enable-multilib --disable-nls --disable-werror --prefix=$PREFIX 2>&1 | tee configure.log sudo make all install 2>&1 | tee make.log # libiconv最新版をインストールする cd /tmp/src curl -O https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz tar xf libiconv-1.15.tar.g cd libiconv-1.15 ./configure -prefix=/usr/local make make install # クロスコンパイラなGCCをビルド cd /tmp/src curl -O https://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.gz tar xf gcc-6.4.0.tar.gz mkdir gcc-build cd gcc-build ../gcc-6.4.0/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --disable-libssp --enable-languages=c --without-headers --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpfr=/usr/local --with-libiconv-prefix=/usr/local make all-gcc make all-target-libgcc sudo make install-gcc sudo make install-target-libgcc
最終的な環境
- 開発環境: OS X HighSierra
- エミュ: QEMU emulator version 2.11.0 Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
- アセンブラ: nasm
- Cコンパイラ: gcc - i386-elf-gcc (base gcc ver6)
- リンカ: ld - gnu ld
テスト
以上の環境構築が終了した場合、
の day4/harib01j
内で make run
をするとそれっぽいosの画面がqemuで開くはずです。