Terastation TS-WXL
Specs
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
Pictures
DMESG output
Starting kernel ... Uncompressing Linux.................................................................................................................... Linux version 2.6.31.8-mv78100 (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. NR_IRQS:96 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 cesadev_init(8000fdc8) 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