kopia lustrzana https://gitlab.com/Teuniz/DSRemote
Add the usbtmc driver patch.
rodzic
9f02bb18bd
commit
5fa2303dc1
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
obj-m += usbtmc.o
|
||||||
|
|
||||||
|
all:
|
||||||
|
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
|
||||||
|
|
||||||
|
clean:
|
||||||
|
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
|
||||||
|
usbtmc driver patch
|
||||||
|
===================
|
||||||
|
|
||||||
|
It seems that Rigol oscilloscopes send big data (like screenshots) in an unusual way
|
||||||
|
that corrupts the data at the receiving end. The driver has been patched to deal with
|
||||||
|
this behaviour but only when the id of the device is found in a hardcoded list.
|
||||||
|
|
||||||
|
"These patches implement a modification of the USBTMC protocol to allow operation with Rigol equipment.
|
||||||
|
The usbtmc_read function is modified so if the quirk is active, the TMC header is sent with the size
|
||||||
|
of the data as the whole size of the request. If the quirk is inactive, the TMC request is sent once
|
||||||
|
per bulk transfer and with size limited to the bulk transfer size. In the case of the quirk, only the
|
||||||
|
first response contains the TMC header and the others are just data."
|
||||||
|
|
||||||
|
https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/log/drivers/usb/class/usbtmc.c
|
||||||
|
|
||||||
|
Unfortunately, the latest line of oscilloscopes of Rigol (with product id 0x04b0) has not been
|
||||||
|
added to the list into this driver.
|
||||||
|
|
||||||
|
In order to do this, we have to make a small modification to the driver sourcecode and
|
||||||
|
compile it.
|
||||||
|
|
||||||
|
|
||||||
|
Compiling:
|
||||||
|
----------
|
||||||
|
|
||||||
|
Install: kernel-desktop-devel kernel-source
|
||||||
|
|
||||||
|
In the following commands, replace the part "linux-3.16.7-21" with your actual kernel version.
|
||||||
|
The easiest way to get this version is to use the command uname -r.
|
||||||
|
|
||||||
|
cp /usr/src/linux-3.16.7-21/include/uapi/linux/usb/tmc.h .
|
||||||
|
|
||||||
|
cp /usr/src/linux-3.16.7-21/drivers/usb/class/usbtmc.c .
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Somewhere around line 110 of the file usbtmc.c you will find the following code:
|
||||||
|
|
||||||
|
static const struct usbtmc_ID_rigol_quirk usbtmc_id_quirk[] = {
|
||||||
|
{ 0x1ab1, 0x0588 },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Change it into:
|
||||||
|
|
||||||
|
static const struct usbtmc_ID_rigol_quirk usbtmc_id_quirk[] = {
|
||||||
|
{ 0x1ab1, 0x0588 },
|
||||||
|
{ 0x1ab1, 0x04b0 },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Now compile it:
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
Unload the old driver using the command:
|
||||||
|
|
||||||
|
sudo rmmod usbtmc
|
||||||
|
|
||||||
|
Load the new driver using the command:
|
||||||
|
|
||||||
|
sudo insmod usbtmc.ko
|
||||||
|
|
||||||
|
Now test the driver.
|
||||||
|
|
||||||
|
When everything is ok, you can replace the old kernel module with the new one:
|
||||||
|
|
||||||
|
sudo mv /lib/modules/3.16.7-21-desktop/kernel/drivers/usb/class/usbtmc.ko \
|
||||||
|
/lib/modules/3.16.7-21-desktop/kernel/drivers/usb/class/usbtmc.ko.backup
|
||||||
|
|
||||||
|
sudo cp ./usbtmc.ko /lib/modules/3.16.7-21-desktop/kernel/drivers/usb/class/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
The whole procedure must be repeated after a kernel update.
|
||||||
|
|
Ładowanie…
Reference in New Issue