DiskStation DS-106 Series Hardware¶
Detailed specifications and software hacks (bootloader, Linux).
Chips Identified on the PCB of a Revision 3.1 DS-106X¶
The DS-106(e) and the DS-101g+ most likely have the same hardware with a different configuration of RAM and RAM/flash, respectively. Pictures are available here.
Slot(s) | Description |
---|---|
U15 | Freescale MPC8241LVR266D (4K78P; QQKU0628) Integrated Host Processor (CPU), PowerPC 603e based |
U23-26 | Hynix Semiconductor HY57V561620CTP-H (620U; KOR N6CABM02Q1) 256 Mbit 133 MHz lead-free SDRAM. Configuration: 4 banks x 4 Mbit x 16 |
U33 | NEC Electronics D720101GJ (0622PPA36) USB 2.0 Host Controller |
U34 | Silicon Image SataLink SiI 3512ECTU128 (QB9515.1; 0615; AD03Ax2) SATA Host Controller (PCI to 2-port SATA150) |
U29 | Spansion S29AL016M (S29AL016M90TF102; 0627FRC) 16 Mbit flash memory |
U21 | Microchip PIC16F627A (ZSO C?; 06312M8) 8bit microcontroller (programmable integrated circuit, PIC) |
U31 | Catalyst Semiconductor CAT24WC08 (0628F; ?) 8K-Bit Serial (I2C) EEPROM |
U19 | Marvell Yukon 88E8001-LKJ1 (AGR52A.1; 0535 A4E; TW) 32-bit Gigabit Ethernet Controller |
U18 | LB 24HST1041A-2 (LF; 0630M) 1000 Base-T Magnetics Module (isolating transformer) |
U6 | not identifiable, maybe Rico RS25C37A/B I2C bus serial interface real-time clock (RTC) IC |
U13 | Cypress Semiconductor CY23S05 (SXC-1H; 6196802; ?) Low-cost Spread Aware Zero Delay Buffer |
U14 | Cypress Semiconductor CY25100 (SXCF; C258528?) Field- and Factory-Programmable Spread Spectrum Clock Generator for EMI Reduction |
Q18+20 | AnaChip AP1501-50 and AP1501-33 150 kHz 3 A PWM Buck DC/DC Converter (5.0 and 3.3 V) |
Q8 | AnaChip AP1084 (0626BL) 5A Low Dropout Positive Adjustable or Fixed-Mode Regulator |
U22 | 4435GM (616202) Unlcear, possibly a P-Channel Logic Level PowerTrenchMOSFET |
See also¶
PCI Devices¶
0:13:0 (0:0d:0) PCI device 1095:3512. Silicon Image, Inc. SiI 3512 SATALink Controller IRQ 16. Master Capable. Latency=128. I/O at 0xbffff8 [0xbfffff]. I/O at 0xbffff4 [0xbffff7]. I/O at 0xbfffe8 [0xbfffef]. I/O at 0xbfffe4 [0xbfffe7]. I/O at 0xbfffd0 [0xbfffdf]. Non-prefetchable 32 bit memory at 0xbffffe00 [0xbfffffff]. 0:14:0 (0:0e:0) NEC USB controller (no PCI devices in /proc/pci) IRQ 17. Master Capable. Latency=128. Min Gnt=1.Max Lat=42. Non-prefetchable 32 bit memory at 0xbfffe000 [0xbfffefff]. -> Kernel: usb-ohci 0:14:1 (0:0e:1) NEC USB controller (no PCI devices in /proc/pci) IRQ 17. Master Capable. Latency=128. Min Gnt=1.Max Lat=42. Non-prefetchable 32 bit memory at 0xbfffd000 [0xbfffdfff]. -> Kernel: usb-ohci 0:14:2 (0:0e:2) NEC USB controller (no PCI devices in /proc/pci) IRQ 17. Master Capable. Latency=128. Min Gnt=1.Max Lat=42. Non-prefetchable 32 bit memory at 0xbfffcf00 [0xbfffcfff]. -> Kernel: ehci_hcd 0:15:0 (0:0f:0) PCI device 11ab:4320. Marvell Technology Group Ltd. IRQ 18. Master Capable. Latency=128. Min Gnt=23.Max Lat=31. Non-prefetchable 32 bit memory at 0xbfff8000 [0xbfffbfff]. I/O at 0xbffe00 [0xbffeff]. -> Kernel: sk98lin, Yukon Gigabit Ethernet 10/100/1000Base-T Adapter
Flash Layout¶
FFE00000 16k z FFE04000 8k z FFE06000 8k z FFE08000 32k z FFE10000 64k z FFE20000 64k z FFE30000 64k z FFE40000 64k z FFE50000 64k z FFE60000 64k z FFE70000 64k z FFE80000 64k z FFE90000 64k z FFEA0000 64k z FFEB0000 64k z FFEC0000 64k z FFED0000 64k v FFEE0000 64k r FFEF0000 64k FFF00000 64k p FFF10000 64k p FFF20000 64k p FFF30000 64k p FFF40000 64k gu FFF50000 64k gu FFF60000 64k gu FFF70000 64k gu FFF80000 64k gu FFF90000 64k ge FFFA0000 64k g FFFB0000 64k g FFFC0000 64k g FFFD0000 64k g FFFE0000 64k g FFFF0000 64k f absolute relative "mtd-partition" size sectors ---------------------------------------------------------------------------------------- 0xffe00000 0x000000 : "zImage" 851968 832k 1*16k+2*8k+1*32k+11*64k z 0xffed0000 0x0d0000 : "vendor" 65536 64k 1*64k v 0xffee0000 0x0e0000 : "RedBoot Config" 131072 128k 2*64k r 0xfff00000 0x100000 : "ppcboot" 262144 256k 4*64k p 0xfff40000 0x140000 : "rd.gz" 720896 704k 11*64k g 0xffff0000 0x1f0000 : "FIS directory" 65536 64k 1*64k f 0xffffffff 0x200000 : --end-of-flash-- 2097152 2048k U-Boot "daisy-chain", using: 0xfff40000 0x140000 320k 5*64k u --> TEXT_BASE = 0xfff40000, MONITOR_LEN = 0x50000 0xfff90000 0x190000 64k 1*64k e --> ENV_ADDR = 0xff90000, ENV_SIZE = 0x10000
LEDs and Buttons¶
The PIC controls the LEDs and buttons. It is connected to ttyS1 (9600 8N1). It reacts on single bytes and emits single bytes on button events. The codes are as follows.
Char | Hex | Description | Char | Hex | Description | Char | Hex | Description |
---|---|---|---|---|---|---|---|---|
Power Management | ||||||||
1 | 0x31 | power off | C | 0x43 | reset | |||
Beeper | ||||||||
2 | 0x32 | short beep | 3 | 0x33 | long beep | |||
Power LED | ||||||||
6 | 0x36 | off | 4 | 0x34 | on | 5 | 0x35 | blink |
Status LED | ||||||||
7 | 0x37 | off | 8 | 0x38 | green on | 9 | 0x39 | green blink |
: | 0x3a | orange on | ; | 0x3b | orange blink | |||
Copy LED | ||||||||
B | 0x42 | off | @ | 0x40 | on | A | 0x41 | blink |
Buttons | ||||||||
0 | 0x30 | power | ` | 0x60 | copy | ? | ? | reset |
Das U-Boot and Linux 2.6.20¶
Introduction¶
First attempts at installing Das U-Boot (1.2.0) and Linux (2.6.20) on the DS have been made. While U-Boot works rather well, Linux seems to be a bit more tricky. Here the current snapshots of these attempts are provided as downloads.
Please be aware that applying these instructions may void the warranty for the DS (or the device you install it onto) and it can make the DS unusable. It may even destroy or damage it. Even worse, it will most likely brick your Diskstation.
The author disclaims all liability for direct, indirect, incidental, or consequential damages that result from any use of this software or the information contained in it.
You have been warned and use this stuff at your own risk!
Any suggestions, improvements and patches are highly appreciated. Use the ds101-linux mailinglist to discuss these things.
Toolchain¶
A good (i.e. working, sane) toolchain is needed to compile Das U-Boot and the Kernel. The Embedded Linux Development Kit (ELDK) is recommended. See also toolchains.
export EDLKBASE=/path/to/the/eldk export PATH=${EDLKBASE}/usr/bin:${EDLKBASE}/bin:$PATH export CROSS_COMPILE=ppc_6xx-
Serial Console¶
A serial console to access ppcboot is madatory. See the section RS232 Serial Port for DS/CS on the hardware page.
Compiling das U-Boot¶
This patch against U-Boot 1.2.0 adds support for the DS-106X.
- u-boot-1.2.0.tar.bz2 (7 MB)
- u-boot-1.2.0-ds106x-20060220.patch.gz (12kb)
- u-boot-build-20060220.tar.bz2 (400kb) – Binary version (u-boot.bin, hello_world.bin).
tar -xjvf u-boot-1.2.0.tar.bz2 cd u-boot-1.2.0 zcat ../u-boot-1.2.0-ds106x-YYYYMMDD.patch.gz | patch -p1 mkdir ../u-boot-build export BUILD_DIR=`realpath ../u-boot-build` make distclean make ds106x_config make
Installing das U-Boot¶
You have to be able to load u-boot.bin
into ppcboot. For me serial upload using Kermit did not work. I used rarp
as described in the section Loading Stuff into Ppcboot over Network on the hacks page.
rarp 3000000 u-boot.bin protect off all erase FFF40000 FFF8FFFF erase FFF90000 FFF9FFFF cp.b 3000000 fff40000 4ffff protect on all go fff40100
Test with hello_world.bin
:
DS106X> rarp 40000 hello_world.bin RARP broadcast 1 Using SK98#0 device TFTP from server 192.168.1.13; our IP address is 192.168.1.101 Filename 'hello_world.bin'. Load address: 0x40000 Loading: ############# done Bytes transferred = 66360 (10338 hex) DS106X> go 40004 hoi hoi :-) ## Starting application at 0x00040004 ... Example expects ABI version 3 Actual U-Boot ABI version 3 Hello World argc = 4 argv[0] = "40004" argv[1] = "hoi" argv[2] = "hoi" argv[3] = ":-)" argv[4] = "<NULL>" Hit any key to exit ... ## Application terminated, rc = 0x0
Yay! :-)
N.B. After overwriting rd.gz
the Diskstation will not auto boot anymore. The default (and unchangeable) bootcmd=bootm FFE00000 FFF40000
cannot load rd.gz
anymore and will fail. You can still boot the standard kernel/system using bootm ffe00000
. Of course, you can flash the original rd.gz
provided that you have a backup. You have read the warning above, have you?
Compiling Linux¶
This patch against Linux 2.6.20 is the best I have so far. It includes a few ugly hacks found in Synology’s sources.
- linux-2.6.20-ds106x-20060220.patch.gz (12kb) – The patch.
- linux-2.6.20-ds106x-20060220.tar.bz2 (7.5MB) – Binary version (Kernel images, modules, and the
.config
file). - syno-kernel-2.6.15-diff.patch.gz (540k) – The patch from Synology’s version of 2.6.15 to a vanilla 2.6.15.
mkdir -p linux-build linux-install/boot cp config-2.6.20 linux-build/.config cd linux-2.6.20 make ARCH=ppc O=`realpath ../linux-build` oldconfig make ARCH=ppc O=`realpath ../linux-build` menuconfig make ARCH=ppc O=`realpath ../linux-build` make ARCH=ppc O=`realpath ../linux-build` INSTALL_MOD_PATH=`realpath ../linux-install` modules_install cp -v ../linux-build/arch/ppc/boot/images/{vmlinux.bin,uImage,vmlinux.gz,zImage.elf} ../linux-install/boot/
Booting Linux¶
In ppcboot or u-boot:
rarp 3000000 boot/uImage setenv bootargs console=ttyS0,115200 root=/dev/hda1 init=/bin/sh bootm 3000000
Later it should be possible to replace ppcboot with u-boot and boot the Kernel using diskboot
or even ext2load
.
Reverting the U-Boot installation¶
You would do this in ppcboot (i.e. not in u-boot). Hopefully you have a backup of mtd_rootfs
.
rarp 3000000 mtd_rootfs protect off all erase FFF40000 FFFEFFFF cp.b 3000000 fff40000 AFFFF protect on all reset
Issues, TODOs, Notes¶
- Determine MAC address (ethaddr) in U-Boot.
- Mem test in u-boot does not work (hangs).
- Add LED/beeper/buttons support (see the Linkstation u-boot patch).
- Kernel does not detect RTC (
drivers/rtc/rtc-rs5c372.c
,arch/ppc/syslib/todc_time.c
,CONFIG_RTC_DRV_RS5C372
). sk98lin.c
behaves strangely (ping
works,telnet
orscp
does not work). Better useskge.c
?ttyS1
is not found (detected). Why?- Early boot messages in kernel do not appear on
ttyS0
and/or the network console. - Probably lots of other stuff in the kernel.
Credits and References¶
In no particular order:
- mcdmx and gda from the ds101-linux mailinglist.
- The NSLU2-Linux.org Project.
- The Open Turbostation Project.
- The Linkstation Wiki/Community.
- The Kernel folks.
- The U-Boot crew.
- Synology, Inc..
- Bibliography of Kernel documentation
- ds106x-r3.1-fw426-bootlog.txt
- Tobias had some success running a custom kernel on a DS-101g+. He said
ethtool -K eth0 tx off; ethtool -K eth0 rx off
helps with theskge.c
driver.