3
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?

More than 3 years have passed since last update.

"PS5のDualSense用Linuxドライバー"をコンパイルしてみる

Last updated at Posted at 2020-12-26

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

image.png

image.png

image.png

ここで、下記のように有効にしないとダメでしょうね。

<M> PlayStation HID Driver
[*]   PlayStation force feedback support

image.png

コンパイルしてみたけど、エラーがでる

おやまあ、せっかくコンパイルしたけど、エラーが出る。

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なりで有効にしてね!
  • パッチにはバグがあるから、手動でなおしてね!
3
0
0

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
3
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?