HOWTO update a Thomson Speedtouch router firmware in Linux

Overview

Thomson's series of DSL ethernet routers and modems (not USB modems) ship with a firmware updater for windows.

These instructions are for a Thomson 516v6 ADSL single-port ethernet router purchased in the UK in February 2008. The method should be identical for other Speedtouch 5xx routers.

The updater is really just a bootp, tftp and dhcp server application. This is easily duplicated in Linux.

The instructions for installing packages are Debian/Ubuntu specific. I expect most general-purpose distros to have the required packages.

Vim is my text editor, substitute yours in the following instructions.

Initial Setup

Connect your Speedtouch router and your host machine to your network.

Configure your host machine with a static IP address.

Make sure you can ping the router from your host machine.

Open a terminal.

Get Thomson MAC address

arping 192.168.1.254

Output should show MAC address.

Note: 192.168.1.254 is one of the two IP addresses the router is configured with by default. The other is 10.0.0.138.

Install bootp and tftpd

sudo apt-get install bootp tftpd-hpa

Configure tftpd

sudo vim /etc/default/tftpd-hpa

RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

| -l | run in standalone (listen mode), rather than from inetd | || | -s | change root directory on startup |

Download Thomson firmware

I had to hunt around a bit until I found some up to date firmware.

This firmware is v7.4.1.7 (international). It includes a UI configuration option for putting the router in bridge mode.

Configure bootp

sudo vim /etc/bootptab

Configuration is a series of colon-separated key=value pairs

Example

thomson:ip=192.168.1.254:ha=$MACADDR:td=/var/lib/tftpboot:hd=/:bf=ZZQ2AA7.417.bli:

| ip | IP address of the router | || | ha | MAC address of the router. $MACADDR should be replaced with the Speedtouch MAC address formatted as a string of hex digits. e.g. 00112233445566 | | td | TFTP directory. The value of the "td" option must match the value of the "-s" option from /etc/default/tftpd-hpa. | | hd | Path under "td" where bootfiles are found | | bf | Router firmware filename |

Ubuntu >= 11.10 Example

In later versions of tftpd (as of Ubuntu 11.10 at least), the td option is now relative to the tftpd default directory (/var/lib/tftpboot). So leave out the td= option altogether. Thanks to Matthew Marks for the report.

Example:

thomson:ip=192.168.1.254:ha=$MACADDR:hd=/:bf=ZZQ2AA7.417.bli:

Start bootp

Start bootpd as root with debugging enabled:

sudo bootpd -d4

Yes, I'm starting bootpd on the console, not as a daemon. It's easier to see debug output this way.

Upgrade the firmware

  • Turn off the Speedtouch
  • Hold down Reset and turn it on
  • Continue holding for at least 10 seconds (or until the Power LED flashes red-green repeatedly and the Ethernet LED flashes green).

Output from bootpd should look something like:

bootpd: info(6):   bootptab mtime: Wed Feb 20 14:46:57 2008
bootpd: info(6):   reading "/etc/bootptab"
bootpd: info(6):   read 1 entries (1 hosts) from "/etc/bootptab"
bootpd: info(6):   recvd pkt from IP addr 0.0.0.0
bootpd: info(6):   bootptab mtime: Wed Feb 20 14:46:57 2008
bootpd: info(6):   request from Ethernet address 00:14:7F:11:3E:01
bootpd: info(6):   found 192.168.1.254 (thomson)
bootpd: info(6):   requested path=""  file="BANT-V"
bootpd: info(6):   bootfile="//ZZQ2AA7.417.bli"
bootpd: info(6):   vendor magic field is xx.xx.xx.xx
bootpd: info(6):   sending reply (with RFC1048 options)

If all goes well after about a minute you should be able to log into the router again with the new firmware.

Speedtouch 716 Addendum

Courtesy of Matthew Marks:

When resetting the Speedtouch716:

  • Turn off the Speedtouch
  • Hold down Reset and turn it on
  • Continue holding until the Power LED turns orange.

Links