開発効率を上げるために¶
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で何れのモードでも認識できるよう設定する必要があります。
ファームウェアの更新¶
- PCにファームウェア更新に必要なツールをインストールします。
sudo apt-get install dfu-util
- 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="..."
- 必要なファームウェアをダウンロードします。
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 を使用します。
- ダウンロードしたファイルでファームウェアを更新します。
sudo dfu-util --device 1d50:60e3 --cfg 1 --alt 1 --reset --download simtrace-cardem-dfu-latest.bin
ファームウェア更新後に再起動され、通常モードで起動されます。
ICカードリーダのセットアップ¶
- PC/SCサービスのインストールと起動
次のコマンドでPC/SCサービスをインストールします。これにより、PC/SCリーダーと通信するための必要なサービスとライブラリがインストールされます。
sudo apt-get install pcscd libpcsclite1 libccid
pcscd を起動し、起動状態を確認します。
sudo systemctl start pcscd systemctl status pcscd
- 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側環境構築¶
- 必要なライブラリをインストールします。
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 は、環境によっては不要です。
- 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
- 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
- Wiresharkをインストールします。
sudo apt-get install wireshark
トレース実施¶
- 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="..."
- 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
- 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 オプションにより処理が落ちにくくなります。
- WiresharkでIoTデバイスの通信モジュールとSIM間の通信をキャプチャします。
- Wiresharkを起動します。
Wiresharkからコンソール出力されるため、 simtrace2-cardem-pcsc コマンドを実行したコンソールとは別のコンソールから起動することをお勧めします。
sudo wireshark
- キャプチャインタフェースとして Loopback: lo を選択します。
- Loopback: lo が表示されない場合、 npcap のインストールを行ってください。
通信モジュールとSIM間の通信のキャプチャが可能になります。