TL;DR PS5コントローラ用のデバイスドライバのモジュール作れました。
- ドライバはデフォルトで[ ] (オフ)なので、make menuconfigなりで有効にしてね!
- パッチにはバグがあるから、手動でなおしてね!
はじめに
GIGAZINEさんで、面白そうな記事が出ていた。
PS5のDualSense用Linuxドライバーをソニーが公式に提供
手元のUbuntu 20.10で記事作成時点の最新版であるLinux 5.10.2に上記のパッチをすべて適用し、「bindeb-pkg」コマンドを実行してカーネルをビルドしてみたところ、ビルドには成功するものの「hid-playstation」のカーネルモジュールが作成されず、ドライバーを利用することができませんでした。
ほほお!!よし検証してみよう。ただし、PS5は持っていないので、コンパイルできるかな、の確認。
Kernelは、同じ 5.10.2 、作業環境もubuntu 20.10で!
Kernelをダウンロード。
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.2.tar.xz
$ tar xxvf linux*.tar.xz
$ cd linux*
$ mkdir build
$ cp /boot/config-`uname -r` build/.config
などなど。このあたりは https://gihyo.jp/admin/serial/01/ubuntu-recipe/0526?page=2 を参考にしましょうね。
パッチを当てる
ここから、1つずつパッチ(diff)をダウンロードして、丹精込めて当てましょう……
kernelの設定を有効にする
デフォルトだとOFFなので、これを有効にしましょうね。
> Device Drivers > HID support > Special HID drivers
ここで、下記のように有効にしないとダメでしょうね。
<M> PlayStation HID Driver
[*] PlayStation force feedback support
コンパイルしてみたけど、エラーがでる
おやまあ、せっかくコンパイルしたけど、エラーが出る。
make[1]: ディレクトリ '/home/kmtr/linux/build' に入ります
SYNC include/config/auto.conf.cmd
GEN Makefile
GEN Makefile
DESCEND objtool
CALL /home/kmtr/linux/linux-5.10.2/scripts/atomic/check-atomics.sh
CALL /home/kmtr/linux/linux-5.10.2/scripts/checksyscalls.sh
CHK include/generated/compile.h
CHK kernel/kheaders_data.tar.xz
GEN kernel/kheaders_data.tar.xz
CC [M] kernel/kheaders.o
CC [M] drivers/leds/led-class-multicolor.o
CC [M] drivers/hid/hid-core.o
CC [M] drivers/hid/hid-input.o
CC [M] drivers/hid/hid-quirks.o
/home/kmtr/linux/linux-5.10.2/drivers/hid/hid-quirks.c:567:3: error: expected expression before ‘{’ token
567 | + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
| ^
make[3]: *** [/home/kmtr/linux/linux-5.10.2/scripts/Makefile.build:279: drivers/hid/hid-quirks.o] エラー 1
make[3]: *** 未完了のジョブを待っています....
make[2]: *** [/home/kmtr/linux/linux-5.10.2/scripts/Makefile.build:496: drivers/hid] エラー 2
make[2]: *** 未完了のジョブを待っています....
make[1]: *** [/home/kmtr/linux/linux-5.10.2/Makefile:1805: drivers] エラー 2
make[1]: *** 未完了のジョブを待っています....
make[1]: ディレクトリ '/home/kmtr/linux/build' から出ます
パッチがバグっているっぽい気がする。
うーん、ここ間違ってるんじゃないかな?”+”が邪魔。
07-13-HID-playstation-add-DualSense-Bluetooth-support..diff
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index 1ca46cb445be..541c8837debd 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -567,6 +567,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
#endif
#if IS_ENABLED(CONFIG_HID_PLAYSTATION)
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
++ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
#endif
#if IS_ENABLED(CONFIG_HID_PRIMAX)
{ HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
これだと、
#if IS_ENABLED(CONFIG_HID_PLAYSTATION)
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
#endif
になって、コンパイルエラーになる。なので、パッチを当てた後に"+"を削る必要がある。
#if IS_ENABLED(CONFIG_HID_PLAYSTATION)
{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
#endif
これでもう一度makeしたら、無事にhid-playstation.o ができましたね!
CC [M] drivers/hid/hid-samsung.o
CC [M] drivers/hid/hid-sjoy.o
CC [M] drivers/hid/hid-sony.o
CC [M] drivers/hid/hid-speedlink.o
CC [M] drivers/hid/hid-steam.o
<略>
CC [M] drivers/hid/usbhid/usbmouse.o
CC [M] drivers/hid/hid-playstation.o
LD [M] drivers/hid/hid.o
LD [M] drivers/hid/hid-logitech.o
LD [M] drivers/hid/hid-picolcd.o
結果発表
必要な、koはできておりますなー!ただし、動作確認は物がないのでできませーん!!
kmtr@ubuntu2010:~/linux/build$ find . -name "*.ko" | grep play
./drivers/usb/misc/appledisplay.ko
./drivers/usb/typec/altmodes/typec_displayport.ko
./drivers/media/rc/keymaps/rc-wetek-play2.ko
./drivers/hid/hid-playstation.ko
まとめ: PS5コントローラ用のデバイスドライバのモジュール作れました。
- ドライバはデフォルトで[ ] (オフ)なので、make menuconfigなりで有効にしてね!
- パッチにはバグがあるから、手動でなおしてね!



