ROBOTIS e-Manual v1.13.01
Dynamixel SDK for Linux can be downloaded.
[System Requirements]
▶ OS : Over Linux Kernel 2.6.21 is recommended
▶ USB2Dynamixel is required
The structure of Dynamixel SDK for Linux is as follows.
/include : there are header files to use Dynamixel SDK
/src : there are Dynamixel SDK source files
/lib : there are complied library files
/example : there are examples to control Dynamixels
Most kernels included in the Linux released in recent years contain the FT232RL driver for the FTDI used by the USB2Dynamixel. Also, the default latency timer value is set as 1ms, so FTDI driver adjustments or installations for most will not be necessary. |
FTDI's FT232RL is used for USB2Dynamixel.
* Lenux Source Directory
(Receive the source directly or copy the same source as its own Kernel version through package manager.)
/usr/src/linux-2.6.28/
* Temporary directory (empty) to compile USB2Dynamixel Driver
/usr/src/ftdi_sio
The installation procedure of USB2Dynamixel Driver is as follows.
1. Copy the following files to /usr/src/ftdi_sio directory.
/usr/src/linux-2.6.28/drivers/usb/serial/ftdi_sio.h /usr/src/linux-2.6.28/drivers/usb/serial/ftdi_sio.c /usr/src/linux-2.6.28/drivers/usb/serial/usb-serial.h |
2. Modify the source codes of copied files to set the response speed to 1msec.
2-1. Modify ftdi_sio.c file in USB2Dynamixel Driver directory
- Modified File : /usr/src/ftdi_sio/ftdi_sio.c
Add "define" to the first part of @@ ftdi_sio.c file
#define FTDI_LATENCY_TIMER_DEFAULT 1 |
2-2. Modify Kernel's FTDI Driver
- Modified File : /usr/src/ftdi_sio/ftdi_sio.c
Find ftdi_sio_port_probe() function, and then add the highlighted part with bold letters
The first part of @@ ftdi_sio_port_probe() function
static int ftdi_sio_port_probe(struct usb_serial_port *port) { struct ftdi_private *priv; struct ftdi_sio_quirk *quirk = usb_get_serial_data(port->serial); struct usb_device *udev; int rv; char buf[1]; dbg("%s", __func__); udev = port->serial->dev; priv = kzalloc(sizeof(struct ftdi_private), GFP_KERNEL); if (!priv) { dev_err(&port->dev, "%s- kmalloc(%Zd) failed.\n", __func__, sizeof(struct ftdi_private)); return -ENOMEM; } |
Add the highlighted part with bold letters under create_sysfs_attrs(port) on the last part of @@ ftdi_sio_port_probe() function
usb_set_serial_port_data(port, priv); ftdi_determine_type(port); create_sysfs_attrs(port);
rv = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), FTDI_SIO_SET_LATENCY_TIMER_REQUEST, FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE, FTDI_LATENCY_TIMER_DEFAULT, priv->interface, buf, 0, WDR_TIMEOUT);
if (rv < 0) { dbg("Unable to write latency timer: %i", rv); return -EIO; } return 0; } |
3. Create Makefile in the /usr/src/ftdi_sio directory as below.
The path name of KDIR must be changed to Linux Source directory.
It is written as below since this example uses /usr/src/linux-2.6.28/.
Write as below and save as "Makefile" using proper small and capital letters.
obj-m := ftdi_sio.o KDIR := /usr/src/linux-2.6.28/ PWD := $(shell pwd) all: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.ko rm -rf *.mod.* rm -rf *.o rm -rf Modules.symvers rm -rf .tmp_versions rm -rf .ftdi_sio* |
4. Execute "make" and the compiling is completed
If "make" command is executed in /usr/src/ftdi_sio directory, the compiling is completed right away.
5. Register Module
5-1. Connect the Pc to USB2Dynamixel.
5-2. Check whether Driverf before modification is loaded or not.
If existing Driver of # lsmod // is loaded, ftdi_sio module can be checked.
5-3. Erase the existing driver.
# rmmod ftdi_sio
5-4. Install new-built driver.
# insmod ftdi_sio.ko
* It must be reloaded by insmod command after rebooting.
If a library is built by "make" command in DynamixelSDK/src folder, it is automatically copied to DynamixelSDK/lib folder.
It provides ReadWrite, ScanDynamixel, and SyncWrite. They are moved to each example folder in DynamxielSDK/example folder and can be built by "make" command.
All examples are supposed to use /dev/ttyUSB0 as the basic device.
Please refer to the following link for examples.