いろいろ苦しかったので、ここに書く。
環境
ubuntu16.04.2(64bit)
まずはじめに
http://kozos.jp/books/makeos/
ではあまりうまくいかなかったので、ネットでしらべつつ頑張った内容を後学のためにここに記す。
binutilsの設定
https://ftp.gnu.org/gnu/binutils/
からbinutils-2.19.1.tar.bz2をダウンロードする。
kozosの方からダウンロードしたものではうまく解凍できなかったので、gnuのほうからダウンロードする。
図だとこんな感じ。2.19.1aとか間違えないこと。
cd ~/Downloads
tar jxvf binutils-2.19.1.tar.bz2
次に上を実行。オプションで指定しているjxvfについては参考文献[1]などを参考にしてください。
cd ~/Downloads/binutils-2.19.1
./configure --target=h8300-elf --disable-nls --disable-werror
make
sudo make install
次に上を実行。.configureによってターゲットをH8向けに設定する。
cd /usr/local/bin
ls
を実行すれば、h8300-elf-asやh8300-elf-arなどがはいっていることがわかる。これであれば成功。
gccの設定
次にgccのダウンロードをする。
https://ftp.gnu.org/gnu/gcc/gcc-3.4.6/
からgcc-3.4.6.tar.bz2をダウンロードする。
図だとこんな感じ。
cd ~/Downloads
tar jxvf gcc-3.4.6.tar.bz2
でgccを解凍する。
ここからが、本と結構違うので注意!
ちなみに、参考文献[2] http://d.hatena.ne.jp/ryochack/20110515/1305400022に依存しています。
cd ~/Downloads/gcc3.4.6/gcc/
vim collect2.c
で、collect2.cを編集します。vimの操作方法については、他の記事を参考にしてください。需要があれば、ここで書きます。
1537行目をが最初の状態なので、それをのように編集します。
[in 1537 line]
<old>
redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT);
<fix>
redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, 0755);
次に、また別のファイルも修正します。
cd ~/Downloads/gcc3.4.6/gcc/config/h8300/
vim h8300.c
以下のlineをからに変更してください。
[in 55,56 line]
<old>
static void h8300_emit_stack_adjustment (int, unsigned int);
static int round_frame_size (int);
<fix>
static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT);
static HOST_WIDE_INT round_frame_size (HOST_WIDE_INT);
[in 371 line]
<old>
h8300_emit_stack_adjustment (int sign, unsigned int size)
<fix>
h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size)
[in 400,401 line]
<old>
static int
round_frame_size (int size)
<fix>
static HOST_WIDE_INT
round_frame_size (HOST_WIDE_INT size)
これができたらやっとmakeの作業に移ります。
cd ~/Downloads/gcc-3.4.6
./configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c --disable-werror
を実行します。特にここのconfigureは間違えやすいので気をつけてください。改行はせずにやりましょう。
次に、シェルスクリプトを作ります。(正確には、シェルスクリプトにmake installを実行させます)
vim ~/Downloads/gcc-3.4.6/install.sh
で新規ファイルを作成します。
PATH=${PATH}:/usr/local/trunk/cross/bin
make install
を書き、そしたらそれを保存してください。
sudo sh install.sh
でgccのインストールに成功します。これで作業はほとんど終了です!
次に、この作ったbinutilsを/usr/local/binに入れます。
cd ~/Downloads/
sudo mv gcc-3.4.6 /usr/local/bin
これが終わればだいたいおしまいです。
もし、part1のコードとかを書きたいならば、あの本通りにすすめてください。
http://kozos.jp/kozos/osbook_03.html
から、ソースコードを取って、あとは流れに沿えば問題なくできるはず。
参考文献
[1] http://qiita.com/astro_super_nova/items/e7ff4ef5ec9fa253fd61
[2] http://d.hatena.ne.jp/ryochack/20110515/1305400022