12ステップで作る組込みOS自作入門の環境構築(VirtualBox使用)

はじめに

12ステップで作る組込みOS自作入門の環境構築に苦戦したので、やったことをまとめておきます。

 

いくつか環境を変えて挑戦してみました。

この記事では、成功したVirtualBoxUbuntu環境を構築した際の方法をまとめます。

失敗した方法もいつか記事にしておきたいと思います。成功された方はコメントで教えていただけるとありがたいです。

 

主に参考にしたサイト

  1. [機材, ビルド方法] 12ステップで作る組み込みOS自作入門 - marlesanのブログ

  2. [ビルド前環境構築] 組込みOS自作 H8マイコンの開発環境構築|コアダンプの数だけ強くなれるよ

  3. [共有ファイル設定] VirtualBoxでWindows10とUbuntu間のファイル共有

 

PCスペック

DELL Inspiron16

Windows10

 

購入した機材

まず、購入したものはこちらです。通販で買うなら注文してから届くまでの間に環境構築を進めてしまうと効率的ですね!

 

  1. マイコン(必須)[H8/3069Fネット対応マイコンLANボード(完成品)]
  2. USB-シリアルケーブル(必須)[ELECOM USBtoシリアルケーブル USBオス-RS-232C用 UC-SGT1]
  3. ACアダプター(必須)[超小型スイッチングACアダプター5V1A AD-D50P100]
  4. シリアル延長ケーブル(4 or 5)[StarTech.com RS-232C ストレートケーブル 0.5m ブラック D-Sub 9ピン(オス) - D-Sub 9ピン(メス) MXT10050CMBK]
  5. ペンチ(4 or 5)ダイソーで200円のペンチを購入しました。)
  6. スペーサー[3mmプラネジ(7mm)+六角スペーサー(14mm)セット]

1, 2, 3 は必須ですね。

色々記事を見ていて2のシリアルケーブルを使っていた方は見なかった気がしますが、問題なく使用できました。スケルトンなところが気に入って購入しました。

 

4 or 5 についてですが、2のシリアルケーブルだけではマイコンに接続できません。端子はオスとメスなので問題ないですが、留め具が両方メスなので噛み合わないのです......

端子メス,オス、留め具は両方オスになっているシリアル延長ケーブルを購入するか、ペンチでマイコン側の留め具と取ってしまいましょう。

私は初め延長ケーブルを使用していたのですが、どうにも嵩張るのでペンチを買ってマイコン側の留め具を取ってしまいました。留め具を取ってしまうと接地ができずないため不具合が起こる可能性があると書いている記事をどこかで見ましたが、私は(まだ数回しか使っていませんが)今のところ問題なく使用できています。

不具合を確認できたら追記します。

 

6はマイコンを机から浮かせるためのものです。なくてもOS作成は可能です。

 

VirtualBox / Ubuntuのインストール

VirtualBoxUbuntu環境を構築します。

VirtualBoxのインストール方法は検索かけると色々と出てくると思います。

Ubuntuのインストールについても参照サイト2で詳しく書かれているのでご参照ください。

 

私がインストールしたバージョンは次の通りです。

 

USBシリアルの接続確認

書籍とは順序が異なりますが、環境構築の最後の最後にシリアルの接続ができないとなるとショックなので早いところ確認してしまいましょう。

 

Ubuntuが起動したままだと失敗してしまうので、起動している場合は電源を切ってください。

USBの設定画面を開くと最初はUSBデバイスフィルターに何も表示されてないと思います。

画面右の+マークから追加しましょう。

 

+マークを押すと候補が表示されます。

USBシリアルを選択します。どれかよくわからなければ、USBシリアルをPCから抜き挿ししてみて、挿した時のみ表示されているものを選択しましょう。

f:id:hayariapp:20211228193227p:plain

 

Ubuntuを起動して端末で次のコマンドを打つとUSB接続が認識されているかわかります。

ls -l /dev/serial/by-id

 

USB接続が認識されていればこのように ../../tty*** と表示されると思います。

f:id:hayariapp:20220123164836p:plain

 

SSH接続

こちらも参照サイト2で書かれている通りです。

これと次項の共有ファイル設定を行うことで、Windows環境でコーディングを進めることができます。

 

Ubuntuの端末で実行したコマンドはこちら。

sudo apt update
sudo apt install openssh-server sudo systemctl enable ssh sudo systemctl start ssh

2行目の

sudo apt install openssh-server

の前に

sudo dpkg --configure -a

をする必要がある方もいらっしゃるかもしれません。(私がそうでした。)

 

その後は参考サイト2の通りにポートフォワーディングを進めましょう。

一応リンク切れになった時のために文字に起こしておきます。

 

VirtualBoxの設定 > ネットワーク > アダプター1

  > 割り当て:NAT

 

・同画面下部「ポートフォワーディング」をクリック。

 ポートフォワーディングルールの画面が表示されるので、+マークをクリックして、

  ホストポート:10022

  ゲストポート:22

 を設定。

 

WindowsTeratermを起動して、

 ホスト:127.0.0.1

 TCPポート:10022

 サービス:SSH

 を設定してOK。

 

これでWindowsTeratermからVirtualBoxUbuntuを操作できるようになりました。

 

ホームディレクトリのフォルダ名を日本語から英語に変更

以下を実行して、出てきた画面でUpdateNowをクリックします。

LANG=C xdg-user-dirs-gtk-update

 

共有フォルダ設定

共有フォルダーを設定すると、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で以下のコマンドを実行します。

sudo apt install virtualbox-guest-utils
sudo mount.vboxsf [上記(1)] [上記(2)]
sudo gpasswd --add [Ubuntuのユーザ名] vboxsf

 

設定がうまく行っているか、共有設定したフォルダに新規ファイルを作成して確認してみてください。

 

binutils / gcc / kz_h8write のビルド

主に参考サイト1を参考にしました。

私が使用したバージョンは次の通りです。

binutils:2.19.1

gcc:3.4.6

 

binutils

Ubuntuで作業ディレクトリまで移動して、下記のコマンドを実行します。

wget https://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2
tar -jxvf binutils-2.19.1.tar.bz2
cd binutils-2.19.1/
mkdir build
cd build
../configure --target=h8300-elf --disable-nls --disable-werror
make
sudo make install

 

gcc

再び作業ディレクトリに戻り、下記のコマンドを実行します。

wget http://core.ring.gr.jp/pub/GNU/gcc/gcc-3.4.6/gcc-3.4.6.tar.gz
tar zxvf gcc-3.4.6.tar.gz
cd gcc-3.4.6/
vi gcc/collect2.c
(書籍にある通りにcollect2.cを修正)

cd ..
wget http://kozos.jp/books/makeos/patch-gcc-3.4.6-x64-h8300.txt
patch -p0 < patch-gcc-3.4.6-x64-h8300.txt
mkdir build
cd build/
../configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c --disable-werror
make
sudo make install

 

kz_h8write

次の配布サイトから kz_h8write-v0.2.1.zip をダウンロードして作業フォルダに移動しておきます。

H8/3069F writer for KOZOS (kz_h8write) プロジェクト日本語トップページ - OSDN

 

zipを解凍してmakeします。make install はしなくて良いです。

unzip kz_h8write-v0.2.1.zip
cd PackageFiles/src
make

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シリアルの接続確認」の最後に確認したものと同じコマンドです。)

ls -l /dev/serial/by-id

「../../ttyUSB0」 と表示されたら、「/dev/ttyUSB0」がデバイスファイルです。

 

Makefile内のシリアル接続先が書かれている部分

H8WRITE_SERDEV = /dev/cuad0

H8WRITE_SERDEV = [デバイスファイル名]

に変更して保存します。

 

ビルド

ソースコードのあるフォルダ(src/01/bootload)に入り、

make

を実行します。

 

ここで失敗した場合は作成したファイルが誤っていると思われます。

一度、「make clean」 して、makeしたときに作成されたファイルを削除してからファイルを修正しましょう。

 

次に

make image

を実行します。

 

うまくいったらマイコンのスイッチを書籍にあるようにON, ON, OFF, ON にしてから電源に繋いで

sudo make write

を実行します。

 

Hello World! を出力する

フラッシュROMから起動するために一度マイコンの電源を切ってからスイッチをON, OFF, ON, OFF にセットして電源を入れます。

 

シリアル通信にcuコマンドを使用します。

インストールが済んでいない場合はインストールします。

sudo apt install cu

 

次のコマンドでシリアル接続します。

sudo chmod 666 [デバイスファイル名]
cu -s 9600 -l [デバイスファイル名]

"Connected"と表示されれば接続できています。

失敗した場合でも最後のコマンドを2,3回繰り返すとうまくいくと思います。

 

接続できたらリセットボタンを押す度に"Hello World!"が出力されると思います。

ぽちぽち押しまくりましょう!楽しいですね(^_^)