2021/03/27

WSL2で仮想CAN通信

  WSL2でLinuxカーネルのSocketCAN機能を使って仮想CAN通信をできるようにします。

●今回の環境

 Windows10


 ディストリビューション

 カーネルバージョン

 環境は前回と同じです。

 Linuxカーネルをビルドできる環境が必要です。下記を参考にしてビルド環境を用意してください。

●方法

 まず、SocketCAN機能、VCAN機能を有効にしたカスタムカーネルをビルドします。
 カスタムカーネルができれば、あとはCAN通信のモジュールをロードし、仮想CANデバイスを作成すれば、CANデバイスが無くてもPC内でCAN通信ができるようになります。

●カスタムカーネルの設定手順

 menuconfigを立ち上げます。
$ make menuconfig

手順1:Networking suportを有効にする


 ※選択は、項目まで↑↓キーで移動して、スペースキーを押すとできます。

手順2:CAN bus subsystem support を有効にする

 Networking support 内へ入り(リターンで入る)、CAN bus subsystem support を有効にします。


手順3:CAN通信機能の3項目を有効にする

 CAN bus subsystem support 内へ入り、さらに下記の3項目を有効にする。


 デフォルトで既にこれらの項目が有効になっていると思いますが、念のために確認しておきます。

手順4:CAN Device Drivers 内の項目を有効にする

 CAN Device Driversの中へ入り、さらに以下の設定を行います。

 Virtual Local CAN Interface (vcan) が仮想CANドライバです。
 そのほか2つがデフォルトで有効ですが、そのままにします。

手順5:設定を保存して終了する

 ここまでできたら、忘れずに設定を保存して menuconfig を終了します。
 また、Linuxカーネル名を変えておくとよいでしょう。

手順6:カーネルをビルドし、CAN通信のLKMをインストールする

$ make
$ sudo make modules_install
 → /lib/modules の下に、カーネル名でディレクトリができます。
  この下の kernel ディレクトリ以下にCAN通信に必要な*.ko ファイルが格納されます。

手順7:カスタムカーネルでWSL2を起動する

 今作った vmlinux ファイルでWSL2を再起動します。
 やり方は、以下の手順6~を参考にしてください。

手順8:CAN通信を有効にしたカーネルで起動できていることを確認する

$ uname -a
Linux earth 5.4.72-microsoft-standard-WSL2-can #1 SMP Wed Mar 27 14:20:57 JST 2021 x86_64 x86_64 x86_64 GNU/Linux

 ここまでが、CAN通信を有効にしたカスタムカーネルの作り方でした。


●仮想CAN通信デバイスを作成する

以下のコマンドを実行します。
$ sudo modprobe can
$ sudo modprobe can_raw
$ sudo modprobe vcan
$ sudo ip link add dev vcan0 type vcan
$ sudo ip link set up vcan0
 → /sys/class/net の下に、vcan0 の名前で仮想CANデバイスができます。


あとは、ふつうに仮想CAN通信をすることができます。
can-utilsも普通に使えます。

※仮想CANデバイスは、PCを再起動すると消えてしまうので、また modprobe からコマンド実行してください。

  


1 件のコメント:

  1. とても参考になりました。ありがとうございます。

    返信削除