部内向けスキルアップ研修 「組込みOS自作入門」

部内向けスキルアップ研修
「組込みOS自作入門」
2013年5月
1stステップ担当:池田
目次
• はじめに
• 開発環境の構築
• Hello World!
• まとめ
はじめに
本研修のねらい
• OSの自作を通してスキルアップ
– ハードウェアとソフトウェアにまたがる広範
な基本技術を獲得
• 全員講師型スタイルが機能するか実験
– 講師をやるためには主体的な学習が必要
– 発表機会が増えることにより発表技術も向上
総括から
• 心構え
– 研修を「やっただけ」で終わらないように
• 理想
– 研修で得たものを業務上の何かに役立てる
教科書
• 12ステップで作る組込みOS自作入門
サポートページ
• http://kozos.jp/books/makeos/
配布物の確認
• マイコンボード
• シリアルケーブル
• ACアダプタ
• 教科書
OSについて一言
• オペレーティングシステム
– 汎用OS
• Windows, Linux, Macintosh
• 日常でよく目にする
– 組込みOS
• ITRON, VxWorks, QNX
• 日常で意識することは少ない
OSあると何が嬉しいのか
• アプリケーションが楽できる
– 低層の細かいことを気にしなくて済む
• CPU
• Memory
• Devices
– 炊飯器アプリ
• 温度管理
• 時刻表示
開発環境の構築
ベースになる環境
• 作業用ノートPC
– Windows 7 Professional 32bitを推奨
– USB2.0ポートまたはシリアルポートが必要
• インストールしておくアプリケーション
– Cygwin
– Tera Term
Cygwinインストール勘所
• インストールはおおむねデフォルト
– と言いつつ、追加パッケージが必要
• 必須の追加パッケージ
– binutils, gcc, make, bzip2, unzip
• お好みに応じて
– openssh, wget, vim, etc
Tera Termインストール勘所
• 特になし
– コンパクトインストールがおすすめ
クロスコンパイラの作成
• 用語の確認
• 実際の作業
用語その一
• セルフ開発
– プログラムの開発環境と実行環境が同一にな
る開発
– 例)Windows上で開発、Windows上で実行
– セルフ開発に用いるコンパイラをセルフコン
パイラと呼ぶ
用語その二
• クロス開発
– プログラムの開発環境と実行環境が異なる開
発
– 例)Windows上で開発、H8上で実行
– クロス開発に用いるコンパイラをクロスコン
パイラと呼ぶ
現状
• セルフコンパイラはインストール済み
– Cygwinインストール時に入れたgccがそれ
– Windows上で開発、Windows上で実行可
– しかし、クロスコンパイラがないため、
Windows上で開発、H8上で実行不可
セルフコンパイラの動作確認
• よくあるHello World!のコードを作成
– 教科書p.xIのリスト1を参照
$ gcc hello.c -o hello -Wall
$ ./hello.exe
Hello World!
$
クロスコンパイラ作成の準備
• 必要なファイルをUSBメモリで配布
– binutils-2.19.1.tar.bz2
– gcc-3.4.6.tar.bz2
• 適当な場所へコピー
– 例)C:¥cygwin¥home¥ikeda¥build
• Cygwin Terminalを起動
クロスコンパイラ作成その一
• binutilsのインストール
$ tar xjvf binutils-2.19.1.tar.bz2
$ cd binutils-2.19.1/
$ ./configure --target=h8300-elf -disable-nls --disable-werror
$ make
$ make install
クロスコンパイラ作成その二
• gccのインストール
$ tar xjvf gcc-3.4.6.tar.bz2
$ cd gcc-3.4.6/
$ ./configure --target=h8300-elf -disable-nls --disable-werror --disablethreads --disable-shared --enablelanguages=c
$ make
$ make install
作業内容の解説
• binutilsのインストール
– H8用のアセンブラやリンカの作成
– as, ld, objcopy, objdump, etc
• gccのインストール
– H8用のCコンパイラの作成
– gcc, etc
Hello World!
Hello World!に必要なファイル
main.c
main()関数とHello World!の出力
startup.s
スタートアップ(アセンブラ)
vector.c
割込みベクタの定義
lib.h, lib.c
各種ライブラリ関数
serial.h, serial.c シリアルデバイスドライバ
defines.h
様々な型の定義など
ld.scr
リンカスクリプト
Makefile
ファイル作成
• クロスコンパイラ作成の様子を見つつ、
必要なファイルを作成します
• ファイルの作成場所
– 例)
C:¥cygwin¥home¥ikeda¥src¥01¥bootload
• 資料を見つつ、テキストエディタで入力
もくもく会
• ここで、しばらく黙々と作業します
– 教科書p.23以降のソースコードリストを参照
ビルド
• makeの実行
$ cd src/01/bootload
$ ls
$ make
おそらくエラーが沢山出るので、適宜修正
ファイルフォーマット変換
• マイコンボードのフラッシュROM
– モトローラSレコードフォーマットでないと
書き込めない仕様
– ビルドで作成したkzloadはELFフォーマット
なので、ファイルフォーマットを変換
$ make image
書き込みソフトの準備
• 教科書で紹介されているh8writeではなく
改良版kz_h8writeを使用
$ cd build/
$ unzip kz_h8write-v0.2.1.zip
$ cp PackageFiles/bin/kz_h8write.exe
../src/tools/kz_h8write/
USBシリアルアダプタ
• シリアルポートのないPCは、以下を実施
– ドライバファイルを解凍
– ドライバをインストール
– USBポートにUSBシリアルアダプタを挿入
– Winows 7の場合、インターネットにつな
がっていれば自動でインストールされる?
マイコンボードと接続
• PCとマイコンボードをシリアルケーブル
で接続
• マイコンボードのディップスイッチをフ
ラッシュROM書き込みモードに設定
– 左からON, ON, OFF, ON
フラッシュROMに書き込み
• マイコンボードにACアダプタを接続
– 電源スイッチはないので、即電源ONします
• 以下の書き込みコマンドを実行
$ make write
端末エミュレータ起動
• Tera Termを起動
• デフォルト設定でシリアルポート接続
– ボーレート 9600 bps
– パリティなし
– ストップビット 1 bit
マイコンボード再起動
• ACアダプタを抜いて電源OFF
• マイコンボードのディップスイッチをプ
ログラム実行モードに設定
– 左からON, OFF, ON, OFF
• マイコンボードにACアダプタ接続
動作確認
• 端末エミュレータの画面にHello World!
が表示されます
• リセットボタンを押すたびHello World!
が表示されることを確認
まとめ
今日やったこと
• 研修用の機材を入手
• 開発環境を構築
• Hello World!を実行
– 実行できなかった人は、課外活動で実行
今日やってほしいこと
• 家に帰ったら、教科書を読んで復習
– 説明しきれなかった良いことが、沢山書いて
あります
最後に
来月以降のことを相談
ステップ
担当
ステップ
担当
1
池田
7
池田
2
松元
8
松元
3
谷口
9
谷口
4
中村
10
中村
5
山田
11
山田
6
井崎
12
井崎
次回の開催予定
• 日時
– 6月19日(水) 13:00~
• 場所
– 技術支援室
• 担当
– 松元さん