先日記事にした通り、組込みマイコンに関する職業訓練を受講中です。
Windows系SEの日記: SIerを退職した元SEの組込マイコン職業訓練体験談(1) まずは面接選考突破
せっかくの機会なので、訓練に加えて自分でも組込みプログラミングについて勉強しようということで、組込みに関する書籍「
12ステップで作る組込みOS自作入門」を購入してみました。
本書は、H8/3069Fというマイコン上で動作するOSをアセンブリやC言語を使って自分で実装しようという本で、組込みマイコンの勉強用書籍としては有名な本のようです。
■マイコン購入前にまずはクロス開発環境の動作確認から
マイコン上で動作するプログラムを開発する場合、通常はマイコン上で直接開発は行わず、PC上でのクロス開発環境を構築する必要があります。
本書でもクロス環境構築から開設されているのですが、どうもこのクロス開発環境構築でうまくいかない人が多いようです。
H8/3069Fマイコンボード自体は秋月電子で数千円で入手できるので、いきなり購入してしまってもいいのですが、とりあえずクロス環境の構築に成功して最低限のコンパイルができることを確認してからH8/3069Fマイコンボードを購入することにしました。
■まずはCygwinのインストール
クロス開発環境はWindows 10+Cygwin上に構築することにしました。ちなみにWindows 10は以前購入したLAVIE Hybrid ZEROを
(参考)
knakaガジェット情報: LAVIE Hybrid ZERO PC-HZ750BABをビックカメラで注文してみた。今なら33,000円以上のポイント還元の見込です
Windows 10に無償アップデートしたものです。
「
12ステップで作る組込みOS自作入門」の1stステップの内容に従い、まずはCygwinのインストールから実施しました。
Cygwinのインストール自体は
https://www.cygwin.com/
から64bit版のインストーラをダウンロードして行いました。
なお、デフォルトでは開発用に必要となるbinutils、gcc、makeがインストールされないようなので、以下のようにチェックしてインストールしました。
Cygwinのインストール自体は特に問題なく完了しました。
■gcc コンパイルエラー時の対処方法
上記でインストールしたgccは組込みOSのコンパイルには使わず、あくまでクロス開発に使うbinutilsやgccを別途コンパイルするために使用するとのこと。著者のサイト
http://kozos.jp/books/makeos/
よりソースコードをダウンロードして展開、コンパイルを実施。
binutilsのコンパイルは本書の通りでうまくいったのですが、gccの./configure実施時にこんなエラーが出ました。
$ ./configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c
creating cache ./config.cache
checking host system type... ./config.guess: unable to guess system type
This script, last modified 2004-02-16, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from
ftp://ftp.gnu.org/pub/gnu/config/
If the version you run (./config.guess) is already up to date, please
send the following data and any information you think might be
pertinent to <config-patches@gnu.org> in order to provide the needed
information to handle your system.
何かscriptの内容が古いので上記URLから新しいスクリプトをとってこいということのようで、
ftp://ftp.gnu.org/pub/gnu/config/
から config.guessをダウンロードし差し替えるとコンパイルが通りました。
さらにgcc make時もエラーとなりました。
./libgcc2.c: In function `__muldi3':
./libgcc2.c:537: error: unrecognizable insn:
(insn 244 243 245 0 ./libgcc2.c:528 (set:HI (reg:HI 3 r3)
(const_int 4294967222 [0xffffffb6])) -1 (nil)
(nil))
./libgcc2.c:537: internal compiler error: in extract_insn, at recog.c:2083
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make[2]: *** [libgcc.mk:134: libgcc/./_muldi3.o] エラー 1
make[2]: ディレクトリ '/home/knaka/temp/gcc-3.4.6.tar/gcc-3.4.6/gcc' から出ます
make[1]: *** [Makefile:1261: stmp-multilib] エラー 2
make[1]: ディレクトリ '/home/knaka/temp/gcc-3.4.6.tar/gcc-3.4.6/gcc' から出ます
make: *** [Makefile:23379: all-gcc] エラー 2
こちらは64bit環境での既知のエラーのようで上記著者のサイトに修正パッチがでてました。
■12ステップで作る組込みOS自作入門読み進めていきます
私の環境で発生したエラーは上記程度で、あとは著者のサイトからダウンロードしたHello Worldのソースコードを構築したクロス開発環境で試しにコンパイルしたところあっさりコンパイルできたので、 クロス開発環境はうまく構築できたようです。
なので、 H8/3069Fマイコンボードを購入することにしました。今後「
12ステップで作る組込みOS自作入門」を読み進めつつ、組込みOSの実装の様子を記事にしていく予定です。