Uploading a Kernel via the Serial Port

WARNING: uploading a kernel via the serial port takes about 20 minutes and uploading a ram disk image can take about 70 minutes, if interrupted will leave your unit inoperable until the procedure is completed correctly. U-boot if used incorrectly can leave your unit completely inoperable, even beyond recovery by this procedure. Since this procedure requires hooking up a serial port, your warranty is already void, but doing anything mentioned here will futher void it. While care has been taken to ensure the following procedure is correct we offer no gurantee that it will not destroy your hardware and burn down your domcile.

Das U-Boot is a GPL'ed cross-platform boot loader, it is a small piece of software that executes soon after powering up a computer. It will initialize the basic hardware and, if not interrupted, load and execute the Linux Kernel.

By entering a character soon after u-boot starts outputting messages you can interrupt the boot process and communicate directly with u-boot. The version of u-boot supplied with the DSM G600 is severly restricted in the commands it supports, pretty mouch the only useful command is loadb. The loadb provided by D-Link is non-standard in that instead of loading a binary into RAM, it will take a binary and load it as a kernel and/or a ramdisk image. For loading a kernel, the command is:

loadb k

If you want to load ram disk image instead of kernel then the command is:

loadb r

Loadb uses the kermit protocol to upload the image. While minicom claims to provide the kermit protocol it does not appear to work with u-boot, so the kermit program is suggested.

Kermit, the program, is an very complex application and it's use is beyond the scope of this document. This link describes it's use with a full-featured u-boot.

My .kermrc file looks like:

set line /dev/ttyS0
set speed 9600
set carrier-watch off
set handshake none
set flow-control none
set file type bin
set rec pack 1000
set send pack 1000
set window 5

U-Boot command prompt

After starting kermit and connecting the serial port, power-up the unit, when u-boot starts displaying messages press the space-bar. U-boot will display something like:

U-Boot 0.2.0 (May 11 2005 - 18:56:16)

CPU:   MPC8245 V1.2 at 170.503 MHz:
Board: Sandpoint 8245
DRAM:  32 MB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0 

You are now at the u-boot command prompt. Assuming the kernel you want to load is /tftpboot/pImage, enter the u-boot command

loadb k

U-boot will respond with:

## Ready for binary (kermit) download ...

Now type Ctrl=\c (control backslash follwoed by “c”) to return the the kermit prompt and type:

send /tftpboot/pImage

Next you will see transfer statistics:

C-Kermit 8.0.209, 17 Mar 2003, serv.penthouse.lan []

   Current Directory: /root
Communication Device: /dev/ttyS0
 Communication Speed: 9600
              Parity: none
         RTT/Timeout: 01 / 04
             SENDING: /tftpboot/pImage => PIMAGE
           File Type: BINARY
           File Size: 3008666
        Percent Done:
 Estimated Time Left: 01:05:31
  Transfer Rate, CPS: 760
        Window Slots: 1 of 1
         Packet Type: D
        Packet Count: 28
       Packet Length: 1000
         Error Count: 0
          Last Error:
        Last Message:

X to cancel file, Z to cancel group, <CR> to resend last packet,
E to send Error packet, ^C to quit immediately, ^L to refresh screen.

U-boot will now upload the image, when the upload is complete, type “connect” to reconnect to u-boot to monitor the next step (which will occur automatically). After uploading the image u-boot will check the image, if it is a u-boot compatible image and not too large it will program it into flash.

## Total Size      = 0x002de89a = 3008666 Bytes
## Start Addr      = 0x00100000
Un-Protect Flash Bank # 1
Erase Ramdisk from 0xffc10000 to 0xffefffff ....... done
Erased 47 sectors
Ramdisk Size = 3008666
Copy to Flash... done
Protect Flash Bank # 1

Next you can use bootm command or cycle power to execute the new kernel, (be sure the programming is done before removing the power).

=> bootm FFF10000 FFC20000

Personal Tools