CAN通信をラズパイのWiresharkでモニタする方法です
アピールポイント
- DockerのWiresharkコンテナを利用
- Wiresharkコンテナを日本語表示で起動
- CANのデータをISO-TP、UDSで解析
使用機器
- Raspberry PI 4
- RS485 CAN HAT
手順
1. ラズパイにCANインタフェースボードを追加してCAN通信できるようにする
以下のページを参考にラズパイでCAN通信できるようにする
以下を実行し、can0インタフェースが有効な状態にしておく
$ sudo ip link set can0 up type can bitrate 500000
2. ラズパイにDockerをインストール
Docker公式の Install using the convenience scriptのぺージで紹介されている以下コマンドでDockerをインストール
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
また、sudoなしでDockerコマンド実行できるようにするため、以下ページを参考にしてDockerグループにユーザを追加
3. Wiresharkコンテナ起動
Docker Hubから linuxserver/wireshark のコンテナイメージをpull
docker pull lscr.io/linuxserver/wireshark
Wiresharkコンテナを日本語表示で起動
- 日本語表示のために
LC_ALL
,DOCKER_MODS
,INSTALL_PACKAGES
を設定
docker run -d \
--name=wireshark \
--net=host \
--cap-add=NET_ADMIN \
--security-opt seccomp=unconfined \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Tokyo \
-p 3000:3000 \
-p 3001:3001 \
-v /path/to/wireshark/config:/config \
--restart unless-stopped \
-e LC_ALL=ja_JP.UTF-8 \
-e DOCKER_MODS=linuxserver/mods:universal-package-install \
-e INSTALL_PACKAGES=font-noto-cjk \
lscr.io/linuxserver/wireshark:latest
4. CAN通信をWiresharkでモニタ
ブラウザで http://{ラズパイのアドレス}:3000
にアクセスすると、Wiresharkの画面が表示される
- Wireshark画面が表示可能となるまでに、コンテナ起動後 数分かかる場合がある
5. CANデータをISO-TP、UDSで解析
- ISO-TP: OSI参照モデルのネットワーク層、トランスポート層のプロトコルで、フレーム分割の制御などを行う。ISO 15765-2で定められている。
- UDS: OSI参照モデルではアプリケーション層のプロトコル。診断通信プロトコル。ISO 14229-1で定められている。
Wiresharkの「分析」-「・・・としてデコード」で、以下の画面のように設定する
UDSで解析するようにしておけば、OBD-Ⅱデータも自動解析される
- 以下の画面例ではサポートPIDが表示されている
複数フレームに分割されているデータも一つにまとめて、UDSデータとして表示される
- 以下の画面例では3フレームのデータをまとめて、UDSのSecurity AccessのSeedが表示されている
6. DockerのWiresharkコンテナを停止する
docker stop wireshark
docker rm wireshark
以上です。