meta data for this page
  •  

This is an old revision of the document!


References

Serial converter

3,3V level converter 115200 8N1

1 2 3 4 5
Vcc RX TX nc GND
         __  __                      _ _
        |  \/  | __ _ _ ____   _____| | |
        | |\/| |/ _` | '__\ \ / / _ \ | |
        | |  | | (_| | |   \ V /  __/ | |
        |_|  |_|\__,_|_|    \_/ \___|_|_|
 _   _     ____              _
| | | |   | __ )  ___   ___ | |_
| | | |___|  _ \ / _ \ / _ \| __|
| |_| |___| |_) | (_) | (_) | |_
 \___/    |____/ \___/ \___/ \__|
 ** MARVELL BOARD: RD-88F6281A LE

U-Boot 1.1.4 (Jun  8 2011 - 18:48:37) Marvell version: 3.4.19

U-Boot code: 00600000 -> 0067FFF0  BSS: -> 006CFEE0

Soc: 88F6281 A1 (DDR2)
CPU running @ 1200Mhz L2 running @ 400Mhz
SysClock = 400Mhz , TClock = 200Mhz

DRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6
DRAM CS[0] base 0x00000000   size 256MB
DRAM Total size 256MB  16bit width
Addresses 10M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (10M - 7M): Done
NAND:128 MB
Flash:  0 kB

CPU : Marvell Feroceon (Rev 1)
Kernel address is 0x4640000.

Streaming disabled
Write allocate disabled

Module 0 is RGMII
Module 1 is TDM

USB 0: host mode
PEX 0: PCI Express Root Complex Interface
PEX interface detected Link X1
Net:   egiga0, egiga1 [PRIME]
Hit any key to stop autoboot:  0

Preparation

First install Debian 6 (squeeze). Put on FAT formatted pendrive: initrd.gz uImage-3.2 uImage-3.5.1

then boot from pendrive (one time, without saving it permanently to u-boot environment) Machine type is 4022

    setenv arcNumber 4022
    setenv mainlineLinux yes
    usb start
    fatload usb 0 0x800000 /uImage-3.2
    fatload usb 0 0xb00000 /initrd.gz
    setenv bootargs 'console=ttyS0,115200 root=/dev/ram initrd=0xb00000,0x900000 ramdisk=32768'
    bootm 0x800000

and install Debian 6 system as usual. Installer will complain about no matching modules and no matching kernel. During installation, create small /boot ext3 partition for kernels.

To boot from HDD, copy uImage-3.2 from pendrive to HDD /boot partition and set u-boot:

From u-boot console, test partitions readability:

ide reset
ide part
ext2ls ide 0:1
ext2ls ide 0:3

In my example I got following partitions numbers:

Partition Map for IDE device 0  --   Partition Type: DOS

Partition     Start Sector     Num Sectors     Type
    1               309248        19222528      83
    2             19533822       957237250       5 Extd
    3                 2048          307200      83

Where 3rd partition is small /boot partition, so we need to load kernel from 'ide 0:3'

    setenv arcNumber 4022
    setenv mainlineLinux yes
    setenv bootargs 'console=ttyS0,115200 root=/dev/sda1' 
    setenv bootcmd 'ide reset; ext2load ide 0:3 0x800000 /uImage-3.2; bootm 0x800000'
    saveenv
    reset

or 3.5.1 kernel:

    setenv bootcmd 'ide reset; ext2load ide 0:3 0x800000 /uImage-3.5.1; bootm 0x800000'

Update to Debian Wheezy

Put following sources into /etc/apt/sources.list

###### Debian Main Repos
deb http://ftp.pl.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.pl.debian.org/debian/ wheezy main contrib non-free

###### Debian Update Repos
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb http://ftp.pl.debian.org/debian/ wheezy-proposed-updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://ftp.pl.debian.org/debian/ wheezy-proposed-updates main contrib non-free
apt-get update
apt-get dist-upgrade

apt-get install linux-base firmware-realtek
apt-get clean

Fine tunning

Install missing packages:

apt-get install uboot-envtools smartmontools strace watchdog hdparm

Generate blank modules.dep

mkdir /lib/modules/3.5.1
depmod -a

LEDs

To turn ON System LED (disable blinking) please add line to /etc/rc.local:

echo 1 > /sys/class/leds/nsa310:green:System/brightness

uboot-envtools

Create /etc/fw_env.config with content:

/dev/mtd1               0x0000          0x20000         0x20000                 4

MAC address

After bootup, ethernet controller has MAC address '00:00:00:00:00:30'. There are several method to restore correct MAC address which can be obtained from u-boot env: 1) add to /etc/rc.local

ifdown eth0
/sbin/ifconfig eth0 hw ether `fw_printenv -n ethaddr`
ifup eth0

or

/sbin/ip link set eth0 address `/usr/bin/fw_printenv ethaddr | /bin/grep -E -o '[[:xdigit:]]{2}(:[[:xdigit:]]{2}){5}'`

2) add line to /etc/network/interfaces

hwaddress ether cc:5d:4e:c9:fc:06

3) Edit and set MAC here: /etc/udev/rules.d/70-persistent-net.rules

Wake-on-lan will work only with fake MAC '00:00:00:00:00:30'

Fix for alloc kernel panic

Add these lines in /etc/sysctl.conf:

# Set VM min memory
vm.min_free_kbytes=8192

Buttons

Ref: http://masu.6f.sk/index.php?title=Nsa310_buttons Button works, but requires long pressing > 1sec.

Fan

Detect PWM devices and calibrate fan RPMs using 'pwmconfig'. After many questions an tests the config file /etc/fancontrol will be generated.

# Configuration file generated by pwmconfig, changes will be lost
INTERVAL=10
DEVPATH=hwmon0=devices/platform/mv64xxx_i2c.0/i2c-0/0-002e
DEVNAME=hwmon0=lm85
FCTEMPS=hwmon0/device/pwm1=hwmon0/device/temp3_input
FCFANS= hwmon0/device/pwm1=hwmon0/device/fan1_input
MINTEMP=hwmon0/device/pwm1=35
MAXTEMP=hwmon0/device/pwm1=60
MINSTART=hwmon0/device/pwm1=16
MINSTOP=hwmon0/device/pwm1=16
MINPWM=hwmon0/device/pwm1=0

Encrypted partition

apt-get install cryptsetup-bin

Enable HW acceleration. Which is a bit slower than software :P

modprobe mv_cesa
cat /proc/crypto | grep mv_cesa -B 2 -A 7

Is providing only:

  1. hmac(sha1)
  2. sha1
  3. cbc(aes)
  4. ecb(aes)

There are also additional kernel modules optimised for ARM:

  1. sha1_arm
  2. aes_arm
cryptsetup benchmark
Algorithm Key Encryption Decryption accel
aes-cbc 128b 12.8 MiB/s 13.4 MiB/s
13.4 MiB/s 14.1 MiB/s arm
19.7 MiB/s 20.2 MiB/s mv_cesa
serpent-cbc 128b 11.1 MiB/s 11.6 MiB/s
twofish-cbc 128b 13.0 MiB/s 13.4 MiB/s
aes-cbc 256b 10.1 MiB/s 10.5 MiB/s
11.0 MiB/s 11.4 MiB/s arm
18.9 MiB/s 19.2 MiB/s mv_cesa
serpent-cbc 256b 11.1 MiB/s 11.6 MiB/s
twofish-cbc 256b 13.0 MiB/s 13.4 MiB/s
aes-xts 256b 13.1 MiB/s 13.3 MiB/s
14.6 MiB/s 14.7 MiB/s arm
serpent-xts 256b 11.5 MiB/s 11.6 MiB/s
twofish-xts 256b 13.4 MiB/s 13.2 MiB/s
aes-xts 512b 10.2 MiB/s 10.4 MiB/s
11.4 MiB/s 11.8 MiB/s arm
serpent-xts 512b 11.5 MiB/s 11.6 MiB/s
twofish-xts 512b 13.4 MiB/s 13.2 MiB/s

Ciphers benchmark

Each cipher was tested with following steps:

  • luksFormat /dev/sda5
  • luksOpen /dev/sda5 sda5
  • benchmarks described in table below on /dev/mapper/sda5
  • create ext4fs on /dev/mapper/sda5
  • the same benchmarks but on mounted ext4 (writing/reading from file).
test command line description
hdparm hdparm -t /dev/… Buffered read test
WR dd bs=16M count=128 Normal buffered transfer, but with sync before exit
WR S
WR DS
RD

REMARKS:

  1. For XTS, only half of key is used, so for 128b cipher I need to specify -s 256.
  2. Ext4 by default was created with lazy_init, to speed up creation process, but it can make impact on tests.
  3. Before each test, flush by sync && echo 3 > …/drop_caches was issued.
128b key
Block device EXT4
acc hdparm WR WR S WR DS RD WR WR S WR DS RD
cbc-plain HW 8.82 7.0 6.1 7.3 9.2 8.0 5.5 5.8 9.3
SW 11.80 8.2 7.4 8.7 12.40 9.5 6.2 6.4 12.40
ARM 12.76 8.9 7.2 9.2 13.60 10.2 6.4 6.4 13.60 *
cbc-plain64 HW 8.79 6.9 6.1 7.5 9.2 7.9 5.3 5.6 9.0
SW 11.83 8.2 7.4 9.2 12.40 9.5 6.2 6.6 12.40
ARM 12.73 8.9 7.2 9.3 13.60 10.2 6.2 6.1 13.60 *
cbc-essiv :sha256 HW 7.7 6.2 5.5 6.9 8.1 7.2 5.2 5.2 8.1
SW 9.7 7.8 6.9 8.7 11.40 9.1 6.2 6.5 11.40
ARM 12.36 8.7 7.0 9.1 13.20 9.9 6.3 6.2 13.20 *
xts-plain SW 11.29 8.2 7.4 8.7 11.80 9.5 6.1 6.5 11.90
ARM 12.79 9.3 7.5 10.1 13.60 10.6 6.3 5.9 13.70 *
xts-plain64 SW 11.27 8.2 7.4 8.7 11.80 9.5 6.2 6.5 11.70
ARM 12.84 9.3 7.5 10.2 13.70 10.6 6.4 6.1 13.70 *
xts-essiv :sha256 SW 10.30 7.9 7.2 8.7 11.10 9.1 6.1 6.5 11.10
ARM 12.40 9.1 7.5 9.3 13.20 10.4 6.3 6.1 13.30 *
256b key
Block device EXT4
acc hdparm WR WR S WR DS RD WR WR S WR DS RD
cbc-plain HW 8.43 6.7 6.1 7.5 8.9 7.7 5.5 5.7 8.9
SW 9.17 6.7 6.1 7.4 9.6 7.7 5.5 5.8 9.6
ARM 10.32 7.6 6.3 7.9 10.80 8.5 5.5 6.0 10.80 *
cbc-plain64 HW 8.44 6.7 6.1 7.5 8.9 7.7 5.5 5.7 8.8
SW 9.15 6.8 6.1 7.5 9.5 7.6 5.5 5.8 9.7
ARM 10.24 7.6 6.2 7.8 10.70 8.4 5.1 5.5 10.00 *
cbc-essiv :sha256 HW 7.47 6.0 5.5 6.5 7.8 6.9 5.0 5.2 7.8
SW 8.59 6.7 6.1 7.5 9.0 7.5 5.3 5.5 8.9
ARM 9.83 7.5 6.2 7.9 10.50 8.3 5.5 5.7 10.60 *
xts-plain SW 8.70 6.8 6.1 7.5 9.1 7.6 5.5 5.6 9.2
ARM 10.09 7.9 6.6 8.5 10.7 8.8 5.2 5.6 10.80 *
xts-plain64 SW 8.70 6.8 6.1 7.5 9.2 7.6 5.5 5.6 9.2
ARM 10.14 7.9 6.6 8.4 10.80 8.8 5.4 5.7 10.80 *
xts-essiv :sha256 SW 8.37 6.7 6.1 7.0 8.8 7.3 5.1 5.4 8.4
ARM 9.94 7.7 6.3 7.9 10.40 8.5 4.9 5.2 9.7
without encryption
Block device EXT4
acc hdparm WR WR S WR DS RD WR WR S WR DS RD
/dev/sda5 137 91 33.7 51.7 149 69 13 15 149

file copy benchmark

Copy using dd if=src_file of=dst_file conv=fsync

“It will synchronize output data and metadata just before finishing”

128b key
acc WR S RD
aes-cbc-plain64 HW 5.8 8.1
SW 6.4 10.60
ARM 6.8 12.00 *
twofish-cbc-plain64 SW 6.5 10.60
aes-cbc-essiv:sha256 HW 5.4 7.1
SW 6.3 10.30
ARM 6.6 11.10
twofish-cbc-essiv:sha256 SW 6.5 10.70
aes-xts-plain64 SW 6.4 10.20
ARM 7.0 12.10 *
twofish-xts-plain64 SW 6.6 11.00
twofish-xts-essiv:sha256 SW 6.4 10.50
256b key
acc WR S RD
aes-cbc-plain64 HW 5.8 8.3
SW 5.5 8.4
ARM 5.9 9.5 *
twofish-cbc-plain64 SW 6.6 11.00 *
aes-cbc-essiv:sha256 HW 5.5 7.3
SW 5.4 8.0
ARM 5.9 9.6 *
twofish-cbc-essiv:sha256 SW 6.5 10.70 *
aes-xts-plain64 SW 5.5 8.2
ARM 6.1 9.4 *
twofish-xts-plain64 SW 6.6 10.90 *
twofish-xts-essiv:sha256 SW 6.3 10.10 *

loaded CPU benchmark

Comparison SW & HW with loaded system

stress -v -c 1
Block device EXT4
acc hdparm WR WR S WR DS RD WR WR S WR DS RD
cbc-plain-128 HW 4.71 3.9 3.6 3.8 4.9 4.1 3.2 3.4 4.9
SW 6.13 4.4 3.9 5.3 6.5 5.0 4.0 4.0 6.4
ARM 6.64 4.8 4.2 5.4 7.0 5.3 4.0 4.2 7.0 *
cbc-plain-256 HW 4.68 3.8 3.4 3.9 4.9 4.0 3.2 3.2 4.9
SW 4.73 3.6 3.4 4.0 5.0 4.0 3.2 3.3 5.0
ARM 5.31 4.1 3.6 4.4 5.6 4.4 3.4 3.6 5.6

Twofish cipher

(SW only)

Block device EXT4
key hdparm WR WR S WR DS RD WR WR S WR DS RD
cbc-plain 128 11.80 8.4 7.4 9.5 12.4 9.6 6.0 6.1 11.5
cbc-essiv:sha256 128 11.35 8.2 7.4 8.7 11.9 9.5 6.2 6.5 11.9
xts-plain 128 11.61 8.4 7.4 9.4 12.2 9.5 6.2 6.6 12.3
xts-essiv:sha256 128 11.06 8.0 7.4 8.7 11.6 9.1 6.2 6.5 11.7
cbc-plain 256 11.82 8.4 7.4 9.5 12.4 9.7 6.5 6.6 12.4
cbc-essiv:sha256 256 11.34 8.2 7.4 8.7 11.9 9.5 6.2 6.6 12.0
xts-plain 256 11.64 8.4 7.4 9.4 12.2 9.6 6.2 6.6 12.3
xts-essiv:sha256 256 11.04 8.0 7.4 8.7 11.6 9.3 6.2 6.5 11.7


~~COMPLEX_TABLES~~

Features

  • LM-Sensors are working. You can check values using command 'sensors'
  • HDD temperature: smartctl -A /dev/sda | awk '/^194/ {print $10}'
  • Should be possible to wake NSA310 (powered off by 'halt' command) sending Wake-On-Lan packet to NSA310 'wakeonlan 00:00:00:00:00:30'

Own kernel

here's no need to keep pestering the poor guy over simple config changes. It's easy to build your own kernel; the instructions are right there in the first post. On a debian host you need to add the emdebian repo and install gcc-4.7-arm-linux-gnueabi (or whatever version) and u-boot-tools to build the kernel.

I just built one with device mapper and crypto target support, and threw in netfilter NAT stuff for giggles.

Here it is: http://allurgroceries.com/nsa310/uImage-3.5.7 And the .config: http://allurgroceries.com/nsa310/config-3.5.7_nsa310_allurgroceries

Kernel 3.18

Download lastest Jessie rootfs from: Linux Kernel 3.18 (FDT) and 3.16 (non-FDT) Kirkwood package and rootfs

Or locally: linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2 debian-3.18.5-kirkwood-tld-1-rootfs-bodhi.tar.bz2

Unpack rootfs to media, can be USB pendrive for now.

cd /mnt/sdd1
tar -xjf Debian-3.18.5-kirkwood-tld-1-rootfs-bodhi.tar.bz2

Inside rootfs, there is /boot directory which contains bootable kernel, initrd and deveice trees. Go to newly unpacked roots directory and create images recognizable by u-boot. If command mkimage is missing, please install u-boot-tools.

Boot without Flattened Device Tree

This method is supported by old (stock) U-BOOT. In this case FDT structure is appended at end of kernel.

cd /boot
cp -a zImage-3.18.5-kirkwood-tld-1 zImage.fdt
cat dts/kirkwood-nsa310.dtb>> zImage.fdt

mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Linux-3.18.5-kirkwood-tld-1 -d ./zImage.fdt ./uImage-3.18.5
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs-3.18.5-kirkwood-tld-1 -d ./initrd.img-3.18.5-kirkwood-tld-1 ./uInitrd-3.18.5

Test if kernel starts correctly from pendrive:

    usb start
    fatload usb 0 0x800000 /boot/uImage-3.18.5
    fatload usb 0 0x1100000 /boot/uInitrd-3.18.5
    bootm 0x800000 0x1100000

Boot from HDD (separate small /boot partition, so no /boot prefix in filenames):

    ide reset
    ext2load ide 0:3 0x800000 /uImage-3.18.5
    ext2load ide 0:3 0x1100000 /uInitrd-3.18.5
    bootm 0x800000 0x1100000

Boot with Flattened Device Tree

NOT SUPPORTED BY OLD (default U-BOOT

cd boot
mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n Linux-3.18.5-kirkwood-tld-1 -d ./vmlinuz-3.18.5-kirkwood-tld-1 ./uImage-3.18.5
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs-3.18.5-kirkwood-tld-1 -d ./initrd.img-3.18.5-kirkwood-tld-1 ./uInitrd-3.18.5

Test if kernel starts correctly from pendrive:

    usb start
    fatload usb 0 0x800000 /boot/uImage
    fatload usb 0 0x1100000 /boot/uInitrd
    fatload usb 0 0x1c00000 /boot/dts/kirkwood-nsa310.dtb
    bootm 0x800000 0x1100000 0x1c00000

Boot from HDD (separate small /boot partition, so no /boot prefix in filenames):

    ide reset
    ext2load ide 0:3 0x800000 /uImage-3.18.5
    ext2load ide 0:3 0x1100000 /uInitrd-3.18.5
    ext2load ide 0:3 0x1c00000 /dts/kirkwood-nsa310.dtb
    bootm 0x800000 0x1100000 0x1c00000

Adapt own devie tree file

There are multiple HW versions of NSA310 on market, but only 2 device tree are defined in kernel:

  1. kirkwood-nsa310.dtb - all LEDs are bicolor (red and green), sensors device 'adt7476' on I2C bus
  2. kirkwood-nsa310a.dtb - like above but without red USB led, and sensor device 'lm85'

My NSA310 version is like nsa310 but with lm85 :), so I've created kirkwood-nsa310b.dts based on kirkwood-nsa310.dts with LM85 section from kirkwood-nsa310a.dts.

apt-get install emdebian-archive-keyring

Debian Jessie

Above rootfs contains Jessie system for NSA325. To use it with NSA310 some changes are needed.

apt source

Adapt to your country location in /etc/apt/sources.list, and add missing contrib and non-free packages

apt-get update
apt-get dist-upgrade
apt-get install firmware-realtek fancontrol lm-sensors

RAM disk will be regenerated, so you need to recreate uInitrd-xxx again.

Enable LEDs

Adapt /etc/rc.local to own needs:

if [ -d /sys/class/leds/nsa310:green:sys ]; then
   echo default-on> /sys/class/leds/nsa310:green:sys/trigger
   echo none      > /sys/class/leds/nsa310:red:sys/trigger
fi

if [ -d /sys/class/leds/nsa310:green:hdd ]; then
   echo ide-disk1> /sys/class/leds/nsa310:green:hdd/trigger
fi

if [ -d /sys/class/leds/nsa310:green:esata ]; then
   echo ide-disk2> /sys/class/leds/nsa310:green:esata/trigger
fi

if [ -d /sys/class/leds/nsa310:green:usb ]; then
   echo usb-host> /sys/class/leds/nsa310\:green\:usb/trigger
fi
turn off HDD when idle
  • by default busybox-syslogd is installed, with logging to RAM
  • mount working dir for samba and dhcp client as tmpfs
  • switch Samba to use syslog
  • tune system /etc/sysctl.conf
repair /etc/adjtime

add new line at end of /etc/adjtime

uboot-envtools

/etc/fw_env.config

/dev/mtd0               0x100000        0x20000         0x20000                 4

TODO

linux-headers-3.2.0-4-kirkwood - Header files for Linux 3.2.0-4-kirkwood linux-image-3.2.0-4-kirkwood - Linux 3.2 for Marvell Kirkwood linux-headers-2.6-kirkwood - Header files for Linux kirkwood configuration (dummy package) linux-headers-kirkwood - Header files for Linux kirkwood configuration (meta-package) linux-image-2.6-kirkwood - Linux for Marvell Kirkwood (dummy package) linux-image-kirkwood - Linux for Marvell Kirkwood (meta-package)