Recovery option of the D-Link DNS-323

Conceptronic CH3SNAS from the front

In case there is a problem with the kernel or ramdisk on your D-Link DNS-323 or Conceptronic CH3SNAS, you can upload a new kernel and ramdisk over the serial console and write them to flash. For this, you first have to make a serial connector according to these instructions.

Extracting the Kernel and Ramdisk from a Firmware Image

Both the firmware from D-Link and the installer from Debian are shipped as firmware images that the original firmware will accept. When you want to upload the kernel and ramdisk to flash via the serial console, you first have to extract them from the firmware image.

You can use the dns323-firmware-tools package to extract the firmware image:

splitdns323fw -k uKernel -i uRamdisk netboot.img

Uploading the Kernel and Ramdisk with Kermit

Now that you have extracted the kernel and ramdisk, you can upload them to your DNS-323 via the serial console. You need kermit for this task, and if you're running Debian, you can install the ckermit package from non-free.

You can now connect to your DNS-323 with kermit. You have to specify the baud rate as well as the device on your machine where the serial cable is connected. In my case, this is /dev/ttyUSB0 because I use a USB connector but if your serial port is built-in it's most likely /dev/ttyS0.

kermit -l /dev/ttyUSB0 -b 115200

Now enter the following commands, so you will have the right settings:

set carrier-watch off
set flow-control none
set handshake none
set prefixing all
set streaming off
set parity none

Now press c in order to connect to the serial console. Turn your DNS-323 on and when you see the count down press the space key, followed by 1 (the digit "one"). You can write the kernel to flash with the following command:

loadb k

Now you actually have to upload the kernel via the serial console. For this, you have to go back to the kermit menu with the keys Ctrl-\ and c (i.e. Ctrl and backslash, followed by the letter c). Back in the kermit menu, type:

send uKernel

You will see a menu with the status of the upload. When the kernel has been uploaded, go back to the serial console with c and wait until the kernel has been written to flash. Then type

loadb r

in order to load the ramdisk, go back to kermit with Ctrl-\ and c and type

send uRamdisk

Again, when the ramdisk has been uploaded, go to the serial connection with c and you will see that the ramdisk is being written to flash.

When both the kernel and ramdisk are in flash, restart the machine and it will load the new image.