書籍『12ステップで作る 組込みOS自作入門』を読み進めています。
一度環境構築をした後、PCの再起動によりUSBシリアルのアタッチがなくなった場合や、暫くやらずに久しぶりに再開する場合を想定してやり方をまとめます。
以下、過去の記事です。
- 環境構築(1/2 - USBシリアル編):
- 環境構築(2/2 - ツールインストール、Hello World! 編):
- 2ndステップ以降(詰まる可能性のある点など):
目次
USBシリアル設定(PCを再起動したとき)
USBシリアルをWSLから認識させる
一度Windowsをシャットダウンor再起動するとWSLからUSBシリアルを認識できない状態になると思うので、再びアタッチします。
参照:過去の記事1 「2-1. USBシリアルをWSLにアタッチする」
USBシリアルをWindows機に接続します。
PowerShellを立ち上げて接続されているデバイスを確認します。
初回ではないので、USBシリアルはこの時点で共有状態になっています。
PS > usbipd list Connected: BUSID VID:PID DEVICE STATE 1-3 0d8c:0014 USB Audio Device, USB 入力デバイス Not shared 1-4 8087:0029 インテル(R) ワイヤレス Bluetooth(R) Not shared 2-2 056e:5004 Elecom USB-Serial Converter (COM3) Shared 2-3 0411:0338 USB 大容量記憶装置 Not shared 2-4 0250:3412 USB 入力デバイス Not shared Persisted: GUID DEVICE 6724xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Elecom USB-Serial Converter (COM4)
WSLにアタッチします。
1度目でエラーになったら同じコマンド2度連続で実行するとアタッチできるケースが多いです。
PS > usbipd attach --wsl --busid 2-2 usbipd: info: Using WSL distribution 'Ubuntu' to attach; the device will be available in all WSL 2 distributions. usbipd: info: Using IP address 172.31.176.1 to reach the host. PS > usbipd list Connected: BUSID VID:PID DEVICE STATE (略) 2-2 056e:5004 Elecom USB-Serial Converter (COM3) Attached (略)
WSL側から確認します。
$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 056e:5004 Elecom Co., Ltd UC-SGT Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Elecom製のUSBシリアルケーブル UC-SGT が表示されました。
実行ファイルの作成・書込み・実行
ソースコードをダウンロードしてある前提で進めます。
参照:過去の記事2 項目4-6
1st ~ 12th ステップ共通(bootloadのコンパイルから起動・実行)
WSLのターミナルで実行したいStepのbootloadディレクトリをカレントディレクトリとします。
$ cd ~/12step_emb_os/osbook_03/01/bootload
(もしも以前に.motファイルまで作成したことがある場合は make image の実行まで省略できます。むしろ「make: 'all' に対して行うべき事はありません.」のような警告が表示されます。)
Makefile内のデバイスファイル(/dev/tty*)を変更します。
私の環境では /dev/ttyUSB0 のため、以下のようにして変更箇所(cuad0)を置換します。
$ sed -i 's/cuad0/ttyUSB0/g' Makefile
実行形式ファイル(ファームウェア)を作成し、それをモトローラSレコード・フォーマットに変換します。
$ make $ make image
(この後にファイルに変更を加えた場合は以下のコマンドでクリーンをしてから上記のmake, make imageをやり直します。)
$ make clean
H8マイコンのディップスイッチを ON, ON, OFF, ON に合わせて電源を入れ直したら、フラッシュROMに kzload.mot を書き込みます。
$ sudo make write
続いて、マイコンのディップスイッチを ON, OFF, ON, OFF に合わせて電源を入れ直し、cuコマンドでシリアル接続します。
「Connected.」と表示されたら、リセットボタンを押す度に「Hello World!」が出力されます。
接続を終了するには「~」「.」を入力します。
$ cu -s 9600 -l /dev/ttyUSB0 Connected. Hello World! Hello World! Hello World! ~[(PC名)]. Disconnected.
4th・5th ステップ(ファイル転送・ダンプ)
マイコン起動後にloadコマンドでファイル転送します。
$ sudo cu -s 9600 -l /dev/ttyUSB0 kzload> load ~+sx (ファイル名) kzload> dump kzload> ~.