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 からコマンド実行してください。









 
とても参考になりました。ありがとうございます。
返信削除