WSL2でLinuxカーネルのSocketCAN機能を使って仮想CAN通信をできるようにします。
環境は前回と同じです。
Linuxカーネルをビルドできる環境が必要です。下記を参考にしてビルド環境を用意してください。
●方法
まず、SocketCAN機能、VCAN機能を有効にしたカスタムカーネルをビルドします。
カスタムカーネルができれば、あとはCAN通信のモジュールをロードし、仮想CANデバイスを作成すれば、CANデバイスが無くてもPC内でCAN通信ができるようになります。
●カスタムカーネルの設定手順
menuconfigを立ち上げます。
$ make menuconfig
手順1:Networking suportを有効にする
手順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 ファイルが格納されます。
手順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 からコマンド実行してください。