Hello!
Sorry my bad english.

I'm trying to parse the DFL-600 firmware. Allow a couple of questions.

Info:
RedBoot(tm) bootstrap and debug environment [ROM]
Red Hat certified release, version 1.92p1 - built 16:07:44, Jan  3 2005
Platform: IXDP425 Development Platform (XScale)

The structure of the image from the beginning.
0: -2b presumably chksum general
    -4b version firmvare
    -2b 00 00
    -4b rootfs length
    -4b kernel length
0x10: rootfs+kernel, where
    rootfs (without checksum)
0x0rootfs_len+0x10
    kernel, where
    0x0     - 00000000000000000
    0x00c  - 4b kernel length
    0x010  - 00000
    0x014 - 2b presumably kernel chksum
    0x018 - 8b ascii string "1.00-B01", in several versions of firmware is the same
    0x020 - 000000000000000000000000000000000
    0x200 - kernel body
end

Questions:
1) Please, share your ideas, experiences, how to calculate cheksum. In Redboot is "cksum 32bit checksum [POSIX algorithm]", I think he used it. I tried different variants, to no avail. It should be remembered that the algorithm is 32 bits and 16 bits of the result. Apparently, a more complex algorithm for calculating.

The result of an incorrect calculation:
RedBoot> fis load kernel
  kernel total len = c9ce4 826596
data_checksum != 0
Load firmware from pc to ram !

I made a script:
#!/bin/bash

typeset -i CRC SKIP COUNT MEMCOUNT RSTEP PASS
DIR=/home/globus/mia/FR/distrib/openwrt/img-work
#DIR=/home/globus/tmp/dfl-600/img-work
SKIP=0
IBS=1
COUNT=`wc -c $DIR/$1 | cut -f 1 -d ' '`
MEMCOUNT=$COUNT
RSTEP=0
PASS=0

until [ $RSTEP == 16 ]; do
    until [ $SKIP == 24 ]; do
<------>CRC=`dd ibs=$IBS skip=$SKIP count=$COUNT if=$DIR/$1 2>/dev/null | cksum | cut -f 1 -d ' '`
<------>echo $CRC
<------>    if [ $CRC == 0 ]; then
<------><------>echo 'Offset from begin: '$SKIP
<------><------>echo 'Length from offset: '$COUNT
<------><------>exit
<------>    fi
<------>    SKIP=$(($SKIP+1))
<------>    COUNT=$(($COUNT-1))
<------>    PASS=$(($PASS+1))
    done
COUNT=$(($MEMCOUNT-1))
MEMCOUNT=$COUNT
RSTEP=$((RSTEP+1))
SKIP=0
done
echo 'Pass: '$PASS

The result is negative. Tell me please, whether the nearest analogues of the DFL-600 from other firms or before, this has not been practiced?