Flashing mLinux Firmware

The following procedure generally only applies to the MTCDT-xx-210L model but can be used to convert a MTCDT-xx-210A model to MTCDT-xx-210L.

All downloads are available from the Downloads page.

View the Current Firmware Version

$ cat /etc/mlinux-version

 

Using Auto-Flash During Reboot (Recommended)

During the boot process, the device checks for a file named /var/volatile/do_flash_upgrade which indicates if it should attempt to flash itself. If /var/volatile/do_flash_upgrade exists, it will look for the upgrade files in two locations: /var/volatile/flash-upgrade and /media/card/flash-upgrade and then flash itself.

Summary

  • Copy kernel and rootfs to:
    /var/volatile/flash-upgrade/uImage.bin
    /var/volatile/flash-upgrade/rootfs.jffs2
    OR
    /media/card/flash-upgrade/uImage.bin
    /media/card/flash-upgrade/rootfs.jffs2
  • Run touch /var/volatile/do_flash_upgrade
  • Run reboot

The file names must match above exactly and are case-sensitive.

Detailed Steps

  1. On your PC, extract out the the .rootfs.jffs2 and .bin files to a known location. For example:
    mlinux-factory-image-mtcdt-20150527081222.rootfs.jffs2
    uImage--3.12.27-r11.2-mtcdt-20150527052826.bin
  2. On your PC, rename the new firmware files like this:
    mlinux-factory-image-mtcdt-20150527081222.rootfs.jffs2rootfs.jffs2
    uImage--3.12.27-r11.2-mtcdt-20150527052826.binuImage.bin
  3. Connect the Conduit to your PC via an ethernet cable and ssh into it.
  4. On the Conduit, first create the destination directory:
    mkdir /var/volatile/flash-upgrade
  5. Copy the files to the device. If using Windows, you’ll need a tool like WinSCP or SCP in Cygwin.
    Using SCP on your PC:
    scp uImage.bin root@192.168.2.1:/var/volatile/flash-upgrade/uImage.bin
    scp rootfs.jffs2 root@192.168.2.1:/var/volatile/flash-upgrade/rootfs.jffs2
  6. After transferring the files, on the Conduit run:
    touch /var/volatile/do_flash_upgrade
  7. Run reboot

During flashing, programmable LEDs will blink in a progression pattern.

Note: If you want to copy uImage.bin and rootfs.jffs2 into the tmpfs mounted at /var/volatile, first verify that there is enough space to fit the images in memory. If you flash a larger image and have an SD card inserted, copy the images into /media/card instead.

 

Using U-boot & TFTP

Access U-Boot at boot time from the DEBUG serial port.

Setting up your U-Boot environment

Linux: Install and configure a TFTP server. For example using in.tftpd and xinetd the following configuration will listen on port 69 and set /tftpboot as the tftp root dir.

/etc/xinetd.d/tftp:

service tftp
{
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = -s /tftpboot
disable         = no
}

Windows: Download, install and configure Tftpd32, available at download.com.

 

On your PC, extract out the the .rootfs.jffs2 and .bin files and place them in the tftpboot directory . Then rename them like this:

mlinux-factory-image-mtcdt-20150527081222.rootfs.jffs2oe_rootfs.jffs2
uImage--3.12.27-r11.2-mtcdt-20150527052826.binoe_uImage.bin

 

Power on the device after connecting the debug cable. You need to interrupt U-Boot from booting the system; look for the Hit any key to stop autoboot.

U-Boot 2012.10-mtcdt-r6 (May 07 2015 - 13:37:07)

CPU: AT91SAM9G25
Crystal frequency: 12 MHz
CPU clock : 400 MHz
Master clock : 133.333 MHz
[...]
Hit any key to stop autoboot: 0
U-Boot>

 

Some units come already configured with a U-Boot environment that makes flashing the device simple. To check the contents of the U-Boot environment, run printenv and check for variables named krb, tftp_kernel and tftp_rootfs, etc.

If these variables do exist, then modify the serverip, ipaddr, and netmask variables to match your network and save the settings. Then skip to the “Flash from U-Boot” section below.

U-Boot> set ipaddr 192.168.2.1
U-Boot> set serverip 192.168.2.99
U-Boot> set netmask 255.255.255.0
U-Boot> save
Saving Environment to NAND...
Erasing redundant NAND...
Erasing at 0x160000 -- 100% complete.
Writing to redundant NAND... done
U-Boot>

 

If these variables don’t exist, follow these instructions to configure the U-Boot environment for flashing:

Download the uboot-setenv-mtcdt minicom script from the mLinux git repository to your development PC:
http://git.multitech.net/cgi-bin/cgit.cgi/meta-multitech.git/plain/contrib/uboot-setenv-mtcdt.minicom

Copy that uboot-setenv-mtcdt script to a location with a shorter path. The full path needs to be short enough to fit in the Minicom run script menu.

$ cp uboot-setenv-mtcdt.minicom $HOME/uboot-setenv.minicom

Edit ${HOME}/uboot-setenv to match your network and device.

send setenv serverip              192.168.2.2
send setenv ipaddr                192.168.2.1
send setenv netmask               255.255.255.0

Run the U-Boot environment setup script. At minicom type CTRL-A G and enter ${HOME}/uboot-setenv as the name of the script to run. When the script finishes it should save and print out the environment. Make sure you expand ${HOME} to your actual home dir when entering the script name.

Flash from U-Boot

Make sure oe_uImage.bin and oe_rootfs.jffs2 are in your tftpboot directory, then run the krb command. U-boot will copy the firmware files from your PC, flash the device, and reboot.

U-Boot> run krb

 

NAND Flash Layout

Name Offset Size Usage
NANDFlash 0x00000000 0x10000000 Whole NAND
at91bootstrap 0x00000000 0x00040000 (256KB) Bootstrap [bootstrap.bin]
u-Boot 0x00040000 0x00080000 (512KB) U-Boot [u-boot.bin]
u-Boot Config 0x000C0000 0x000A0000 (640KB) U-Boot environment
u-Boot Redundant Config 0x00160000 0x000A0000 (640KB) U-Boot redundant environment
uImage 0x00200000 0x00600000 (6MB) Linux Kernel [uImage.bin]
Config 0x00800000 0x00800000 (8MB) Configuration [/var/config]
OEM Config 0x01000000 0x00800000 (8MB) OEM Specific configuration [not used by default]
Rootfs 0x01800000 0x0E800000 (232MB) root filesystem [rootfs.jffs]

Total Size: 256 MB

Block/Sector Size: 128 KB