Difference between revisions of "Enabling force feedback in kernel"

From VDrift
Jump to: navigation, search
(New page: Here is how I enable force feedback on my Ubuntu 8.10 64 bits kernel: First create a patch file named G25.patch for the kernel ( Tested on 2.6.27 ) : diff -Naur linux-source-2.6.27/driver...)
 
m (Update categories)
 
(18 intermediate revisions by 5 users not shown)
Line 1: Line 1:
Here is how I enable force feedback on my Ubuntu 8.10 64 bits kernel:
+
Here is how to enable force feedback on Ubuntu 8.10 64 bits kernels (should also work on 32 bits ones):
First create a patch file named G25.patch for the kernel ( Tested on 2.6.27 ) :
+
 
 +
==For the G25 owners==
 +
If you use a G25 wheel, you need to patch your kernel to be able to use it in its native mode
 +
First create a patch file named G25.patch for the kernel ( patches for 2.6.27 and 2.6.28 are provided ).
 +
 
 +
===kernel 2.6.27===
 
  diff -Naur linux-source-2.6.27/drivers/hid/usbhid/hid-ff.c linux-source-2.6.27.orig/drivers/hid/usbhid/hid-ff.c
 
  diff -Naur linux-source-2.6.27/drivers/hid/usbhid/hid-ff.c linux-source-2.6.27.orig/drivers/hid/usbhid/hid-ff.c
 
  --- linux-source-2.6.27/drivers/hid/usbhid/hid-ff.c    2008-10-10 00:13:53.000000000 +0200                     
 
  --- linux-source-2.6.27/drivers/hid/usbhid/hid-ff.c    2008-10-10 00:13:53.000000000 +0200                     
Line 22: Line 27:
 
         { 0x046d, 0xca03, ff_joystick },
 
         { 0x046d, 0xca03, ff_joystick },
 
   };
 
   };
 
 
  diff -Naur linux-source-2.6.27/drivers/hid/usbhid/hid-quirks.c linux-source-2.6.27.orig/drivers/hid/usbhid/hid-quirks.c
 
  diff -Naur linux-source-2.6.27/drivers/hid/usbhid/hid-quirks.c linux-source-2.6.27.orig/drivers/hid/usbhid/hid-quirks.c
 
  --- linux-source-2.6.27/drivers/hid/usbhid/hid-quirks.c        2009-03-13 18:54:14.000000000 +0100
 
  --- linux-source-2.6.27/drivers/hid/usbhid/hid-quirks.c        2009-03-13 18:54:14.000000000 +0100
Line 43: Line 47:
 
         { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
 
         { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
  
make sure U have everything needed to compile your kernel :
+
===kernel 2.6.28===
  sudo apt-get install fakeroot build-essential makedumpfile libncurses5 libncurses5-dev
+
diff -Naur linux-source-2.6.28/drivers/hid/hid-core.c linux-source-2.6.28.patched/drivers/hid/hid-core.c
 +
--- linux-source-2.6.28/drivers/hid/hid-core.c  2009-04-08 06:38:33.000000000 +0200
 +
+++ linux-source-2.6.28.patched/drivers/hid/hid-core.c  2009-04-10 14:15:27.000000000 +0200
 +
@@ -1290,6 +1290,7 @@
 +
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) },
 +
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
 +
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
 +
+      { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
 +
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
 +
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
 +
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
 +
diff -Naur linux-source-2.6.28/drivers/hid/hid-ids.h linux-source-2.6.28.patched/drivers/hid/hid-ids.h
 +
--- linux-source-2.6.28/drivers/hid/hid-ids.h  2008-12-25 00:26:37.000000000 +0100
 +
+++ linux-source-2.6.28.patched/drivers/hid/hid-ids.h  2009-04-10 14:12:44.000000000 +0200
 +
@@ -291,6 +291,7 @@
 +
  #define USB_DEVICE_ID_LOGITECH_FORCE3D_PRO    0xc286
 +
  #define USB_DEVICE_ID_LOGITECH_WHEEL  0xc294
 +
  #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL      0xc295
 +
+#define USB_DEVICE_ID_LOGITECH_G25_WHEEL      0xc299
 +
  #define USB_DEVICE_ID_LOGITECH_ELITE_KBD      0xc30a
 +
  #define USB_DEVICE_ID_LOGITECH_KBD    0xc311
 +
  #define USB_DEVICE_ID_S510_RECEIVER    0xc50c
 +
diff -Naur linux-source-2.6.28/drivers/hid/hid-lg.c linux-source-2.6.28.patched/drivers/hid/hid-lg.c
 +
--- linux-source-2.6.28/drivers/hid/hid-lg.c    2008-12-25 00:26:37.000000000 +0100
 +
+++ linux-source-2.6.28.patched/drivers/hid/hid-lg.c    2009-04-10 14:14:17.000000000 +0200
 +
@@ -304,6 +304,8 @@
 +
                .driver_data = LG_FF },
 +
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2),
 +
                .driver_data = LG_FF },
 +
+      { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL),
 +
+              .driver_data = LG_FF },
 +
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2),
 +
                .driver_data = LG_FF2 },
 +
        { }
 +
 
 +
==Enabling force feedback in the kernel==
 +
===Prepare to compile a kernel===
 +
Make sure you have everything needed to compile your kernel :
 +
  sudo apt-get install fakeroot build-essential makedumpfile libncurses5 libncurses5-dev kernel-package
 
  sudo apt-get build-dep linux
 
  sudo apt-get build-dep linux
 
Get the kernel source code :
 
Get the kernel source code :
Line 53: Line 95:
 
  cd ~/src
 
  cd ~/src
 
  tar xjvf /usr/src/linux-source-<version>.tar.bz2
 
  tar xjvf /usr/src/linux-source-<version>.tar.bz2
  cd linux-source-<version>[/code]
+
  cd linux-source-<version>
copy the G25.patch file into the source directory and
+
 
  patch -p1 <G25.patch
+
===Apply the G25 patch if needed===
the output should be something like that:
+
Copy the G25.patch file into the source directory ( ~/src ) and
 +
  patch -p1 <../G25.patch
 +
The output should be something like that:
 
  patching file drivers/hid/usbhid/hid-ff.c
 
  patching file drivers/hid/usbhid/hid-ff.c
 
  patching file drivers/hid/usbhid/hid-lgff.c
 
  patching file drivers/hid/usbhid/hid-lgff.c
 
  patching file drivers/hid/usbhid/hid-quirks.c
 
  patching file drivers/hid/usbhid/hid-quirks.c
get the running kernel configuration:
+
 
 +
===Configure the new kernel===
 +
Get the running kernel configuration:
 
  cp -vi /boot/config-`uname -r` .config
 
  cp -vi /boot/config-`uname -r` .config
 
Adjust the kernel configuration:
 
Adjust the kernel configuration:
 
  make oldconfig
 
  make oldconfig
 
  make menuconfig
 
  make menuconfig
go to Device Drivers  , and HID Devices  
+
Go to Device Drivers  , and HID Devices  
 
and enable the following options
 
and enable the following options
 
  Force feedback support (EXPERIMENTAL)
 
  Force feedback support (EXPERIMENTAL)
Line 74: Line 120:
 
   ThrustMaster devices support
 
   ThrustMaster devices support
 
   Zeroplus based game controller support
 
   Zeroplus based game controller support
I have to disable paravirtualized guest support otherwise the kernel cleaning fail:
+
With the 2.6.27 kernel on Ubuntu 8.10, I have to disable paravirtualized guest support otherwise the kernel cleaning fail.
go to Processor type and features and disable the following:
+
This is not needed on 2.6.28 on Ubuntu 9.04 beta (2.6.28.11)
 +
Go to Processor type and features and disable the following:
 
  Paravirtualized guest support
 
  Paravirtualized guest support
Compile and package the new kernel:
+
 
 +
===Compile and package the new kernel===
 
  make-kpkg clean
 
  make-kpkg clean
 
  fakeroot make-kpkg --initrd --append-to-version=-ff kernel-image kernel-headers
 
  fakeroot make-kpkg --initrd --append-to-version=-ff kernel-image kernel-headers
you now have 2 new package files in ~/src.
+
You now have 2 new package files in ~/src.
install those packages :
+
 
  cbo@cbobox:~/src$ sudo dpkg -i linux-image-2.6.27.18-ff_2.6.27.18-ff-10.00.Custom_amd64.deb linux-headers-2.6.27.18-ff_2.6.27.18-ff-10.00.Custom_amd64.deb
+
===Install the new kernel===
 +
  sudo dpkg -i linux-image-2.6.27.18-ff_2.6.27.18-ff-10.00.Custom_amd64.deb linux-headers-2.6.27.18-ff_2.6.27.18-ff-10.00.Custom_amd64.deb
 +
 
 +
[[Category:Configuration]]

Latest revision as of 03:04, 1 September 2012

Here is how to enable force feedback on Ubuntu 8.10 64 bits kernels (should also work on 32 bits ones):

For the G25 owners

If you use a G25 wheel, you need to patch your kernel to be able to use it in its native mode First create a patch file named G25.patch for the kernel ( patches for 2.6.27 and 2.6.28 are provided ).

kernel 2.6.27

diff -Naur linux-source-2.6.27/drivers/hid/usbhid/hid-ff.c linux-source-2.6.27.orig/drivers/hid/usbhid/hid-ff.c
--- linux-source-2.6.27/drivers/hid/usbhid/hid-ff.c    2008-10-10 00:13:53.000000000 +0200                     
+++ linux-source-2.6.27.orig/drivers/hid/usbhid/hid-ff.c       2009-02-23 22:21:27.000000000 +0100             
@@ -57,6 +57,7 @@                                                                                              
       { 0x46d, 0xc286, hid_lgff_init }, /* Logitech Force 3D Pro Joystick */                                  
       { 0x46d, 0xc294, hid_lgff_init }, /* Logitech Formula Force EX */                                       
       { 0x46d, 0xc295, hid_lgff_init }, /* Logitech MOMO force wheel */
+      { 0x46d, 0xc299, hid_lgff_init }, /* Logitech G25 wheel */
       { 0x46d, 0xca03, hid_lgff_init }, /* Logitech MOMO force wheel */
 #endif
 #ifdef CONFIG_LOGIRUMBLEPAD2_FF
diff -Naur linux-source-2.6.27/drivers/hid/usbhid/hid-lgff.c linux-source-2.6.27.orig/drivers/hid/usbhid/hid-lgff.c
--- linux-source-2.6.27/drivers/hid/usbhid/hid-lgff.c  2008-10-10 00:13:53.000000000 +0200
+++ linux-source-2.6.27.orig/drivers/hid/usbhid/hid-lgff.c     2009-02-23 22:23:22.000000000 +0100
@@ -55,6 +55,7 @@
       { 0x046d, 0xc286, ff_joystick },
       { 0x046d, 0xc294, ff_joystick },
       { 0x046d, 0xc295, ff_joystick },
+      { 0x046d, 0xc299, ff_joystick },
       { 0x046d, 0xca03, ff_joystick },
 };
diff -Naur linux-source-2.6.27/drivers/hid/usbhid/hid-quirks.c linux-source-2.6.27.orig/drivers/hid/usbhid/hid-quirks.c
--- linux-source-2.6.27/drivers/hid/usbhid/hid-quirks.c        2009-03-13 18:54:14.000000000 +0100
+++ linux-source-2.6.27.orig/drivers/hid/usbhid/hid-quirks.c   2009-02-23 22:25:45.000000000 +0100
@@ -316,6 +316,7 @@
 #define USB_DEVICE_ID_LOGITECH_HARMONY_64 0xc14f
 #define USB_DEVICE_ID_LOGITECH_EXTREME_3D     0xc215
 #define USB_DEVICE_ID_LOGITECH_WHEEL  0xc294
+#define USB_DEVICE_ID_LOGITECH_WHEELG25       0xc299
 #define USB_DEVICE_ID_LOGITECH_ELITE_KBD      0xc30a
 #define USB_DEVICE_ID_LOGITECH_KBD    0xc311
 #define USB_DEVICE_ID_S510_RECEIVER   0xc50c
@@ -625,6 +626,7 @@
       { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
       { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D, HID_QUIRK_NOGET },
       { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL, HID_QUIRK_NOGET },
+      { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEELG25, HID_QUIRK_NOGET },
       { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0, HID_QUIRK_NOGET },
       { USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE, HID_QUIRK_NOGET },
       { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },

kernel 2.6.28

diff -Naur linux-source-2.6.28/drivers/hid/hid-core.c linux-source-2.6.28.patched/drivers/hid/hid-core.c
--- linux-source-2.6.28/drivers/hid/hid-core.c  2009-04-08 06:38:33.000000000 +0200
+++ linux-source-2.6.28.patched/drivers/hid/hid-core.c  2009-04-10 14:15:27.000000000 +0200
@@ -1290,6 +1290,7 @@
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
diff -Naur linux-source-2.6.28/drivers/hid/hid-ids.h linux-source-2.6.28.patched/drivers/hid/hid-ids.h
--- linux-source-2.6.28/drivers/hid/hid-ids.h   2008-12-25 00:26:37.000000000 +0100
+++ linux-source-2.6.28.patched/drivers/hid/hid-ids.h   2009-04-10 14:12:44.000000000 +0200
@@ -291,6 +291,7 @@
 #define USB_DEVICE_ID_LOGITECH_FORCE3D_PRO     0xc286
 #define USB_DEVICE_ID_LOGITECH_WHEEL   0xc294
 #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL      0xc295
+#define USB_DEVICE_ID_LOGITECH_G25_WHEEL       0xc299
 #define USB_DEVICE_ID_LOGITECH_ELITE_KBD       0xc30a
 #define USB_DEVICE_ID_LOGITECH_KBD     0xc311
 #define USB_DEVICE_ID_S510_RECEIVER    0xc50c
diff -Naur linux-source-2.6.28/drivers/hid/hid-lg.c linux-source-2.6.28.patched/drivers/hid/hid-lg.c
--- linux-source-2.6.28/drivers/hid/hid-lg.c    2008-12-25 00:26:37.000000000 +0100
+++ linux-source-2.6.28.patched/drivers/hid/hid-lg.c    2009-04-10 14:14:17.000000000 +0200
@@ -304,6 +304,8 @@
                .driver_data = LG_FF },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2),
                .driver_data = LG_FF },
+       { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL),
+               .driver_data = LG_FF },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2),
                .driver_data = LG_FF2 },
        { }

Enabling force feedback in the kernel

Prepare to compile a kernel

Make sure you have everything needed to compile your kernel :

sudo apt-get install fakeroot build-essential makedumpfile libncurses5 libncurses5-dev kernel-package
sudo apt-get build-dep linux

Get the kernel source code :

sudo apt-get install linux-source

Now we are ready to start : Prepare your environment:

mkdir ~/src
cd ~/src
tar xjvf /usr/src/linux-source-<version>.tar.bz2
cd linux-source-<version>

Apply the G25 patch if needed

Copy the G25.patch file into the source directory ( ~/src ) and

patch -p1 <../G25.patch

The output should be something like that:

patching file drivers/hid/usbhid/hid-ff.c
patching file drivers/hid/usbhid/hid-lgff.c
patching file drivers/hid/usbhid/hid-quirks.c

Configure the new kernel

Get the running kernel configuration:

cp -vi /boot/config-`uname -r` .config

Adjust the kernel configuration:

make oldconfig
make menuconfig

Go to Device Drivers , and HID Devices and enable the following options

Force feedback support (EXPERIMENTAL)
  PID device support
  Logitech devices support
  Logitech Rumblepad 2 support
  PantherLord/GreenAsia based device support
  ThrustMaster devices support
  Zeroplus based game controller support

With the 2.6.27 kernel on Ubuntu 8.10, I have to disable paravirtualized guest support otherwise the kernel cleaning fail. This is not needed on 2.6.28 on Ubuntu 9.04 beta (2.6.28.11) Go to Processor type and features and disable the following:

Paravirtualized guest support

Compile and package the new kernel

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-ff kernel-image kernel-headers

You now have 2 new package files in ~/src.

Install the new kernel

sudo dpkg -i linux-image-2.6.27.18-ff_2.6.27.18-ff-10.00.Custom_amd64.deb linux-headers-2.6.27.18-ff_2.6.27.18-ff-10.00.Custom_amd64.deb