12ステップで作る組込みOS自作入門の環境構築(VirtualBox使用)
はじめに
12ステップで作る組込みOS自作入門の環境構築に苦戦したので、やったことをまとめておきます。
いくつか環境を変えて挑戦してみました。
この記事では、成功したVirtualBoxにUbuntu環境を構築した際の方法をまとめます。
失敗した方法もいつか記事にしておきたいと思います。成功された方はコメントで教えていただけるとありがたいです。
主に参考にしたサイト
-
[機材, ビルド方法] 12ステップで作る組み込みOS自作入門 - marlesanのブログ
-
[ビルド前環境構築] 組込みOS自作 H8マイコンの開発環境構築|コアダンプの数だけ強くなれるよ
-
[共有ファイル設定] VirtualBoxでWindows10とUbuntu間のファイル共有
PCスペック
DELL Inspiron16
Windows10
購入した機材
まず、購入したものはこちらです。通販で買うなら注文してから届くまでの間に環境構築を進めてしまうと効率的ですね!
- マイコン(必須)[H8/3069Fネット対応マイコンLANボード(完成品)]
- USB-シリアルケーブル(必須)[ELECOM USBtoシリアルケーブル USBオス-RS-232C用 UC-SGT1]
- ACアダプター(必須)[超小型スイッチングACアダプター5V1A AD-D50P100]
- シリアル延長ケーブル(4 or 5)[StarTech.com RS-232C ストレートケーブル 0.5m ブラック D-Sub 9ピン(オス) - D-Sub 9ピン(メス) MXT10050CMBK]
- ペンチ(4 or 5)(ダイソーで200円のペンチを購入しました。)
- スペーサー[3mmプラネジ(7mm)+六角スペーサー(14mm)セット]
1, 2, 3 は必須ですね。
色々記事を見ていて2のシリアルケーブルを使っていた方は見なかった気がしますが、問題なく使用できました。スケルトンなところが気に入って購入しました。
4 or 5 についてですが、2のシリアルケーブルだけではマイコンに接続できません。端子はオスとメスなので問題ないですが、留め具が両方メスなので噛み合わないのです......
端子メス,オス、留め具は両方オスになっているシリアル延長ケーブルを購入するか、ペンチでマイコン側の留め具と取ってしまいましょう。
私は初め延長ケーブルを使用していたのですが、どうにも嵩張るのでペンチを買ってマイコン側の留め具を取ってしまいました。留め具を取ってしまうと接地ができずないため不具合が起こる可能性があると書いている記事をどこかで見ましたが、私は(まだ数回しか使っていませんが)今のところ問題なく使用できています。
不具合を確認できたら追記します。
6はマイコンを机から浮かせるためのものです。なくてもOS作成は可能です。
VirtualBox / Ubuntuのインストール
VirtualBoxにUbuntu環境を構築します。
VirtualBoxのインストール方法は検索かけると色々と出てくると思います。
Ubuntuのインストールについても参照サイト2で詳しく書かれているのでご参照ください。
私がインストールしたバージョンは次の通りです。
- VirtualBox 6.1.28 (step3以降 6.1.30)
- Ubuntu 20.04.3
USBシリアルの接続確認
書籍とは順序が異なりますが、環境構築の最後の最後にシリアルの接続ができないとなるとショックなので早いところ確認してしまいましょう。
Ubuntuが起動したままだと失敗してしまうので、起動している場合は電源を切ってください。
USBの設定画面を開くと最初はUSBデバイスフィルターに何も表示されてないと思います。
画面右の+マークから追加しましょう。
+マークを押すと候補が表示されます。
USBシリアルを選択します。どれかよくわからなければ、USBシリアルをPCから抜き挿ししてみて、挿した時のみ表示されているものを選択しましょう。
Ubuntuを起動して端末で次のコマンドを打つとUSB接続が認識されているかわかります。
USB接続が認識されていればこのように ../../tty*** と表示されると思います。
SSH接続
こちらも参照サイト2で書かれている通りです。
これと次項の共有ファイル設定を行うことで、Windows環境でコーディングを進めることができます。
Ubuntuの端末で実行したコマンドはこちら。
2行目の
の前に
をする必要がある方もいらっしゃるかもしれません。(私がそうでした。)
その後は参考サイト2の通りにポートフォワーディングを進めましょう。
一応リンク切れになった時のために文字に起こしておきます。
・VirtualBoxの設定 > ネットワーク > アダプター1
> 割り当て:NAT
・同画面下部「ポートフォワーディング」をクリック。
ポートフォワーディングルールの画面が表示されるので、+マークをクリックして、
ホストポート:10022
ゲストポート:22
を設定。
ホスト:127.0.0.1
TCPポート:10022
サービス:SSH
を設定してOK。
これでWindowsのTeratermからVirtualBoxのUbuntuを操作できるようになりました。
ホームディレクトリのフォルダ名を日本語から英語に変更
以下を実行して、出てきた画面でUpdateNowをクリックします。
共有フォルダ設定
共有フォルダーを設定すると、Windowsで共有設定したフォルダの中身とUbuntuで共有設定フォルダを同期させることができます。
つまり、
Windowsの共有フォルダ:C¥DirWin
Ubuntuの共有フォルダ:/DirUbuntu
の時、Window側から見た時のDirWinの中身とUbuntu側から見たDirUbuntuの中身が同じものになります。
設定する際に参考サイト3を主に参考にしました。
・Windows側、Ubuntu側で共有フォルダを作成しておく。(上記の例と同じフォルダで設定することにします)
・VirtualBoxの設定 > 共有フォルダー の +マークをクリック
フォルダーのパス:C:¥DirWin
フォルダー名:(自動で入力されます) −−− (1)
読み取り専用:OFF
自動マウント:ON
マウントポイント:/DirUbuntu −−− (2)
永続化する:ON
・Ubuntuを再起動する
Ubuntuで以下のコマンドを実行します。
設定がうまく行っているか、共有設定したフォルダに新規ファイルを作成して確認してみてください。
binutils / gcc / kz_h8write のビルド
主に参考サイト1を参考にしました。
私が使用したバージョンは次の通りです。
binutils:2.19.1
gcc:3.4.6
binutils
Ubuntuで作業ディレクトリまで移動して、下記のコマンドを実行します。
gcc
再び作業ディレクトリに戻り、下記のコマンドを実行します。
kz_h8write
次の配布サイトから kz_h8write-v0.2.1.zip をダウンロードして作業フォルダに移動しておきます。
H8/3069F writer for KOZOS (kz_h8write) プロジェクト日本語トップページ - OSDN
zipを解凍してmakeします。make install はしなくて良いです。
makeすると kz_h8write というファイルができると思います。
書籍の通り、src/tools/h8write フォルダを作成して、
kz_h8write
kz_h8write.c
を移動しましょう。
この時、ファイル名の先頭のkz_を消して h8write, h8write.c に変更してください。
ソースファイルの作成
書籍を見ながら src/01/bootload にソースファイルを作成していきましょう。
サポートページからダウンロードすることもできます。
(OS自作本編第3回)Ubuntu,Fedora,Cygwinで動作確認した
サイト内の「こちらは上のソースコードをアーカイブしたもの」をクリックするとzipファイルがダウンロードされます。
プログラムをビルドする
Makefileの修正
Makefile内のシリアル接続先を変更します。
PCとマイコンを接続してから、次のコマンドでシリアルデバイスファイルを確認します。(序盤の「USBシリアルの接続確認」の最後に確認したものと同じコマンドです。)
「../../ttyUSB0」 と表示されたら、「/dev/ttyUSB0」がデバイスファイルです。
Makefile内のシリアル接続先が書かれている部分
を
に変更して保存します。
ビルド
ソースコードのあるフォルダ(src/01/bootload)に入り、
を実行します。
ここで失敗した場合は作成したファイルが誤っていると思われます。
一度、「make clean」 して、makeしたときに作成されたファイルを削除してからファイルを修正しましょう。
次に
を実行します。
うまくいったらマイコンのスイッチを書籍にあるようにON, ON, OFF, ON にしてから電源に繋いで
を実行します。
Hello World! を出力する
フラッシュROMから起動するために一度マイコンの電源を切ってからスイッチをON, OFF, ON, OFF にセットして電源を入れます。
シリアル通信にcuコマンドを使用します。
インストールが済んでいない場合はインストールします。
次のコマンドでシリアル接続します。
"Connected"と表示されれば接続できています。
失敗した場合でも最後のコマンドを2,3回繰り返すとうまくいくと思います。
接続できたらリセットボタンを押す度に"Hello World!"が出力されると思います。
ぽちぽち押しまくりましょう!楽しいですね(^_^)