1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

wslのカーネルをカスタムビルドし、カメラ・ゲームパッドに対応する

Last updated at Posted at 2025-02-12

概要

2025/02/12現在、通常のWSLではwebカメラやゲームパッドを正常に認識できません。ロボット関連の開発ではこれらを使用したいことも多いので、使えないのはやや困りものです。この問題に対処するために、wslカーネルをカスタムビルドします。
ビルド済カーネルは私のgithubで公開しています

動作環境・バージョン

動作環境

windows11

バージョン

Windows11 24H2

WSL バージョン: 2.4.10.0
カーネル バージョン: 5.15.167.4-1

※windows11であってもバージョンが古い場合、wslの一部の機能が正常に動作しない可能性があります

使用機器

realsense D455f
logicool Gamepad F310

前提条件

wslを使用した経験があること

コンテンツ

wsl内での操作とwindows側での操作があります。これを誤ると重大な問題が発生する可能性があるので、注意して下さい。windows側での操作は管理者権限を付与したpowershellを使用して下さい。

カメラ対応

ビルドツールの準備

以下wsl内で実行

ビルドの依存関係のインストール

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool bc

ベースとなるカーネルのダウンロード

git clone --depth 1 -b linux-msft-wsl-5.15.y https://github.com/microsoft/WSL2-Linux-Kernel.git
cd WSL2-Linux-Kernel

configファイルの作成

configファイルの編集が億劫な人は私のgithubから編集済ファイルを取得することもできます。

cp /proc/config.gz config.gz
gunzip config.gz
mv config .config

configファイルの書き換え

sudo make menuconfig
ターミナル上でGUIを介してカーネルの編集を行えます
Selectで進むExitで戻る(必ずしもGUIが閉じらるわけではない)、Yでチェック、Nでチェック解除
「Kernel hacking > Compile-time checks and compiler options > General BTF typeinformation」のチェックをはずす
image.png (84.5 kB)
「Device Drivers > Multimedia support」にチェックを付ける
image.png (76.0 kB)
「Device Drivers > Multimedia support > Video4Linux options」内の3つすべてにチェックを付ける
image.png (48.8 kB)
「Device Drivers > Multimedia support > Media drivers > Media USB Adapters」にチェックを付ける
image.png (63.3 kB)
「Device Drivers > Multimedia support > Media drivers > Media USB Adapters > USB Video Class(UVC)」にチェックを付ける
image.png (91.8 kB)
SAVE->OK->EXITで保存しGUIが終了するまでEXIT

ゲームパッド対応

※このセクションではカーネルの設定ファイルを直接編集します。私の環境ではうまくいきましたが、この操作は公式には非推奨であり、失敗した場合重大な不具合が発生する可能性があります。自己責任で行ってください。

configファイルの編集が億劫な人は私のgithubから編集済ファイルを取得することもできます。

カメラ対応のconfigファイル作成までを実行して下さい
任意のsudo権限を付与したエディタで以下の編集を行ってください。私はnanoでやりました。
編集する項目は「Userland interfaces」の下にあります

  • 2011行目付近のCONFIG_INPUT_JOYDEV is not setCONFIG_INPUT_JOYDEV=yに変更
  • 2012行目付近のCONFIG_INPUT_EVDEV is not setCONFIG_INPUT_EVDEV=yに変更
  • CONFIG_INPUT_JOYSTICK is not setCONFIG_INPUT_JOYSTICK=yに変更
  • ↑の真下にCONFIG_JOYSTICK_ANALOG=yを新たな行として挿入
  • ↑の真下にCONFIG_JOYSTICK_XPAD=yを新たな行として挿入
  • ↑の真下にCONFIG_JOYSTICK_XPAD_FF=yを新たな行として挿入

ビルド・反映

ビルド

sudo make -j$(nproc) && sudo make modules_install -j$(nproc) && sudo make install -j$(nproc)
※ ゲームパッド対応を行っている場合、色々聞かれるので全てy

カーネルの読み込み

下記のwindows-user-nameは自身のものに置き換えてください(全部で3か所あります)
cp vmlinux /mnt/c/Users/<windows-user-name>/vmlinux
cat << 'EOT' > /mnt/c/Users/<windows-user-name>/.wslconfig
[wsl2]
kernel=C:\\Users\\<windows username>\\vmlinux
EOT

windows側のpowershellに切り替えてください
wsl --shutdown
念のため、PCを再起動してください

wslを起動し、wsl内のターミナルに切り替えてください
uname -aで表示されるカーネルバージョンの末尾がmicrosoft-standard-WSL2+になっており(+が重要)。#以降の最終ビルド日時がビルドを行った時間帯と整合すれば反映されています

接続の確認

usbipdのインストールがまだの人・使い方が分からない人はこちらを参照してください
使用したい機器をUSB接続しusbipdによってwslにアタッチしてください
※始めてゲームパッドを使用する際にはbindの際に--forceオプションが必要になることがあります(例: usbipd bind --force --busid 1-9

カメラの接続確認

wsl内のターミナルでls /devを実行してください
image.png (85.4 kB)
添付画像右側のようにvideo0~video5(何番まであるかはカメラによります)が表示されていれば成功

ゲームパッドの接続確認

wsl内のターミナルでls /dev/inputを実行してください
image.png (6.0 kB)
添付画像のようにevent0,1及びjs0が表示されていれば成功

実際の使用に際して

実際に使用する際は必要に応じて
sudo chmod 777 /dev/video*
sudo chmod 777 /dev/input/*
によって権限を設定してください

トラブルシューティング

WSLのデフォルトディストリビューションを確認し、想定と一致しているかチェック

  1. wsl -lで確認
  2. 想定と異なっていた場合wsl -s Ubuntu-<dist>で変更

WSLの再インストールが問題解決に有効なことがあります(WSL内のデータは保持されません)

  1. wsl -l -v でインストールされているディストリビューションを確認
  2. wsl --unregister
  3. (あれば)microsoftストアでインストールしたアプリをアンインストール
  4. PC再起動
  5. microsofストアから再インストール

終わりに

これらのデバイスが使用できればWSLにおけるロボット開発の幅が広がるでしょう。

参考文献

touch-sp様のブログ「パソコン関連もろもろ」より
WSLのgithub issueより
Microsoft Learn

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?