Terastation TS-WXL

From Buffalo NAS Wiki


Terastation TS-WXL

CPU 800MHz (MV78100)
Memory 512MB
Bays 4
Network 2x 10/100/1000 Mbps
Sata 2x SATA II (SoC)
NAND Flash 512MB
SPI Flash
USB 2.0 2x (Back)
Fan Yes
Power Internal AC 100-240V, universal 50/60Hz

Stock Firmware Installation

Install Firmware from NAND

If blank drives are inserted the device will boot from it's internal NAND and eventually go into EM mode. Once the device is in EM mode the firmware can be installed using tsupdater in debug mode, see Enable Debug mode for LSUpdater/TSUpdater.

Other Methods

This device is much less flexible about what partitions/filesystems it will attempt to boot from. I recommend installing from NAND so that the device will build appropriate partitions for you. It is possible to install via TFTP or loading files directly if desired.

Custom Firmware/Operating System installation

See Installing Debian on MV78100 Devices (TS-WXL, TS-XL,TS-RXL)

Device Notes

The serial port on the front of the device outputs the devices console output which can be used for troubleshooting. The port has input disabled.

It is supposed to be possible to re-enable input on the serial port by removing a chip from the pcb (I have not yet tried this). see: Terastation III Serial console (Buffalo NAS Central)

Although it's possible to change uboot environment variables from within the stock firmware, changing the bootcmd does not seem to affect the boot process for some reason. I attempted to change the location that uboot loads the initrd image and confirmed the change persisted through a reboot but the console output shows that it still loads from the default address. see below for a workaround.

U-boot max file sizes

The stock U-boot will crash if you try to load a kernel image larger than (somewhere between 4-6MB, still looking for actual limit).

The stock U-boot loads the initrd after the kernel but earlier in memory. this means that if the initrd is larger than 23mb it will overlap the kernel. If you create an initrd uboot image with 23mb of padding at the beginning followed by a copy of the kernel (to re-write it in the proper location) you can then append a larger initrd image (provided you hardcode the new offset into your kernel's cmdline).

Partition table notes

The stock firmware partitions the disks using GPT partition tables. It writes the MAC address of eth0 to 0x28 of the beginning of the disk when formatting a disk, it then checks this at boot time to determine whether the disk is "owned" by this device. The boot loader does not seem to do anything differently if this doesn't match or is missing but I have not tested it extensively.

00000000  01 00 00 00 00 00 00 00  20 00 00 00 00 00 00 00  |........ .......|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  30 30 3a 31 64 3a 37 33  |........00:1d:73|
00000030  3a 66 66 3a 34 66 3a 66  62 00 00 00 00 00 00 00  |:ff:4f:fb.......|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

boot partition requirements

The boot files are loaded using u-boot's ext2load function with hardcoded parameters. To boot successfully the boot partition must be:

  • the first partition on the disk
  • either a regular partition or part of a raid1 array using metadata version 0.9
  • formatted using the ext2 or ext3 filesystem
  • have an inode size of 128 bytes (newer distros have started using 256 as the default)
  • relatively small, 1GB is usually more than enough for /boot (I have not yet experimented to determine the max allowable size)

The filesystem can be created with:

mkfs.ext3 -I 128 /dev/sdx1


DMESG output

Starting kernel ...

Uncompressing Linux....................................................................................................................
Linux version (root@HP7907) (gcc version 4.2.0 20070413 (prerelease)) #2 Mon Dec 18 12:35:25 JST 2017
CPU: Feroceon [41159260] revision 0 (ARMv5TE), cr=00053977
CPU: VIVT data cache, VIVT instruction cache
Machine: Feroceon-MV78XX0
Using UBoot passing parameters structure
u.mv_uboot.env_addr is 0xfff80000. Using tag's value.
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
Kernel command line: console=ttyS0,115200 mtdparts=physmapped-flash.0:32m(root)
PID hash table entries: 2048 (order: 11, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 512MB = 512MB total
Memory: 504960KB available (4956K code, 274K data, 144K init, 0K highmem)
Hierarchical RCU implementation.
Console: colour dummy device 80x30
Calibrating delay loop... 799.53 BogoMIPS (lpj=3997696)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
xor: measuring software checksum speed
   arm4regs  :   687.600 MB/sec
   8regs     :   619.600 MB/sec
   32regs    :   686.800 MB/sec
xor: using function: arm4regs (687.600 MB/sec)
NET: Registered protocol family 16
Feroceon L2: Enabling L2
Feroceon L2: Cache support initialised.

CPU 0, CPU Interface
SDRAM_CS0.... ....base 00000000, size 512MB 
SDRAM_CS1.... ....disable
SDRAM_CS2.... ....disable
SDRAM_CS3.... ....disable
DEVICE_CS0... ....base f8000000, size  32MB 
DEVICE_CS1... ....base fe000000, size   1MB 
DEVICE_CS2... ....base fc000000, size   1MB 
DEVICE_CS3... ....no such
DEV_BOOCS.... ....base fff00000, size 512KB 
DEVICE_SPI... ....base fff00000, size 512KB 
PEX0_IO...... ....base f2000000, size   8MB 
PEX0_MEM0.... ....base cc000000, size  64MB 
PEX1_IO...... ....base f3000000, size   8MB 
PEX1_MEM0.... ....base d0000000, size  64MB 
PEX2_IO...... ....no such
PEX2_MEM0.... ....no such
PEX3_IO...... ....base f5000000, size   8MB 
PEX3_MEM0.... ....base d8000000, size  64MB 
PEX4_IO...... ....base f6000000, size   8MB 
PEX4_MEM0.... ....base dc000000, size  64MB 
PEX5_IO...... ....no such
PEX5_MEM0.... ....no such
PEX6_IO...... ....no such
PEX6_MEM0.... ....no such
PEX7_IO...... ....no such
PEX7_MEM0.... ....no such
CRYPT_ENG..... ....base f7000000, size   2MB 
INTER_REGS... ....base f1000000, size   1MB 

  Marvell Development Board (LSP Version 3.1.3_MV78XX0)-- DB-MV78100-A-BP-BUFFALO  Soc: MV78100 A1 LE

 Detected Tclk 166666667 and SysClk 400000000 
Marvell USB EHCI Host controller #0: 9f835800
Marvell USB EHCI Host controller #1: 9f835740
Marvell USB EHCI Host controller #2: 9f835680
PEX0 interface detected no Link.
PEX4 interface detected no Link.
bio: create slab <bio-0> at 0
SCSI subsystem initialized
raid6: int32x1    112 MB/s
raid6: int32x2    150 MB/s
raid6: int32x4    131 MB/s
raid6: int32x8    107 MB/s
raid6: using algorithm int32x2 (150 MB/s)
NET: Registered protocol family 2
IP route cache hash table entries: 16384 (order: 4, 65536 bytes)
TCP established hash table entries: 65536 (order: 7, 524288 bytes)
TCP bind hash table entries: 65536 (order: 6, 262144 bytes)
TCP: Hash tables configured (established 65536 bind 65536)
TCP reno registered
NET: Registered protocol family 1
Trying to unpack rootfs image as initramfs...
rootfs image is not initramfs (no cpio magic); looks like an initrd
Freeing initrd memory: 8960K
rtc mv_rtc: rtc core: registered mv78xx0-rtc as rtc0
RTC registered
MICON ctrl (C) BUFFALO INC. V.1.00 installed.
Buffalo Gpio Control Driver (C) BUFFALO INC. Ver.1.00 installed.
Buffalo CPU Inerupts Driver (C) BUFFALO INC. Ver.0.01 alpha1 installed.
MICON V2 (C) BUFFALO INC. V.2.00 installed.(IRQ=78)
UPSDRV (C) BUFFALO INC. V.1.00 installed.
BUFFALO UPS Recover Function Initialized.
  OMRON contact type ups shutdown support enabled!
Kernel event proc (C) BUFFALO INC. V.1.00 installed.
initial_polarity_val = 0x000fc000
initial_polarity_val_high = 0x00000000
Buffalo GPIO SATA Hotplug Event Driver (C) BUFFALO INC. Ver.1.00 installed.
XOR registered 2 channels
XOR 2nd invalidate WA enabled
mvCesaInit: sessions=640, queue=64, pSram=f7000000
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
JFFS2 version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.
fuse init (API version 7.12)
SGI XFS with ACLs, security attributes, large block numbers, no debug enabled
SGI XFS Quota Management subsystem
msgmni has been set to 1004
alg: No test for cipher_null (cipher_null-generic)
alg: No test for ecb(cipher_null) (ecb-cipher_null)
alg: No test for digest_null (digest_null-generic)
alg: No test for compress_null (compress_null-generic)
alg: No test for stdrng (krng)
alg: No test for hmac(digest_null) (hmac(digest_null-generic))
async_tx: api initialized (sync-only)
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
io scheduler noop registered (default)
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 12) is a 16550A
console [ttyS0] enabled
serial8250.0: ttyS1 at MMIO 0xf1012100 (irq = 13) is a 16550A
serial8250.2: ttyS2 at MMIO 0xf1012200 (irq = 14) is a 16550A
brd: module loaded
loop: module loaded
Integrated Sata device found
mvSataInitAdapter : regVal changed(0x00000010)
IRQ 26/mvSata: IRQF_DISABLED is not guaranteed on shared IRQs
scsi0 : Marvell SCSI to SATA adapter
scsi1 : Marvell SCSI to SATA adapter
Loading Marvell Ethernet Driver:
  o Cached descriptors in DRAM
  o DRAM SW cache-coherency
  o 2 Giga ports supported
  o Single RX Queue support - ETH_DEF_RXQ=0
  o Single TX Queue support - ETH_DEF_TXQ=0
  o TCP segmentation offload (TSO) supported
  o Receive checksum offload supported
  o Transmit checksum offload supported
  o Network Fast Processing (Routing) supported - (Disabled)
  o Proc tool API enabled
  o SKB Reuse supported - (Disabled)
  o SKB Recycle supported - (Disabled)
  o Rx descripors: q0=128
  o Tx descripors: q0=532
  o Loading network interface(s):
     o register under mv88fx_eth platform
     o eth0, ifindex = 2, GbE port = 0
     o eth1, ifindex = 3, GbE port = 1

mvFpRuleDb (80f30000): 16384 entries, 65536 bytes
SPI Serial flash detected @ 0xfff00000, 512KB (8sec x 64KB)
cmdlinepart partition parsing not available
NAND device: Manufacturer ID: 0xad, Chip ID: 0xdc (Hynix NAND 512MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 940 at 0x000007580000
Bad eraseblock 2337 at 0x000012420000
Bad eraseblock 3383 at 0x00001a6e0000
cmdlinepart partition parsing not available
Using static partition definition                                               
Creating 2 MTD partitions on "nand_mtd":                                        
0x000000000000-0x000002000000 : "nboot"                                         
0x000002000000-0x000020000000 : "nroot"                                         
mice: PS/2 mouse device common for all mice
md: raid0 personality registered for level 0
md: raid1 personality registered for level 1
md: raid6 personality registered for level 6
md: raid5 personality registered for level 5
md: raid4 personality registered for level 4
device-mapper: ioctl: 4.15.0-ioctl (2009-04-01) initialised: dm-devel@redhat.com
dm_crypt using the OCF package.
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0
rtc mv_rtc: setting system clock to 2020-04-26 15:21:01 UTC (1587914461)
md: Waiting for all devices to be available before autodetect
md: If you don't use raid, use raid=noautodetect
md: Autodetecting RAID arrays.
md: Scanned 0 and added 0 devices.
md: autorun ...
md: ... autorun DONE.
RAMDISK: gzip image found at block 0

U-Boot env

Buffalo Resources