====== Debian ======
====== References ======
OpenWRT packages: [[http://bartekk.pdg.pl/openwrt/]]
[[http://forum.nas-central.org/viewtopic.php?f=249&t=5145]]
[[http://eko.one.pl/?p=openwrt-nsa310]]
[[https://sites.google.com/site/realblades/misc/debian-on-zyxel-nsa310]]
[[http://linuxwiki.de/ZYXEL%20NSA-310#Debian_Installation]]
[[http://openrouter.info/forum/viewtopic.php?f=19&t=1581&start=80]]
====== Preparation =====
First install Debian 6 (squeeze).
Put on FAT formatted pendrive:
[[http://www.scintilla.utwente.nl/~petero/nsa310/initrd.gz|initrd.gz]]
[[http://www.scintilla.utwente.nl/~petero/nsa310/uImage-3.2|uImage-3.2]]
[[http://www.scintilla.utwente.nl/~petero/nsa310/uImage-3.5.1|uImage-3.5.1]]
then boot from pendrive (one time, without saving it permanently to u-boot environment)
Machine type is [[http://www.arm.linux.org.uk/developer/machines/list.php?id=4022|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
====== 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 ======
There'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: [[http://forum.doozan.com/read.php?2,12096|Linux Kernel 3.18 (FDT) and 3.16 (non-FDT) Kirkwood package and rootfs]]
Or locally: {{hw:nsa310:linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2|linux-3.18.5-kirkwood-tld-1-bodhi.tar.bz2}} {{hw:nsa310:debian-3.18.5-kirkwood-tld-1-rootfs-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:
- kirkwood-nsa310.dtb - all LEDs are bicolor (red and green), sensors device 'adt7476' on I2C bus
- 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 {{hw:nsa310:kirkwood-nsa310b.dts|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
* ''smartd'' from ''smartmontools'' writes it log and state to ''/var/lib/smartmontools''
* put it on tmpfs (and lose history)
* or increase disc check interval in ''/etc/default/smartmontools''
== 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)