WSL2でLinuxカーネルのI2Cのテスト機能を使って仮想I2C通信をできるようにします。
環境はこれまでと同じです。
Linuxカーネルをビルドできる環境が必要です。下記を参考にしてビルド環境を用意してください。
●方法
まず、I2C機能、I2Cスタブ機能を有効にしたカスタムカーネルをビルドします。
カスタムカーネルができれば、あとはI2C通信のモジュールをロードし、仮想I2Cデバイスを作成すれば、I2Cデバイスが無くてもPC内でI2C通信ができるようになります。
●カスタムカーネルの設定手順
menuconfigを立ち上げます。
$ make menuconfig
手順1:Device Drivers に入ります
手順2:I2C Support へ入る
手順3:I2C Support の3項目を有効にする
I2C support を有効にすると、さらに項目が表示されるので、I2C device interface と I2C/SMBus Test Stub を有効にします。
そのほか2つがデフォルトで有効ですが、そのままにします。
手順4:設定を保存して終了する
ここまでできたら、忘れずに設定を保存して menuconfig を終了します。
また、Linuxカーネル名を変えておくとよいでしょう
手順5:カーネルをビルドし、I2C通信のLKMをインストールする
$ make
$ sudo make modules_install
→ /lib/modules の下に、カーネル名でディレクトリができます。
この下の kernel ディレクトリ以下にI2C通信に必要な*.ko ファイルが格納されます。
手順6:udevのルールにI2Cのアクセス権を設定する(必要な場合のみ)
※udevルールが無いと、I2Cデバイスのアクセス権が root:root になってしまいます。
まず、i2cグループを作り、ユーザーをi2cグループへ追加します。
$ sudo groupadd i2c $ sudo gpasswd -a %USER i2c
/etc/udev/rules.d に 以下の内容のファイルを 99-i2c.rule のファイル名で保存します。
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
手順8:I2C通信を有効にしたカーネルで起動できていることを確認する
$ uname -a Linux earth 5.4.72-microsoft-standard-WSL2-i2c #1 SMP Wed Apr 10 23:11:51 JST 2021 x86_64 x86_64 x86_64 GNU/Linux
ここまでが、I2C通信を有効にしたカスタムカーネルの作り方でした。
手順9:udevを起動する(必要な場合のみ)
※udevルールが無いと、I2Cデバイスのアクセス権が root:root になってしまいます。
$ /etc/init.d/udev start
ここまでが、I2C通信を有効にしたカスタムカーネルの作り方でした。
I2C Tools も使えます。
SMBus stub driver となっているのが、仮想I2Cデバイスです。
0 件のコメント:
コメントを投稿