広告

2016年7月18日月曜日

【12ステップで作る組込みOS自作入門】Windows 10+Cygwinで実装中

先日記事にした通り、組込みマイコンに関する職業訓練を受講中です。

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の実装の様子を記事にしていく予定です。






2016年7月17日日曜日

SIerを退職した元SEの組込マイコン職業訓練体験談(1) まずは面接選考突破

本ブログのタイトル通り、元々SIerでWindows系メインのSEをやっていたのですが、もう少しプログラミング寄りの仕事にシフトチェンジしたいという思いもあり、当時勤めていたSIer企業を退職しました。

当面は充電期間に充てていたのですが、ぼちぼちエンジニアとして復帰も考えようかなというところで、組込マイコンの職業訓練を受講することにしました。

組込みマイコンに関する職業訓練は全国で行われているようですので、今後組込マイコンの職業訓練を受講しようかなと考えている人向けに体験談を書いていこうと思います。



■職業訓練の組込マイコン科とは?


職業訓練にも色々あるのですが、私が受講することになった組込マイコン科というのは、 マイコンに対してアセンブリやC言語でのプログラミングを学ぶコースとのこと。またC言語でのLinuxのデバイスドライバ開発等Linuxに関する学習もあるようです。

私は基本的にWindows系のSEで、組込系やLinux関連のプログラミングというのは今までのキャリアで経験できなかった分野です。ちょうどいい技術分野なのと、職業訓練なので基本無料(さらに雇用保険ももらえる)ということで受講することにした次第です。




■SE経験者でも組込マイコン職業訓練を受講可能でした


職業訓練は希望すればだれでも受講できるというものではなく、基本的に科ごとに定員があります。また組込マイコン科については受講のための選考試験もありました。

ちなみに私が受けた選考試験では定員に対して1.5倍くらい受験者がいました。選考試験は筆記と面接です。正直筆記試験の難易度は低めで、多分明らかにプログラミングが不向きな人を足切りするためのもので、基本的に面接で受講者を決定しているものと思われます。

基本的に職業訓練は未経験者向けのものだと思いますので、定員の1.5倍の受験者いる場合、私のようなSE経験者はそもそも職業訓練の必要性が薄いと判断されて落とされるのではないかと心配してましたが、結果としては選考を通り受講することになりました。


■職業訓練(組込マイコン)選考試験の面接で話したこと


面接では、特に面接用の準備は行わず素直に本音を話しました。まとめると

  • SE経験はあるが組込マイコンの実務経験はないこと
  • 今後はプログラミングよりの仕事にシフトチェンジしたいので、プログラマーとして付加価値をつけるためにこの職業訓練を受講したい

というようなことを話したと思います。

面接の内容が良かったのか悪かったかはわかりませんが、競争率1.5倍?を無事突破できました。


■職業訓練(組込みマイコン)のカリキュラム


で、組込みマイコン職業訓練のカリキュラムですが、

  • 電子回路
  • アセンブリ言語
  • C言語
  • 組込みマイコン向けC言語
  • Linux

という感じで進んでいくようです。

体験談や訓練の内容、感想を徐々に記事にしていきます。



2016年7月6日水曜日

C言語の複雑なポインタ char *(*a[10])(int **p)←こういうのを理解できる書籍を紹介

以前、C言語のおすすめ書籍として「Cプログラミング専門課程」を紹介しました。

Cプログラミング専門課程」にも複雑なポインタの読み方に関する記述がありますが、ポインタの読み方について、より詳細に書かれた書籍を見つけたのでご紹介です。




なお私は上記書籍の英語版「Expert C Programming: Deep Secrets」をSafari Books Onlineで読んでいます。日本語版は読んでません。

(参考)
Windows系SEの日記: Safari Books Online紹介(定額でコンピュータ関連技術書読み放題サイト)



■複雑怪奇なポインタ定義も理解できるようになります


char *(*a[10])(int **p)

このaが何を指しているかわかりますか?

エキスパートCプログラミング―知られざるCの深層 (Ascii books)」の内容を理解できればこのような複雑なポインタの記述、理解もできるようになると思います。

私も今のところ「Expert C Programming: Deep Secrets」のポインタと配列の章の部分しか読めていないのですが、他にもリンクやセグメント等の話題もあるようですので他の章もじっくり読んでみようと思います。