2007-02-11 22:37:31 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title > fhem.pl - Hints for GNU/Linux< / title >
< / head >
< body style = "background-color: white;" >
< h2 > fhem.pl - Hints for GNU/Linux< / h2 >
2007-12-23 19:06:07 +00:00
< table border = 1 > < tr > < td >
Note: Depending on the GNU/Linux distribution (Debian, openSuSE, etc.) and version of the Linux kernel you may or < i > may not< / i > have to do the following steps.< br >
It is worth giving it a try without any modifications < b > first< / b > .< br >
2008-06-01 22:42:47 +00:00
We have convinced the kernel developers to enable all (currently known) ELV devices by default. Starting with kernel 2.6.24.2 (e.g. openSUSE 11) the changes below are < b > not< / b > required. You can check your running kernel version using the command:
2008-02-16 21:23:34 +00:00
< code > < br > uname -r< br > < / code >
2007-12-23 19:06:07 +00:00
< / td > < / tr > < / table >
< hr >
2007-02-11 22:37:31 +00:00
< p > < b > < a name = "onedevice" > One device< / a > < / b > < br >
If you connect one USB device (FHZ1000PC, FHZ1300PC, EM1010PC, WS300, ...)
to your GNU/Linux server you can use the regular < i > ftdi_sio< / i > kernel module.
However, it may not recognize our device. Therefore you need to get the
< i > vendor< / i > and < i > product< / i > codes:
< code > < br >
# lsusb< br >
...< br >
Bus 002 Device 002: ID < b > 0403< / b > :< b > e0e8< / b > Future Technology Devices International, Ltd < br >
...< br >
< / code > < br >
Now you need to edit your < code > /etc/modprobe.conf< / code > or
< code > /etc/modprobe.conf.local< / code > file (depending on your distribution).
Add the following line to it:< br >
< code > < br >
options ftdi_sio vendor=0x< b > 0403< / b > product=0x< b > e0e8< / b > < br >
< / code > < br >
Replace the vendor and product code with the output of the < i > lsusb< / i > command.
The you load the module using:< br >
< code > < br >
# modprobe ftdi_sio< br >
< / code > < br >
2007-12-23 19:06:07 +00:00
< hr >
2007-02-11 22:37:31 +00:00
< p > < b > < a name = "multipledevices" > Multiple devices< / a > < / b > < br >
If you're using multiple USB devices (FHZ1000PC, FHZ1300PC, EM1010PC, WS300, ...)
2007-12-26 11:45:25 +00:00
you cannot use the method above. You need to modify the ftdi_sio kernel module
2007-02-11 22:37:31 +00:00
to make it work. The following example was done with openSuSE 10.1:< br >
You need to have the kernel-source-< i > version< / i > RPM of your
current kernel (see output of < code > uname -r< / code > ) installed.< br >
< code > < br >
# cd /usr/src/linux< br >
# make cloneconfig< br >
# make modules_prepare< br >
# cp /boot/symvers-2.6.*-default.gz /usr/src/linux< br >
# mv symvers-2.6.*-default.gz Module.symvers.gz< br >
# gunzip /usr/src/linux/Module.symvers.gz< br >
# make modules_prepare< br >
# cd drivers/usb/serial< br >
< / code >
For the EM1010PC you (may) need to add the following line:
< code > < br >
# vi ftdi_sio.h< br >
...< br >
#define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */< br >
< b > #define FTDI_ELV_EM1010PC_PID 0xE0EF /* EM 1010 PC */< / b > < br >
< / code > < br >
Now we need to uncomment some lines to enable all of our devices.
< code > < br >
# vi ftdi_sio.c< br >
...< br >
{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, < br >
{ USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) },< br >
{ USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) }, < br >
{ USB_DEVICE(FTDI_VID, FTDI_ELV_EM1010PC_PID) },< br >
...< br >
< / code > < br >
Remove the < b > /*< / b > and < b > */< / b > of your devices and save the file.
2007-02-24 17:34:59 +00:00
< br >
< code >
2007-02-11 22:37:31 +00:00
# cd /usr/src/linux< br >
2007-02-24 17:34:59 +00:00
< / code >
Now you have 3 choices:< br >
< table border = 1 >
< tr > < td >
< code >
# mv Module.symvers Module.symvers.notneeded< br >
2007-02-23 09:22:17 +00:00
# make M=drivers/usb/serial< / code >
2007-02-24 17:34:59 +00:00
< td >
... to build the modules for all of < i > usb serial< / i > .< br >
2007-12-26 11:45:25 +00:00
If you have a less powerful machine like the ARM-Based NSLU2 then it is sufficient to only build the required module.
2007-02-24 17:34:59 +00:00
< / td > < / tr >
< td > < code >
# make modules< / code >
< / td > < td >
... to build all modules (takes a long time).
< / td > < / tr >
< tr > < td >
< code >
# make driver/usb/serial/ftdi_sio.ko
< / code >
< / td > < td >
... to build just the < i > ftdi_sio.ko< / i > module. However, this does not seem to be working always.
< / td > < / tr >
< / table >
Once you have the module:< br >
2007-02-11 22:37:31 +00:00
< code > < br >
# cd /lib/modules/< i > yourKernelVerion< / i > /kernel/drivers/usb/serial< br >
# cp ftdi_sio.ko ftdi_sio.ko_backup< br >
# cp /usr/src/linux/drivers/usb/serial/ftdi_sio.ko .< br >
< / code > < br >
2007-12-26 11:45:25 +00:00
To activete it you may need to stop applications (like fhem) who
2007-02-11 22:37:31 +00:00
are using the /dev/ttyUSB device and unload the module and load it again.< br >
< code > < br >
# rmmod ftdi_so< br >
# modprobe ftdi_so< br >
< / code > < br >
You should now see multiple ttyUSB devices:
< code > < br >
# ls -l /dev/ttyUSB*< br >
crw-rw---- 1 root uucp 188, 0 2007-02-11 23:00 /dev/ttyUSB0< br >
crw-rw---- 1 root uucp 188, 1 2007-02-11 23:00 /dev/ttyUSB1< br >
< / code > < br >
2007-12-23 19:06:07 +00:00
< hr >
2007-02-11 22:37:31 +00:00
< p > < b > < a name = "devicelinks" > Device links< / a > < / b > < br >
If you're using multiple USB devices (FHZ, EM, WS...) it might occur that the
enumeration of the /dev/ttyUSB< i > n< / i > numbers get mixed up if one of the
device is missing or after a reboot.< br >
Starting with kernel 2.6 the UDEV implements means for using virtual names
instead of the bare numbers.< br >
2007-04-14 12:26:17 +00:00
Edit the file < code > /etc/udev/rules.d/10-udev.rules< / code > (create if necessary)
and insert the following lines:
2007-02-11 22:37:31 +00:00
< br >
2007-04-14 12:26:17 +00:00
If you use udev prior to version 103:< br >
2007-02-11 22:37:31 +00:00
< code >
KERNEL=="ttyUSB*", SYSFS{product}=="ELV FHZ 1300 PC", SYMLINK+="elv_fhz1300pc"< br >
KERNEL=="ttyUSB*", SYSFS{product}=="ELV EM 1010 PC", SYMLINK+="elv_em1010pc"< br >
< / code > < br >
2007-04-14 12:26:17 +00:00
Starting with udev 103 the SYSFS will be replaced by ATTRS:
< br >
< code >
KERNEL=="ttyUSB*", ATTRS{product}=="ELV FHZ 1300 PC", SYMLINK+="elv_fhz1300pc"< br >
KERNEL=="ttyUSB*", ATTRS{product}=="ELV EM 1010 PC", SYMLINK+="elv_em1010pc"< br >
< / code > < br >
Now you need to reload (rmmod/modprobe) the ftdio_sio kernel module to
use the device paths < code > < b > /dev/elv_fhz1300pc< / b > < / code > or
2007-02-11 22:37:31 +00:00
< code > < b > /dev/elv_em1010pc< / b > < / code > in your FHEM configuration file.
< / body >
< / html >