開発効率を上げるために

SIM送受信データをトレースする機器を用いることにより、デバッグ作業等の開発効率を向上することができます。 ここでは、SIMtrace 2 を用いたトレース環境の構築方法概要を紹介します。 実際の作業にあたっては、必ず製造元サイトも併せてご確認ください。

構成概要

  • IoTデバイス
    • SIMを装着するデバイスです。
    • SIMスロットには、SIMフレキシブルケーブルを装着し、もう片側をSIMtrace 2に装着します。
  • ICカードリーダ
    • IoTデバイスに代わってSIMカード情報を読み取るデバイスです。
    • あらかじめSIMカードを装着しておきます。
  • SIMtrace 2 ボード
    • IoTデバイスとICカードリーダの中継機です。
    • USB接続直後は、通常モード(LED(D4)が赤点灯、LED(D5)が緑点灯)の状態です。
    • ボード上の BOOTLOADER ボタンを押しながら、 RESET ボタンを押すことで、DFUモード(LED(D5)のみ緑点灯)に切り替え可能です。
  • PC
    • IoTデバイスとSIMカードの通信をキャプチャーするために用いるPCです。

    • Debian系Linuxが必要です。ここではUbuntu22.04を用います。

    • VMwareやVirtualBoxなど仮想環境でUSBパススルー機能を利用すれば、Linuxは、ゲストOSとして稼働させることが可能です。
      • USB接続機器(SIMtrace 2、ICカードリーダー)は、ゲストOSで認識されるようあらかじめ仮想環境で設定を行った上で、作業を進めてください。
      • SIMtrace 2を仮想環境のゲストOS上でUSBパススルー経由で認識させる際は、事前にSIMtrace 2 ボードを通常モード、DFUモードに切り替え、ゲストPCで何れのモードでも認識できるよう設定する必要があります。
  • 構成イメージ
    ../_images/1707052023.png
  • 実際の構成
    ../_images/1707052086.png

ファームウェアの更新

  1. PCにファームウェア更新に必要なツールをインストールします。
    sudo apt-get install dfu-util
    
  2. SIMtrace 2ボードをPCに接続した状態でDFUモード起動します。
    • SIMtrace 2ボードの BOOTLOADER ボタンを押しながら RESET ボタンを押して、DFUモードに切り替えます。

    • SIMtrace 2ボードがDFUモードに切り替わるとLED(D5)のみが緑点灯します。

    • 実行結果に [1d50:60e3] と表示されている行が存在することを確認します。

      sudo dfu-util --list
      ...
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=2, name="not available", serial="..."
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=1, name="Flash (Application Partition)", serial="..."
      Found DFU: [1d50:60e3] ver=0000, devnum=6, cfg=1, intf=0, path="1-2", alt=0, name="RAM", serial="..."
      
  3. 必要なファームウェアをダウンロードします。
    wget https://ftp.osmocom.org/binaries/simtrace2/firmware/latest/simtrace-cardem-dfu-latest.bin
    
    • 必要なファームウェアは作業目的によって変わります。
    • 今回の simtrace-cardem-dfu-latest.bin は、ICカードリーダを用いてSIMのエミュレーションを実施する場合に用います。
    • この例では取り上げませんが、ICカードリーダではなくSIMtrace 2ボード上のSIMスロットを用いる場合は、 simtrace-trace-dfu-latest.bin を使用します。
  4. ダウンロードしたファイルでファームウェアを更新します。
    sudo dfu-util --device 1d50:60e3 --cfg 1 --alt 1 --reset --download simtrace-cardem-dfu-latest.bin
    
  5. ファームウェア更新後に再起動され、通常モードで起動されます。

ICカードリーダのセットアップ

  1. PC/SCサービスのインストールと起動
    • 次のコマンドでPC/SCサービスをインストールします。これにより、PC/SCリーダーと通信するための必要なサービスとライブラリがインストールされます。

      sudo apt-get install pcscd libpcsclite1 libccid
      
    • pcscd を起動し、起動状態を確認します。

      sudo systemctl start pcscd
      systemctl status pcscd
      
  2. ICカードリーダーの認識確認
    • ICカードリーダーの接続状態を確認するため pcsc_scan を用います。

    • pcsc_scan コマンドが含まれる pcsc-tools パッケージをインストールします。

      sudo apt-get install pcsc-tools
      
    • ICカードリーダをスキャンし、ICカードリーダおよびSIMカードが正しく認識されていることを確認します。

      pcsc_scan -c
      ...
      Reader 0: SCR3310 Smart Card Reader [CCID Interface] (53312020213465) 00 00
        Event number: 0
        Card state: Card inserted,
        ATR: 3B 9F 96 80 1F C7 80 31 E0 73 FE 21 1B 64 41 68 11 00 82 90 00 F9
      

PC側環境構築

  1. 必要なライブラリをインストールします。
    sudo apt-get install build-essential libtool libtalloc-dev libsctp-dev shtool autoconf automake git-core pkg-config make gcc gnutls-dev python-minimal libusb-1.0.0-dev libmnl-dev
    
    • python-minimal は、環境によっては不要です。
  2. simtrace2-utils をインストールするために、リポジトリ追加します。
    sudo su
    OSMOCOM_REPO="https://downloads.osmocom.org/packages/osmocom:/latest/xUbuntu_22.04/"
    wget $OSMOCOM_REPO/Release.key
    sha256sum Release.key
    mv Release.key /etc/apt/trusted.gpg.d/osmocom-latest.asc
    echo "deb [signed-by=/etc/apt/trusted.gpg.d/osmocom-latest.asc] $OSMOCOM_REPO/ ./" > /etc/apt/sources.list.d/osmocom-latest.list
    apt-get update
    exit
    
  3. simtrace2-utils をインストールします。
    sudo apt-get install simtrace2-utils
    

    注釈

    • simtrace2-cardem-pcsc にて、ビルド済みバイナリを使用すると後述するWiresharkにてうまくキャプチャができないことがあります。その場合は、こちら 記載の Building from source を参照して simtrace2-utils を自環境でビルドしたファイルを使用してください。 参考に、インストール手順を示します。 以下の例でインストールした simtrace2-cardem-pcsc を実行には、 /usr/local/simtrace2/bin/simtrace2-cardem-pcsc ... とします。

      sudo apt install libusb-1.0-0-dev libosmocore-dev libpcsclite-dev
      git clone https://gitea.osmocom.org/sim-card/simtrace2.git
      cd simtrace2/host
      autoreconf -fi
      ./configure --prefix=/usr/local/simtrace2
      make
      sudo make install
      
  4. Wiresharkをインストールします。
    sudo apt-get install wireshark
    

トレース実施

  1. SIMtrace 2 ボードの接続状態を確認します。
    • SIMTrace 2ボードは、通常モードに設定します。

    • 以下のように dfu-util コマンドを実行し、 Found 以下が表示されない場合は、SIMtrace 2ボードとPCの接続や、仮想環境を使用の場合は、USBパススルー設定が適切かを確認ください。

    • 後ほど利用しますので、 出力結果の path="x-x" の部分をメモしておきます。以下の例では、 1-2 です。

    • Found 行が表示されない場合、 BOOTLOADER を押しながら、 RESET`を押し一度DFUモードに変更した後、もう一度 `RESET を押し通常モードに戻すことで、正常に Found 行が表示されるようになる場合があります。

      sudo dfu-util --list
      ...
      Found Runtime: [1d50:60e3] ver=0002, devnum=20, cfg=1, intf=1, path="1-2", alt=0, name="UNKNOWN", serial="..."
      
  2. ICカードリーダの接続状態を確認します。
    pcsc_scan -c
    ...
    Reader 0: SCR3310 Smart Card Reader [CCID Interface] (53312020213465) 00 00
      Event number: 0
      Card state: Card inserted,
      ATR: 3B 9F 96 80 1F C7 80 31 E0 73 FE 21 1B 64 41 68 11 00 82 90 00 F9
    
  3. SIMトレースを開始します。
    sudo simtrace2-cardem-pcsc --usb-vendor 1d50 --usb-product 60e3 --usb-config 1 --gsmtap-ip 127.0.0.1 --keep-running --usb-path 1-2
    
    • オプション設定について
      • --usb-path オプションには、 sudo dfu-util --list で確認した path=”x-x” の値を設定します。
      • --gsmtap-ip オプションで送信先を指定します。
      • --keep-running オプションにより処理が落ちにくくなります。
  4. WiresharkでIoTデバイスの通信モジュールとSIM間の通信をキャプチャします。
    • Wiresharkを起動します。
      • Wiresharkからコンソール出力されるため、 simtrace2-cardem-pcsc コマンドを実行したコンソールとは別のコンソールから起動することをお勧めします。

        sudo wireshark
        
    • キャプチャインタフェースとして Loopback: lo を選択します。
      • Loopback: lo が表示されない場合、 npcap のインストールを行ってください。
      ../_images/1709383173.png
    • 通信モジュールとSIM間の通信のキャプチャが可能になります。

    ../_images/1707057308.png