OS自作入門 -Advent03-
クロスコンパイラ作ってなかった
そういやホストコンパイルに必要なもの入れただけでクロス用のコンパイラ達作っていなかった。
ホストコンパイラでクロスコンパイラをコンパイルする。
という形式だったのをすっかり忘れていた。準備しよう。
- binutilsのダウンロード
http://ftp.gnu.org/gnu/binutils/ - binutilsをH8用にコンパイル(インストール先を指定)
あんまシステム汚したくなかったので作業用のディレクトリにbuildする。cd binutils-2.29 ./configure --target=h8300-elf --disable-nls --prefix=$HOME/os-advent2017/tools make make install
- gccもダウンロード
http://ftp.gnu.org/gnu/gcc/ - gccをH8用にコンパイル(インストール先を指定)
cd gcc-7.2.0 ./configure --target=h8300-elf --disable-nls --prefix=$HOME/os-advent2017/tools ./configure \ --target=h8300-elf \ --disable-nls \ --disable-threads \ --disable-shared \ --enable-languages=c \ --prefix=$HOME/os-advent2017/tools make make install
./configure
でエラーを吐くな。configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
GMP, MPFR, MPCというのが必要らしい。
http://ftp.gnu.org/gnu/gmp/
http://ftp.gnu.org/gnu/mpfr/
http://ftp.gnu.org/gnu/mpc/
ここからダウンロードGMPのコンパイル
cd gmp-6.1.2 ./configure --prefix=$HOME/os-advent2017/tools/gmp make make check make install
MPFRのコンパイル
cd mpfr-3.1.6 ./configure --prefix=$HOME/os-advent2017/tools/mpfr \ --with-gmp=$HOME/os-advent2017/tools/gmp make make check make install
MPCのコンパイル
cd mpc-1.0.3 ./configure --prefix=$HOME/os-advent2017/tools/mpc \ --with-gmp=$HOME/os-advent2017/tools/gmp \ --with-mpfr=$HOME/os-advent2017/tools/mpfr make make check make install
再度トライ!
cd gcc-7.2.0 ./configure \ --target=h8300-elf \ --disable-nls \ --disable-threads \ --disable-shared \ --enable-languages=c \ --with-gmp=$HOME/os-advent2017/tools/gmp \ --with-mpfr=$HOME/os-advent2017/tools/mpfr \ --with-mpc=$HOME/os-advent2017/tools/mpc \ --prefix=$HOME/os-advent2017/tools make make install
まだ怒られるな。
Makefile:179: ../.././gcc/libgcc.mvars: No such file or directory make[2]: *** No rule to make target `../.././gcc/libgcc.mvars'. Stop. make[1]: *** [all-target-libgcc] Error 2 make: *** [all] Error 2
この辺りを調べると
http://www.linuxforums.org/forum/applications/172812-solved-gcc-make-error-missing-libgcc-mvars.html
http://d.hatena.ne.jp/satfy/20101226なるほど。separate build directoryでやれということらしい。
rm -rf gcc-7.2.0 # 一旦掃除 tar xvzf gcc-7.2.0.tar.gz # 再度展開 mkdir build # separate build directory cd build ../gcc-7.2.0/configure \ --target=h8300-elf \ --disable-nls \ --disable-threads \ --disable-shared \ --enable-languages=c \ --with-gmp=$HOME/os-advent2017/tools/gmp \ --with-mpfr=$HOME/os-advent2017/tools/mpfr \ --with-mpc=$HOME/os-advent2017/tools/mpc \ --prefix=$HOME/os-advent2017/tools make make install
libsspでエラーが出る。(スクショ撮り忘れたけどこんな感じの)
../../../libssp/ssp.c:78:30: error: 'O_RDONLY' undeclared (first use in this function) fd = open ("/dev/urandom", O_RDONLY); ^
http://tokis.cocolog-nifty.com/blog/2014/05/kozosgcc-490w-1.html
これによると必要なさそうだからskip。../gcc-7.2.0/configure \ --target=h8300-elf \ --disable-nls \ --disable-threads \ --disable-shared \ --disable-libssp \ # 追加 --enable-languages=c \ --with-gmp=$HOME/os-advent2017/tools/gmp \ --with-mpfr=$HOME/os-advent2017/tools/mpfr \ --with-mpc=$HOME/os-advent2017/tools/mpc \ --prefix=$HOME/os-advent2017/tools
できた!
tools/bin/h8300-elf-gcc
の存在を確認!
先日の続きを
かなりここまでで疲弊したのだがまだ全然H8に触っていないぞー。ということでちょっと頑張る。
Makefileを作ってビルドしてROMに書く。が流れ。
Makefile作成
本に習ってそのまま書く。結構ボリュームがある。
ファームウェアをビルド!
本の通りにディレクトリ構造を作って
ls
# Makefile defines.h ld.scr lib.c lib.h main.c serial.c serial.h startup.s vector.c
make install
いくつかタイポがあったので修正してコンパイル成功!
ls
# Makefile defines.h kzload kzload.elf ld.scr lib.c lib.h lib.o main.c main.o serial.c serial.h serial.o startup.o startup.s vector.c vector.o
kzload : 実行形式ファイル
main.o : オブジェクトファイル
が出力されている!
h8writeで書き込めるようにフォーマットを変換
make image
ls
# Makefile kzload kzload.mot lib.c lib.o main.o serial.h startup.o vector.c
# defines.h kzload.elf ld.scr lib.h main.c serial.c serial.o startup.s vector.o
kzload.motがいるな。
これを書き込めばいいはずだ。
ハードウェアの準備
ここにきてようやくH8(マイコン)の出番だ。
- USBシリアル・アダプタ
- シリアルストレートケーブル
- 電源アダプタ
- H8/3069F
デバイスファイルは
ls /dev/tty*
# crw-rw-rw- 1 root wheel 2, 0 12 3 12:00 /dev/tty
# crw-rw-rw- 1 root wheel 19, 0 11 22 23:19 /dev/tty.Bluetooth-Incoming-Port
# crw-rw-rw- 1 root wheel 19, 2 12 3 13:36 /dev/tty.usbserial-FT0BTH3I
# crw-rw-rw- 1 root wheel 4, 0 11 22 23:19 /dev/ttyp0
/dev/tty.usbserial-FT0BTH3I
かな。日付も電源入れた時っぽいし。
ということで少しMakefileを書き直す
H8WRITE = ../../tools/h8write/h8write => ../../tools/h8write/kz_h8write
H8WRITE_SERDEV = /dev/cuad0 => /dev/tty.usbserial-FT0BTH3I
よーしこれで準備は整ったはず。
書き込む & 読み込む
まずは配線周り。
PC – USB-Serial変換ケーブル – Serialケーブル -> H8
電源 – 電源アダプタ -> H8
こんな感じ。
imageをwriteするには
make write
上手くいったみたい。
H8のモードを切り替えてリセット!
シリアル接続を以下のコマンドで実行
cu -l /dev/tty.usbserial-FT0BTH3I -s 9600
これでリセットボタンを押すとHelloWorldが!
よーし上手くいったぞー。
step1が一番大変とか何かで読んだけどクリア!
- 前の記事
ブログ移行計画 -その後- HugoBuilder 2017.12.02
- 次の記事
OS自作入門 -Advent04- 2017.12.04