Arduinoでの
での
組込み
組込み
OS
自作体験
自作体験
坂井弘亮
坂井弘亮
(KOZOSプロジェクト
プロジェクト
)
TwitterID:kozossakai
まず最初に連絡
まず最初に連絡
事務局側で用意している 事務局側で用意しているUSBメモリがありますメモリがあります 「 「FreeBSD-avr-kozos.ova」という」 というOVAファイファイ ル が入っているので,これからの説明時間中に ル が入っているので,これからの説明時間中に 自分の 自分のPCにコピーしてくださいにコピーしてください (1GB程度あるので,コピーに時間がかかります程度あるので,コピーに時間がかかります) ネットからダウンロード済みのひ とは 不要です ネットからダウンロード済みのひ とは 不要です VMはインストールしてありますか?は インストール してありますか? (そうでないそうでな い ひ とは 演習の合間にインストール してください ひ とは 演習の合間にインストール してください)自己紹介
自己紹介
趣味で組込みOSを作っています
趣味で組込みOSを作っています
(KOZOS)
セキュリティキャンプの講師をやっています
セキュリティキャンプの講師をやっています
オープンソースカンファレンスなどのイベントに
オープンソースカンファレンスなどのイベントに
出展しています
出展しています
たまに勉強会とかもやっています
たまに勉強会とかもやっています
本を何冊か書いています
本を何冊か書いています
(12ステップで作る
ステップで作る
組込み
組込み
OS自作入門
自作入門
)
他にも最近は,こんなのを作ったりしてます
他にも最近は,こんなのを作ったりしてます
バイナリかるたとアセンブラ短歌
バイナリかるたとアセンブラ短歌
他にも最近は,こんなのを作ったりしてます
他にも最近は,こんなのを作ったりしてます
バイナリカレンダー
本日やること
本日やること
「 「Arduino」というマイコンボードを対象にして」 というマイコンボードを対象にして マイコンのプログラミング体験をしてみましょう マイコンのプログラミング体験をしてみましょう 「 組込みOS」 というものに触れてみましょう 「 組込みOS」 というものに触れてみましょう「組込み機器」とは何か
「組込み機器」とは何か
こういうのを「組込み機器」と言います
こういうのを「組込み機器」と言います
「 組込み シ ステム」 と か言いま す
「 組込み シ ステム」 と か言いま す
英語だと「 英語だと「Embedded System」です」 です カタカナで「 エンベ デッド」 とも書きます カタカナで「 エンベ デッド」 とも書きます 内部で動いているソフトウェアは 「 組込みソフト 内部で動いているソフトウェアは 「 組込みソフト ウェア」 と言います ウェア」 と言います 内部で動いている 内部で動いているOSは「組込みは 「 組込みOS」と言いま」 と言いま す す (無い場合もある無い場合もある)身の 回り の 組込み 機器を 考えて み よう
身の 回り の 組込み 機器を 考えて み よう
今日ここに来るまでに見た「 組込み機器」 を5 今日ここに来るまでに見た「 組込み機器」 を5 つ,あげ てみよう! つ,あげ てみよう! (勘で良いです勘で良いです)(ヒント
ヒン ト
)
「 たぶ んこれってマイコンが入っていて,ソフトウェ 「 たぶ んこれってマイコンが入っていて,ソフトウェ ア制御にな っているんじゃな いかな あ」 というもの ア制御にな っているんじゃな いかな あ」 というもの があれば,それは 組込み機器です があれば,それは 組込み機器です やってることは 単純だとしても,たとえば動作速 やってることは 単純だとしても,たとえば動作速 度をチューニングできそうな ものがあれば,それは 度をチューニングできそうな ものがあれば,それは おそらくソフトウェア制御の組込み機器です おそらくソフトウェア制御の組込み機器です 自分の家にあるもの,来る途中に見たもの,学 自分の家にあるもの,来る途中に見たもの,学 校内にあるもの 校内にあるものArduino
本日は
本日は
Arduinoで動くプログラムをいじります
で動くプログラムをいじります
プログラムは サンプル があるので,それを改造し プログラムは サンプル があるので,それを改造し ます ます シミュレータ上で動作させ てみます シミュレータ上で動作させ てみます 実機でも動く 実機でも動く(はずは ず)ので,実機で試したいひとはので,実機で試したいひ とは やってみても やってみてもOKですです 慣れたら次は , 慣れたら次は ,OSを載せてみますを載せ てみます OSを使うメリットは何か?を使うメリットは 何か? を考えてみようを考えてみよう (質問質問)組込み機器で,組込み機器で,OSを使うメリットは何でを使うメリットは 何で しょうか? しょうか? (なぜ必要なの?な ぜ 必要な の?)開発環境について
開発環境について
開発には , 開発には ,FreeBSDややLinux系ディストリビュー系ディストリビュー ショ ン ショ ン(Ubuntuなどな ど)などの,な どの, いわゆる「いわゆる「 PC-UNIX」が向いています」 が向いています できることな らこれを機会に,「 できることな らこれを機会に,「PC-UNIX」に慣」 に慣 れてほ しいです れてほ しいです (使っているとかっこいいです使っているとかっこいいです) でも,今回の演習のためだけに でも,今回の演習のためだけにPC-UNIXををPC にインストール するのは たいへ んです にインストール するのは たいへ んですということで
ということで
VMを使います
を使います
VMははPC上で動く,仮想上で動く,仮想PC環境です環境です VM環境の上に環境の上に(Ubuntuなどのな どの)OSをインストーをインストー ル して,ひ とつのウィンドウの中で ル して,ひ とつのウィンドウの中で ひとつのひ とつのPCがが 起動しているような イメージで使うことができます 起動しているような イメージで使うことができます VM上に上にFreeBSDと今回の開発環境をインスと今回の開発環境をインス トール したイメージを,すでに作成してあります トール したイメージを,すでに作成してあります それがさきほ どコピーした「 それがさきほ どコピーした「 FreeBSD-avr-kozos.ova」です」 です間
間
では,
では,
VMを起動してみましょう
を起動してみましょう
VMware Player もしくはもしくは VirtualBox を起動しを起動し てください てください OVAファイルを「インポート」してくださいファイル を「 インポート」 してください 配布資料にも説明がありますので,そっちも参 配布資料にも説明がありますので,そっちも参 考にしてください 考にしてください
インポートできたら,起動してみよう
インポートできたら,起動してみよう
FreeBSDが起動して,ログインプロンプトが出が起動して,ログインプロンプトが出 てきます てきます ログインしてみよう ログインしてみよう (パスワード等は配布資料参パスワード等は 配布資料参 照 照)CUIに慣れよう!
に慣れよう!
開発用の様々な ツール 類は , 開発用の様々な ツール 類は ,CUI(キャラクタ・キャラクタ・ ユーザ・インターフェース ユーザ・インターフェース)での操作がベースにでの操作がベ ースに な っているものが多いです な っているものが多いです な ので な のでCUIでの操作に慣れましょうでの操作に慣れましょう CUIは覚えておいて損は無いです.あとは 覚えておいて損は 無いです.あとCUIでガでガ シガシ使えると,かっこいいです シガシ使えると,かっこいいです CUIの操作は,配布資料を参考にしてくださいの操作は ,配布資料を参考にしてください まずは ファイル を作って編集したりしてみよう まずは ファイル を作って編集したりしてみようマイコン で
マイコン で
Hello Worldを動かしてみよう
を 動かし て み よう
「 「Hello World」と出力するだけのプログラム」 と出力するだけのプログラム が,すでに置いてあります が,すでに置いてあります 「 「avr_03-hello/os」というディレクトリに入ってく」 というディレクトリに入ってく ださい ださい main.cなどのファイルがあるので,ソースコードな どのファイル があるので,ソースコード を見てみよう を見てみよう 「 「make」を実行してみよう」 を実行してみよう → 「「kozos」という」 という 実行モジュール が作成されます 実行モジュール が作成されますプログラムを動かしてみよう
プログラムを動かしてみよう
実行モジュール を,シミュレータで動かしてみよ 実行モジュール を,シミュレータで動かしてみよ う う やりかたは 配布資料を参照してください やりかたは 配布資料を参照してください ソースコードをいろいろいじってみよう ソースコードをいろいろいじってみよう 色を変えてみよう 色を変えてみよう テキストアニメーショ ンをやってみよう テキストアニメーショ ンをやってみようプログラムを読んでみよう
プログラムを読んでみよう
grep を使ってを使ってputs()を追ってみようを追ってみよう gets() を追ってみようを追ってみよう デバイスドライバを読んでみよう デバイスドライバを読んでみよう 割込み処理を読んでみよう 割込み処理を読んでみよう main()に来るまでを読んでみように来るまでを読んでみよう リンカスクリプトを読んでみよう リンカスクリプトを読んでみよう 読んでみたいところがあれば,そこを読んでみよう 読んでみたいところがあれば,そこを読んでみようこのプログラムの問題点
このプログラムの問題点
例えば, 例えば,LED点滅を考えてみよう点滅を考えてみよう (シミュレータシミュレータ だと だとLEDが無いので,定期的に文字出力するこが無いので,定期的に文字出力するこ とで代用します とで代用します) 2つのこと 2つのこと(点滅とコマンド応答点滅とコマンド応答)を同時にやるとを同時にやると したらどうな るか? したらどうな るか? ダンプコマンドを考えてみよう ダンプコマンドを考えてみよう ダンプ中に点滅はダンプ中に点滅は どうな るか? どうな るか?間
間
これを防ぐには
これを防ぐには
ル ープ処理な どがあったら,その都度そこに ル ープ処理な どがあったら,その都度そこに LED点滅の処理を入れる点滅の処理を入れる ダンプ処理な どの時間がかかる処理の最中に, ダンプ処理な どの時間がかかる処理の最中に, 定期的にメインル ープに戻る 定期的にメインル ープに戻る どれもめんどくさい! どれもめんどくさい!OSを使うことでこれらの問題をクリアできます
を使うことでこれらの問題をクリアできます
今回使っている
では,
では,
OSを使った場合を見てみま
を使った場合を見てみま
しょう
しょう
「 「avr_03-sim」を見てみましょう」 を見てみましょう シミュレータで動かしてみましょう シミュレータで動かしてみましょう LEDの点滅処理を入れてみましょうの点滅処理を入れてみましょうOSのソースコードを見てみよう
のソースコードを見てみよう
main()を見てみるを見てみる 各タスクの 各タスクのmain()を見てみるを見てみる kz_XXXX()の先を追ってみるの先を追ってみる タスクスケジューリングを見てみる タスクスケジューリングを見てみる タスクディスパッチを見てみる タスクディスパッチを見てみるOSの必要性
の必要性
ベ ースシステムに ベ ースシステムにOSを使うことで,これらの2つを使うことで,これらの2つ の処理を「 タスク」 にして,並列に動作させ るこ の処理を「 タスク」 にして,並列に動作させ るこ とができます とができます 実際には 実際にはCPUはひとつなので,適当なタイミンは ひ とつな ので,適当な タイミン グで処理を切替えて複数のタスクを一見並列 グで処理を切替えて複数のタスクを一見並列 に動いているように見せ かけてくれます に動いているように見せ かけてくれますOSの必要性
の必要性
な ぜ , な ぜ ,OSが必要なのか考えてみよう!が必要な のか考えてみよう! PCでは,なぜでは ,な ぜWindowsなどのな どのOSが必要なのだが必要な のだ ろうか? ろうか? 組込み機器でも 組込み機器でもOSが必要な理由は何か?が必要な 理由は 何か? (質問質問)ファイルシステムは,ファイル システムは ,OSの必須の機能の必須の機能 か? か?OSの必要性
の必要性
PCと組込み機器では,と組込み機器では,OSの必要性が異なりますの 必要性が 異なります PCでは,アプリケーションが主役.アプリを動かすでは,アプ リケ ーションが 主役.アプ リを 動か す ための 汎用的なベース シス テ ム が 欲しい ための 汎用的なベース シス テ ム が 欲しい 組込み機器では,デ バイス が 主役.コス ト削減の 組込み機器では,デ バイス が 主役.コス ト削減の ため,1 つの マイコンで複数の 制御を 行いたい ため,1 つの マイコンで複数の 制御を 行いたい この ため この ためOSへの要望も異なってきますし,への 要望も異なってきます し,OSの思の 思 想も異なってきます 想も異なってきます (あと歴史も違うあと歴史も違う) (もう1度質問もう1 度質問)ファイルシステムは,ファイルシス テ ム は,OSの必須の機の 必須の 機 能か ? 能か ?OSの歴史の違い
の歴史の違い
汎用 汎用OS メインフレームという巨大な共用コンピュータ メインフレームという巨大な共用コンピュータ (研究機関研究機関) (→ミニコンミニコン→ワークステーションやサーバのように発展ワークステーションやサーバのように発展) → 大学や研究所で,みんなで共用利用したい大学や研究所で,みんなで共用利用したい → マルチタスク,マルチユーザが発展マルチタスク,マルチユーザが発展 PC用用OS(汎用汎用OSの一種?の一種?) 家電メーカーがマイコンという超安い 家電メーカーがマイコンという超安いCPUっぽいものを開発っぽいものを開発 → これで家庭用コンピュータ作れるんじゃね?これで家庭用コンピュータ作れるんじゃね? (家庭向け家庭向けPC)→ GUIほしいよねほしいよね → マルチタスクマルチタスクOSほしいよねほしいよね(汎用汎用OS化化) 組込み機器 組込み機器 電子機器を,マイコンでソフトウェア制御したい 電子機器を,マイコンでソフトウェア制御したい (家電業界家電業界) → 複数のデバイスを1個のマイコンで制御したい複数のデバイスを1個のマイコンで制御したい(コスト削減コスト削減) → モニタをマルチタスク化モニタをマルチタスク化 → これってこれってOSだよねだよね