Windows IoT Core + Raspberry Pi2でシリアル接続を使ったカーネルデバッグを試す

Windows IoT Coreを搭載したRaspberryPi2に対して通信する場合、LAN経由で通信してやり取りするのが一般的である。USB-UART変換ケーブルで直接接続してダンプを表示しているドキュメントがあったので、どんなことができるのか実際に試してみたときのメモ。

発端となったドキュメントを見ると、RaspberryPi2の6、8、10番ピンシリアル変換ケーブルを接続して、WINDBGで COMポートを監視すると、情報が流れてくるような内容である。

ただFTDI製のケーブルを使う前提で、UART側のどのピンに接続するか明記されていない。RaspberryPi2側も6番ピンがGNDなのはわかったが、8と10番Reservedとだけ書かれてなんなのか不明。このドキュメントに沿ってやってみたもののうまくいかなかった。

情報が圧倒的に少ないなか、ネットをさまよっていると、同じような内容のブログを発見。なんとかダンプ表示までこぎつけたので、やり方をまとめる。

USB-UART変換モジュール

まず、USB-UART変換モジュールは、aitendoのUSB-UART変換モジュールCP2102で、いくつかマイナーチェンジしていてこれの終了版3を使用している。

USB2UART-CP2102-B-320

Raspberry Pi2の設定

Power Shellでログインして以下のコマンドを実行して、デバッグ出力をONにする

bcdedit -store C:\EFIESP\efi\Microsoft\Boot\bcd -dbgsettings serial
bcdedit -store C:\EFIESP\efi\Microsoft\Boot\bcd -debug on

WINDBGの起動

windbg.exeを起動し、ファイルメニューからKernel Debuggingを選択する。オプションパネルが表示されるので、下図のように設定値を入力して起動する。
03

接続待ち状態になれば、準備完了。

04

ワイヤの接続

基本的には、GndとGndTxDとRxDRxDとTxDとなるように接続すればよいはず。
上記ブログだと、8番ピンがTxD10番ピンがRxDとあるので、これに従って接続してみる(RaspberryPi2の関連の他サイトでもそう書いてある)

が、なにも反応なしである。またネットを徘徊するも情報なし。PinレイアウトはWindows IoT Coreのドキュメントでは”Reserved”になっており、TxD、RxDが明記されてないのが気になっていたので、配線を逆にしてみたところ下図のようにダンプが表示された。


05

なにが間違っていて、なにが正しいのか良くわからないが、とりあえず下表のようにしたらダンプが出力されたことを確認。

Raspberry Pi2USB-UART変換モジュール
Gnd(6pin)Gnd
RxD(8pin)TxD
TxD(10pin)RxD

ピンレイアウトは、レジスタを変更すれば変えることができると思うので、ひょっとするとWindows IoT Coreがそうしているのかもしれないし、今はReservedなだけなので、将来的に変更になるかもしれない。

あと、気になったのは、シリアル接続が成功すると、必ずLANが切断される。Windows IoT Core Watcherを見ると、チェックが外れてオフラインになっているのがわかる。これも仕様なのかは不明。ただちょっと不便である。

06

いちおうシリアル接続に成功?したわけだが、接続時にログが少し表示するだけで、それ以降なにも変化なし。Windows IoT Core向けのAPIでシリアル通信向けのprint関数でもあれば、ここに動作中アプリからログ出力できて使い道もありそうである。LAN経由オンリーだと、オフライン環境では、動作確認できないので、また進展あれば追記する予定。