Iomega IConnect - hacking, czyli jak popsuć urządzenie i stracić gwarancję...
Nie będzie to recenzja sprzętu, przynajmniej nie w postaci której można by się spodziewać. W tym wątku zajmiemy się raczej przystosowaniem urządzenia do własnych celów, choć dla porządku należy napisać parę słów o tym produkcie.
Urządzenie to jest obecne na rynku od ponad roku. Ponieważ jest ono całkowicie otwarte, szybko powstały projekty pozwalające na instalacje alternatywnego oprogramowania - w postaci normalnych dystrybucji linuksowych typu Debian lub projektu OpenWrt. Zastosowany uĸład SoC Marvella posiada wiele ciekawych właściwości i jest chętnie stosowany w innych produktach, np. SheevaPlug, PogoPlug, GuruPlug i pochodne czy niektóre urządzenia NAS Synology. Konstrukcja wykorzystana w tym urządzeniu nie wykorzystuje w całości możliwości układu (nie ma np. wyprowadzonego złącza SATA); przeznaczeniem produktu jest bezprzewodowy nośnik danych (tak na marginesie - choć interfejs radiowy mogli by poprawić).
Specyfikacja sprzętowaCPU: Marvell 6281 (ARM - Feroceon 88FR131 rev 1 (v5l)), taktowany 1GHz (*)
Pamięć flash: 512MB (Hynix nand)
Pamięć RAM: 256MB (Hynix DDR2)
Porty USB: 4x USB 2.0 (hub Alcor AU6256)
Ethernet: 1x Lan (Marvell 88E81116R 10/100/1000)
Wi-Fi: 1 x SparkLan WPER-116GN (chip Ralink RT3090) - 1T1R, karta minipcie w złączu, "połówkowa"
LED: 4 x USB (niebieska), Power (czerwona/niebieska), OTB (niebieska)
Przycisk: 1x oznaczony OTB, 1x reset
Inne: jtag, interfejs szeregowy RS232C (TTL), zegar RTC, magistrala I2C
*) w moim przypadku nie było to 1GHz, o czym można przeczytać dalej.
Obudowa urządzenia to obłe, matowe plastikowe pudełko ze złączami umiejscowionymi po przeciwległych stronach (trzy USB z jednej strony oraz USB i RJ45 z drugiej). Zasilane pochodzi z zewnętrznego zasilacza o parametrach 12V 3A (pamiętajmy że możemy dołączyć kilka dysków), o "standardowym" wtyku. Zużycie energii to faktycznie ok 5W, co umieszcza to urządzenie na dobrej pozycji. Należy pamiętać, że zużycie energii wzrośnie po podłączeniu zewnętrznego nośnika.
Urządzenie jest stosunkowo małe i nie ma wewnętrznego dysku. Do tego służą zewnętrzne porty USB, a ich liczba sprawia że można bez problemu dołączyć dysk, kartę WLAN, modem 3G czy coś jeszcze dodatkowego.
Do urządzenia została dołączona także skromna instrukcja podłączenia w kilkunastu językach, m.in. po polsku, czego nie można już powiedzieć o samym oprogramowaniu.
Witryna
http://iomega.com (a właściwie
https://iomega-eu-en.custhelp.com/app/home) przynosi też jeszcze jedną ciekawostkę - po wprowadzeniu w dziale "support" numeru seryjnego urządzenia można się np. dowiedzieć czy jest nadal na niego gwarancja.
Na uwagę zasługuje wykorzystanie w tym urządzeniu kilku elementów nie spotykanych często w normalnych routerach:
- czujnik temperatury LM63
Podłączony jest przez wewnętrzną magistralę I2C. Czujniki temperatury nie są normalnie spotykane w routerach, choć można jest spotkać na płytach urządzeń takich producentów jak jjPlus czy czy PCEngines (Alix). Wadą zastosowanego czujnika jest dość duży rozrzut temperatury, ale to w sumie można skorygować programowo.
- zegar czasu rzeczywistego (RTC) z podtrzymaniem bateryjnym
Niezbędny do dostarczenia aktualnego czasu. O ile brak znaczników czasowych w systemie plików można jeszcze przeżyć, o tyle aktualny czas niezbędny jest zwykle przy certyfikatach i tym samym niektórych operacjach kryptograficznych niezbędnych do utworzenia np. szyfrowanych tuneli między sieciami. Na płytce urządzenia znajduje się bateria podtrzymującą zegar.
- akcelerator kryptograficzny
To zasługa zastosowanego procesora w tym urządzenia. Sprzętowy akcelerator potrafi przyśpieszyć o kilka rzędów wielkości czas niezbędny na wykonywanie operacji kryptograficznych. W praktyce przekłada się to na większą przepustowość np. tuneli korzystających z SSL, bo obliczeniami nie zajmuje się programowo procesor urządzenia a właśnie specjalizowana jednostka. Sprzętowe przyśpieszenie w systemie linux wykorzystają programy korzystające ze specjalnie przygotowanej wersji biblioteki openssl, a więc np. OpenSSH, OpenVPN czy popularne programy typu Transmission.
Zastosowany układ radiowy to konstrukcja SparkLana oparta o układ Ralinka RT3090. Zainstalowany jest w postaci karty minipcie (połowa wielkości) i istnieje możliwość jej wymiany na inną, opartą np. na układzie Atherosa. Oryginalna karta wspiera standard IEEE802.11 b/g/n, niestety jest tylko jedno strumieniowa (1T1R), więc można uzyskać połączenia do maksymalnie 150Mbps (Lite N). Karta fizycznie umiejscowiona jest pod spodem płytki przy samej krawędzi, więc bez wycinania obudowy nie da się umieścić tam karty normalnej wielkości. Antena przymocowana do górnej części obudowy.
Interfejs sieciowy Ethernet to kontroler jednogigabitowy, ale nie wspiera on ramek jumboframe. Dostępny jest tylko jeden fizyczny interfejs RJ45, jeżeli istnieje potrzeba wykorzystania większej liczby interfejsów to trzeba liczyć się z koniecznością wykorzystania zewnętrznego przełącznika lub kart sieciowych na złączu USB.
Oryginalne oprogramowanieSamo oprogramowanie to jest tak naprawdę zmodyfikowany Debian 5.0 - dostępne są źródła pod adresem
https://iomega-eu-en.custhelp.com/app/answers/detail/a_id/22823/related/1, choć trzeba przyznać że Iomega poszła na łatwiznę - są to same źródła programów, bez skryptów budujących itd. Więc nie można z tego zbudować prosto i szybko identycznego oprogramowania jak dostarcza Iomega, ale za to dostępne są np. źródła kernela w odpowiedniej wersji co pozwala na przygotowanie swoich programów.
Oprogramowanie to jest dość przyjazne w użyciu, ale brakuje wiele zaawansowanych możliwości konfiguracji, np sieci bezprzewodowej czy klienta torrent. Mimo ciekawego wyglądu można się trochę zgubić szukając potrzebnych rzeczy. Urządzenie posiada stronę informacyjną prezentującą informacje o wykorzystaniu przestrzeni nośników czy temperaturze urządzenia. Dostępne jest kilka ciekawych funkcji typu opcja przygaszania diod LED czy wysyłanie mejli z powiadomieniami. Jeżeli ktoś chciałby obejrzeć jak wygląda - dostępna jest wersja demo interfejsu pod adresem
http://download.iomega.com/resources/iconnect_en/index.htmlW oprogramowaniu znajdziemy też kilka podstron, o których nie ma linków z gui:
http://ip-urzadzenia/stg-bluetooth.html, stg-ftp.html, stg-iscsi.html, stg-nfs.html, stg-webdav.html. Oprogramowanie jest dość generyczne, odpowiedni konfig określa które elementy mają być widoczne dla użytkownika. Z jakiegoś powodu producent zdecydował że ich nie powinno być.
W środku znajdziemy parę znajomych programów: serwer pocztowy (postfix), serwer smb (samba), dlna (twonkymediaserver), itunes (mt-daapd), timemachine (netatalk) czyli elementy które można znaleźć normalnie w debianie.
Największą zaletą oryginalnego oprogramowania jest... dostęp do ssh. Uaktywniamy go w zakładce
http://ip-urzadzenia/supportaccess.html. Od tego momentu można zalogować się korzystając ze zwykłego klienta ssh, np. putty; jest jednak pewien haczyk - do hasła należy dodać słowo "soho". Więc jeżeli w gui zostało ustawione hasło admin to przez ssh logujemy się hasłem "sohoadmin".
Przy okazji można też "naprawić" jeden z problemów oryginalnego oprogramowania iConnect - brak obsługi dysków ext3/ext4. Do działającego systemu należy dodać i załadować odpowiednie moduły odpowiedzialne za obsługę tego systemu plików. Niestety sprawa jest lekko uciążliwa, ponieważ standardowy katalog gdzie są przechowywane moduły jest tylko-do-odczytu, więc należy posłużyć się innym. Najprościej w tym celu można wybrać katalog /etc i tam umieścić sterowniki.
Na sieci znajdziemy przepis jak takie moduły skompilować, ale można uprościć całą czynność i skorzystać z gotowca: pobieramy trzy pliki (mbcache.ko, jbd.ko, ext3.ko) z katalogu
http://ecco.selfip.net/projekty/iconnect/fs/, kopiujemy je przy pomocy np. programu WinSCP do katalogu /etc. Następnie trzeba w pliku /etc/rc.local dodać następujące linie:
insmod /etc/mbcache.ko
insmod /etc/jbd.ko
insmod /etc/ext3.ko
przed linią z poleceniem "exit 0"! Od tego momentu po restarcie urządzenie będzie obsługiwać dyski w formacie ext3. Plik edytujemy np. edytorem nano (dostępny standardowo) lub vi.
Obsługa ext4 jest trochę bardziej skompilowana, bo wymaga włączenia opcji CONFIG_LBD (obsługa dużych plików), która nie jest w domyślnym kernelu urządzenia włączona.
WydajnośćUSBKrótko:
RE-WE-LA-CJA! Przy tym samym zestawie testowym który stosuje (dla przypomnienia: dysk zewnętrzny 2.5" Samsung w kieszeni noname, zasilanie z jednego usb, system plików ext2), transfer z ftp anonimowego pliku o wielkość 4GB wynosi:
$ wget -O /dev/null ftp://192.168.1.1/samba/shares/USB_Generic_USB_TO_IDE_B_1/00214.MTS
--2011-11-15 18:39:35-- ftp://192.168.1.1/samba/shares/USB_Generic_USB_TO_IDE_B_1/00214.MTS
=> `/dev/null'
Łączenie się z 192.168.1.1:21... połączono.
Logowanie się jako anonymous ... Zalogowano się!
==> SYST ... zrobiono. ==> PWD ... zrobiono.
==> TYPE I ... zrobiono. ==> CWD (1) /samba/shares/USB_Generic_USB_TO_IDE_B_1 ... zrobiono.
==> SIZE 00214.MTS ... 4180525056
==> PASV ... zrobiono. ==> RETR 00214.MTS ... zrobiono.
Długość: 4180525056 (3,9G) (nie autorytatywne)
100%[=======================================================>] 4.180.525.056 27,8M/s w 2m 27s
2011-11-15 18:42:02 (27,2 MB/s) - zapisano `/dev/null' [4180525056]
Wynik:
27.2MB/s (słownie: dwadzieścia siedem). Obawiam się że to granica wydajności mojego dysku i muszę się rozejrzeć za nowym. Bardzo dobra wydajność naprawdę pozwala wykorzystać to urządzenie jako NAS.
ProcesorPrzy takim zegarze procesor powinien okazać się superszybki. Niestety, trzeba pamiętać że to inna architektura (ARM), więc inaczej wygląda też wydajność obliczeniowa.
Poniżej porównanie wydajności Marvella, Ubiquiti RSPro (720MHz) oraz popularnego TP-Link TL-WR1043ND,
mem pi e float
2.2s 8.9s 8.4s 0.1s Iomega IConnect Marvell Feroceon 88FR131 rev 1 (v5l) @800MHz
1.8s 4.8s 4.7s 0.4s Ubiquiti Routerstation Pro Atheros AR7161 rev 2 @720MHz
2.8s 8.1s 8.0s 0.5s TP-Link TL-WR1043ND Atheros AR9132 rev 2 @400MHz
W niektórych przypadkach okazał się więc wolniejszy nawet od TP-Linka!
Tryb diagnostycznyJeżeli przed włączeniem zasilania wciśniemy i przytrzymamy przycisk reset, bootloader wejdzie w specjalny tryb (dioda systemowa będzie w kolorze czerwonym), w którym będzie chciał wczytać z nośnika usb (system plików FAT) dwa pliki o nazwach uImage_nasplug_2.6.30.9_ramdisk oraz uboot.ramfs.gz. Dzięki temu możliwe jest odzyskanie sprzętu w razie awarii oprogramowania.
Przywracanie oryginalnego oprogramowaniaŚciągamy plik
http://download.iomega.com/english/iCon ... 2.5.22.zip. Jego zawartość należy wypakować na pendrive do głównego katalogu. System plików na pendrive musi być FAT. Podłączamy pendrive do urządzenia, naciskamy i trzymamy przycisk reset a następnie podłączamy zasilanie. Nastąpi w tym momencie
- miganie na niebiesko diody Power - uruchamianie urządzenia
- zamiana diody Power na czerwony - wejście w tryb diagnostyczny
- zapalenie się na niebiesko led od USB oraz miganie diody OTB - przywracanie firmware z nośnika
- przestanie migania diody OTB - koniec operacji.
Jeżeli dioda OTB przestanie migać można zrestartować urządzenie - powinno ono posiadać już oryginalne oprogramowanie Iomega.
Poniżej pełna zawartość zmiennych środowiskowych podczas takiego trybu:
baudrate=115200
loads_echo=0
rootpath=/mnt/ARM_FS/
netmask=255.255.255.0
run_diag=yes
console=console=ttyS0,115200 mtdparts=nand_mtd:0xc0000@0(uboot)ro,0x1ff00000@0x100000(root)
CASset=min
MALLOC_len=1
bootargs_root=root=/dev/nfs rw
bootargs_end=:::orion:eth0:none
image_name=uImage
standalone=fsload 0x2000000 $(image_name); setenv bootargs $(console) root=/dev/mtdblock0
rw ip=$(ipaddr):$(serverip)$(bootargs_end) $(mvPhoneConfig); bootm 0x2000000;
ethmtu=1500
eth1addr=00:50:43:xx:xx:xx
eth1mtu=1500
mvPhoneConfig=mv_phone_config=dev0:fxs,dev1:fxs
mvNetConfig=mv_net_config=(00:11:88:xx:xx:xx,0:1:2:3),mtu=1500
usb0Mode=host
yuk_ethaddr=00:00:00:xx:xx:xx
netretry=no
rcvrip=169.254.100.100
loadaddr=0x02000000
autoload=no
iomega=123
nandEcc=1bit
uboot_start=0x0
uboot_size=0xc0000
env_start=0xa0000
env_size=0x20000
kernel_start=0x100000
kernel_size=0x300000
initrd_start=0x540000
initrd_size=0x300000
boot_start=0x980000
boot_size=0x1f400000
flash_load=run make_boot_args load1 load2 boot
krn=run a b c
rd=run d e f
a=tftp 0x2000000 zImage
b=nand erase $(kernel_start) $(kernel_size)
c=nand write.e 0x2000000 $(kernel_start) $(kernel_size)
d=tftp 0x4500000 initrd
e=nand erase $(initrd_start) $(initrd_size)
f=nand write.e 0x4500000 $(initrd_start) $(initrd_size)
flashall=run krn rd
make_boot_args=setenv bootargs console=ttyS0,115200 mtdparts=orion_nand:;
setenv bootargs
$(bootargs)$(uboot_size)@$(uboot_start)(uboot),; setenv bootargs
$(bootargs)$(env_size)@$(env_start)(env),; setenv bootargs
$(bootargs)$(kernel_size)@$(kernel_start)(zImage),; setenv bootargs
$(bootargs)$(initrd_size)@$(initrd_start)(initrd),; setenv bootargs
$(bootargs)$(boot_size)@$(boot_start)(boot)
ethaddr=00:D0:B8:xx:xx:xx
make_bootsetenv=make_boot_args setenv bootargs console=ttyS0,115200 mtdparts=orion_nand:;
setenv bootargs $(bootargs)$(uboot_size)@$(uboot_start)(uboot),; setenv bootargs $(bootargs)$(env_size)@$(env_start)(env),;setenv bootargs $(bootargs)$(kernel_size)@$(kernel_start)(zImage),;setenv bootargs $(bootargs)$(initrd_size)@$(initrd_start)(initrd),;setenv bootargs
boot_starsetenv=boot_start 0x980000
boot_sizesetenv=boot_size 0x1f400000
MAPOWERENV=Ver. 1.1.27 English
stdin=serial
stdout=serial
stderr=serial
enaMonExt=no
enaCpuStream=no
enaWrAllo=no
pexMode=RC
disL2Cache=no
setL2CacheWT=yes
disL2Prefetch=yes
enaICPref=yes
enaDCPref=yes
sata_dma_mode=yes
netbsd_en=no
vxworks_en=no
bootdelay=3
disaMvPnp=no
hddPowerCtrl=no
enaAutoRecovery=yes
pcieTune=no
bootargs=console=ttyS0,115200 ramdisk=32768 mtdparts=orion_nand: 0xc0000@0x0(uboot),0x20000@0xa0000(env), 0x300000@0x100000(zImage),
0x300000@0x540000(initrd),0x1f400000@0x980000(boot)
ethprime=egiga0
ethact=egiga0
serverip=192.168.100.70
ipaddr=192.168.100.71
arcNumber=1682
mainlineLinux=yes
usbstart=usb start
load1=fatload usb 0:1 0x2000000 uImage_nasplug_2.6.30.9_ramdisk 0x300000
load2='fatload usb 0:1 0x2300000 uboot.ramfs.gz 0x300000
boot=bootm 0x2000000 0x2300000
bootcmd=run usbstart load1 load2 boot
Port szeregowyPo rozebraniu urządzenia (cztery wkręty pod gumowymi nóżkami) mamy dostęp do interfejsu szeregowego w standardzie TTL. Producent tym razem poszedł trochę nam na rękę i domyślnie zamontował goldpiny do połączenia. Pamiętajcie, że dostęp do interfejsu szeregowego wymaga rozebrania urządzenia i tym samym powoduje utratę gwarancji. Parametry transmisji standardowe jak w większości urządzeń: 115200 8n1.
Opis pinów (od strony przycisku reset):
1. VCC
2. TX
3. GND
4. RX
Bez ustawionego hasła w gui logujemy się jako root/soho.
Po podłączeniu interfejsu szeregowego odkryły się też pewne ciekawostki:
- mój egzemplarz okazał się być taktowany 800MHz a nie 1GHz!
- pamięć flash zawiera już kilka błędnych sektorów (w sumie 5 bloków po 128KB). Dla pamięci nand jest to normalna sprawa i wynika z jej procesu produkcji; sterowniki, zarówno mtd jak i systemy plików (UBIFS stosowany często dla pamięci nand) są przystosowane do takich sytuacji - same wersyfikują poprawności bloków i nie należy się tymi błędami przejmować.
- płyta przedstawiała się jako Marvell RD-88F6281 Reference Board
Oryginalny bootlog:
__ __ _ _
| \/ | __ _ _ ____ _____| | |
| |\/| |/ _` | '__\ \ / / _ \ | |
| | | | (_| | | \ V / __/ | |
|_| |_|\__,_|_| \_/ \___|_|_|
_ _ ____ _
| | | | | __ ) ___ ___ | |_
| | | |___| _ \ / _ \ / _ \| __|
| |_| |___| |_) | (_) | (_) | |_
\___/ |____/ \___/ \___/ \__|
** MARVELL BOARD: RD-88F6281A LE
U-Boot 1.1.4 (Feb 2 2010 - 10:13:16) Marvell version: 3.4.25
Mapower version: iConnect 2.1 (512MB) (2010/02/02)
U-Boot code: 00600000 -> 0067FFF0 BSS: -> 006CFB00
Soc: 88F6281 A0 (DDR2)
CPU running @ 800Mhz L2 running @ 266Mhz
SysClock = 266Mhz , 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 8M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (8M - 7M): Done
NAND:512 MB
Flash: 0 kB
CPU : Marvell Feroceon (Rev 1)
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 [PRIME], egiga1
Hit any key to stop autoboot: 0
NAND read: device 0 offset 0x100000, size 0x300000
Reading data from 0x3ff800 -- 100% complete.
3145728 bytes read: OK
NAND read: device 0 offset 0x540000, size 0x300000
Reading data from 0x83f800 -- 100% complete.
3145728 bytes read: OK
## Booting image at 02000000 ...
Image Name: Linux-2.6.30.9
Created: 2010-01-25 19:00:21 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1990916 Bytes = 1.9 MB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
OK
## Loading Ramdisk Image at 04500000 ...
Image Name:
Created: 2010-04-28 15:08:25 UTC
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 1774148 Bytes = 1.7 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Starting kernel ...
Uncompressing Linux....................................... done, booting the kernel.
Linux version 2.6.30.9 (soho@bsoho084.lss.emc.com) (gcc version 4.3.2 (crosstool-NG-1.3.1) )
#1 PREEMPT Mon Jan 25 13:57:26 EST 2010
CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977
CPU: VIVT data cache, VIVT instruction cache
Machine: Marvell RD-88F6281 Reference Board
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 65024
Kernel command line: console=ttyS0,115200 mtdparts=orion_nand:0xc0000@0x0(uboot), 0x20000@0xa0000(env), 0x300000@0x100000(zImage),
0x300000@0x540000(initrd),0x1f400000@0x980000(boot)
NR_IRQS:114
PID hash table entries: 1024 (order: 10, 4096 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 256MB = 256MB total
Memory: 253056KB available (3632K code, 901K data, 124K init, 0K highmem)
SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Calibrating delay loop... 794.62 BogoMIPS (lpj=3973120)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 520 bytes
NET: Registered protocol family 16
Kirkwood: MV88F6281-A0, TCLK=200000000.
Feroceon L2: Enabling L2
Feroceon L2: Cache support initialised.
PCI: bus0: Fast back to back transfers disabled
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
cfg80211: Using static regulatory domain info
cfg80211: Regulatory domain: US
(start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
(2402000 KHz - 2472000 KHz @ 40000 KHz), (600 mBi, 2700 mBm)
(5170000 KHz - 5190000 KHz @ 40000 KHz), (600 mBi, 2300 mBm)
(5190000 KHz - 5210000 KHz @ 40000 KHz), (600 mBi, 2300 mBm)
(5210000 KHz - 5230000 KHz @ 40000 KHz), (600 mBi, 2300 mBm)
(5230000 KHz - 5330000 KHz @ 40000 KHz), (600 mBi, 2300 mBm)
(5735000 KHz - 5835000 KHz @ 40000 KHz), (600 mBi, 3000 mBm)
cfg80211: Calling CRDA for country: US
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
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: 1732K
msgmni has been set to 498
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 33) is a 16550A
console [ttyS0] enabled
brd: module loaded
loop: module loaded
Driver 'sd' needs updating - please use bus_type methods
MV-643xx 10/100/1000 ethernet driver version 1.4
mv643xx_eth smi: probed
net eth0: port 0 with MAC address 00:d0:b8:xx:xx:xx
NAND device: Manufacturer ID: 0xad, Chip ID: 0xdc (Hynix NAND 512MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 1453 at 0x00000b5a0000
Bad eraseblock 1455 at 0x00000b5e0000
Bad eraseblock 1457 at 0x00000b620000
Bad eraseblock 3075 at 0x000018060000
Bad eraseblock 3077 at 0x0000180a0000
5 cmdlinepart partitions found on MTD device orion_nand
Creating 5 MTD partitions on "orion_nand":
0x000000000000-0x0000000c0000 : "uboot"
0x0000000a0000-0x0000000c0000 : "env"
0x000000100000-0x000000400000 : "zImage"
0x000000540000-0x000000840000 : "initrd"
0x000000980000-0x00001fd80000 : "boot"
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
orion-ehci orion-ehci.0: Marvell Orion EHCI
orion-ehci orion-ehci.0: new USB bus registered, assigned bus number 1
orion-ehci orion-ehci.0: irq 19, io mem 0xf1050000
orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
uhci_hcd: USB Universal Host Controller Interface driver
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver ums-datafab
usbcore: registered new interface driver ums-freecom
usbcore: registered new interface driver ums-jumpshot
usbcore: registered new interface driver ums-sddr09
usbcore: registered new interface driver ums-sddr55
usbcore: registered new interface driver ums-usbat
mice: PS/2 mouse device common for all mice
input: gpio-keys as /class/input/input0
rtc-mv rtc-mv: rtc core: registered rtc-mv as rtc0
i2c /dev entries driver
Registered led device: led_level
Registered led device: power_blue_led
Registered led device: power_red_led
Registered led device: usb_1_led
Registered led device: usb_2_led
Registered led device: usb_3_led
Registered led device: usb_4_led
Registered led device: otb_led
mv_xor_shared mv_xor_shared.0: Marvell shared XOR driver
mv_xor_shared mv_xor_shared.1: Marvell shared XOR driver
mv_xor mv_xor.0: Marvell XOR: ( xor cpy )
mv_xor mv_xor.1: Marvell XOR: ( xor fill cpy )
mv_xor mv_xor.2: Marvell XOR: ( xor cpy )
mv_xor mv_xor.3: Marvell XOR: ( xor fill cpy )
oprofile: using timer interrupt.
TCP cubic registered
NET: Registered protocol family 17
lib80211: common routines for IEEE802.11 drivers
rtc-mv rtc-mv: setting system clock to 2010-05-13 21:51:56 UTC (1273787516)
RAMDISK: gzip image found at block 0
VFS: Mounted root (ext2 filesystem) on device 1:0.
usb 1-1: new high speed USB device using orion-ehci and address 2
USB Device node is /dev/sda1
Checking if there is an attached EMC Imager
usb 1-1: configuration #1 chosen from 1 choice
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 4 ports detected
mount: mounting /dev/sda1 on /usb_drive failed: No such device or address
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size: 131072 bytes (128 KiB)
UBI: logical eraseblock size: 129024 bytes
UBI: smallest flash I/O unit: 2048
UBI: sub-page size: 512
UBI: VID header offset: 512 (aligned 512)
UBI: data offset: 2048
UBI: attached mtd4 to ubi0
UBI: MTD device name: "boot"
UBI: MTD device size: 500 MiB
UBI: number of good PEBs: 3995
UBI: number of bad PEBs: 5
UBI: max. allowed volumes: 128
UBI: wear-leveling threshold: 4096
UBI: number of internal volumes: 1
UBI: number of user volumes: 1
UBI: available PEBs: 0
UBI: total number of reserved PEBs: 3995
UBI: number of PEBs reserved for bad PEB handling: 39
UBI: max/mean erase counter: 2/1
UBI: background thread "ubi_bgt0d" started, PID 486
UBI device number 0, total 3995 LEBs (515450880 bytes, 491.6 MiB), available 0 LEBs (0 bytes), LEB size 129024 bytes (126.0 KiB)
UBIFS: recovery needed
UBIFS: recovery completed
UBIFS: mounted UBI device 0, volume 0, name "boot"
UBIFS: file system size: 507967488 bytes (496062 KiB, 484 MiB, 3937 LEBs)
UBIFS: journal size: 25417728 bytes (24822 KiB, 24 MiB, 197 LEBs)
UBIFS: media format: w4/r0 (latest is w4/r0)
UBIFS: default compressor: lzo
UBIFS: reserved for root: 4952683 bytes (4836 KiB)
Found Valid EMC Image in disk...
Mounting apps image...
Mounting config image...
Check config filesystem
e2fsck 1.41.3 (12-Oct-2008)
ext2fs_check_if_mount: No such file or directory while determining whether /dev/loop1 is mounted.
Constructing root filesystem...
Bootstrapping ...
rootdir=/
table='/usr/local/cfg/device_table.txt'
makedevs: line 42: chown failed for /bin/busybox: Read-only file system
makedevs: line 49: regular file '/usr/share/udhcpc/default.script' does not exist: No such file or directory
warning: can't open /etc/mtab: No such file or directory
mount: unknown filesystem type 'nfsd'
Loading ufsd...
ufsd: module license 'Commercial product' taints kernel.
Disabling lock debugging due to kernel taint
ufsd: driver 8.1 (013_A) LBD=OFF with ioctl loaded at bf000000
NTFS read/write support included
Hfs+/HfsX read/write support included
Loading isofs...
Loading udf...
Loading msdos...
Loading rt3090sta...
=== pAd = d1512000, size = 478904 ===
<-- RTMPAllocAdapterBlock, Status=0
pAd->CSRBaseAddress =0xd1500000, csr_addr=0xd1500000!
ra0 (): not using net_device_ops yet
Loading usbhid...
usbcore: registered new interface driver hiddev
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
Loading usblp...
usbcore: registered new interface driver usblp
Initialization complete.
Freeing init memory: 124K
INIT: version 2.86 booting
Running file /etc/init.d/rcS
Running file /etc/init.d/rc
Running file /etc/rcS.d/S01glibc.sh
Running file /etc/rcS.d/S02hostname.sh
Running file /etc/rcS.d/S02mountkernfs.sh
Running file /etc/rcS.d/S04mountdevsubfs.sh
Running file /etc/rcS.d/S05bootlogd
Running file /etc/rcS.d/S07hdparm
Setting parameters of disc: (none).
Running file /etc/rcS.d/S08hwclockfirst.sh
Setting the system clock.
Running file /etc/rcS.d/S11hwclock.sh
Setting the system clock.
Running file /etc/rcS.d/S12mtab.sh
mount: according to mtab, tmpfs is already mounted on /lib/init/rw
Running file /etc/rcS.d/S18ifupdown-clean
Cleaning up ifupdown....
Running file /etc/rcS.d/S20module-init-tools
Loading kernel modules...done.
Running file /etc/rcS.d/S30checkfs.sh
Checking file systems...fsck 1.41.3 (12-Oct-2008)
done.
Running file /etc/rcS.d/S30procps
Setting kernel variables (/etc/sysctl.conf)...Running file /etc/rcS.d/S35mountall.sh
Mounting local filesystems...mount: unknown filesystem type 'nfsd'
failed.
Activating swapfile swap...done.
Running file /etc/rcS.d/S36mountall-bootclean.sh
Running file /etc/rcS.d/S37mountoverflowtmp
Running file /etc/rcS.d/S39ifupdown
Setting up networking....
Running file /etc/rcS.d/S40networking
Configuring network interfaces...done.
Running file /etc/rcS.d/S45mountnfs.sh
Running file /etc/rcS.d/S46mountnfs-bootclean.sh
Running file /etc/rcS.d/S55bootmisc.sh
Running file /etc/rcS.d/S55urandom
Running file /etc/rcS.d/S99stop-bootlogd-single
INIT: Entering runlevel: 2
Running file /etc/init.d/rc
Running file /etc/rc2.d/S10rsyslog
Starting enhanced syslogd: rsyslogd.
Running file /etc/rc2.d/S20postfix
Running file /etc/rc2.d/S20smartmontools
Not starting S.M.A.R.T. daemon smartd, disabled via /etc/default/smartmontools (warning).
Running file /etc/rc2.d/S23ntp
Starting NTP server: ntpdStarting Network Interface Plugging Daemon: eth0.
ln: creating symbolic link `/etc/samba/smb.conf': File exists
Starting sshd: OK
hostnamed begin to start...
eth0: link up, 1000 Mb/s, full
hostnamed finished
Starting executord
Done.
Running file /etc/rc2.d/S99rc.local
Running file /etc/rc2.d/S99rmnologin
Running file /etc/rc2.d/S99stop-bootlogd
Running file /etc/init.d/bootlogd
Welcome to CenterPoint.
storage login:
Poniżej klika innych informacji z oryginalnego systemu
root@storage:/# uname -a
Linux storage 2.6.30.9 #1 PREEMPT Mon Jan 25 13:57:26 EST 2010 armv5tel GNU/Linux
root@storage:/# cat /etc/debian_version
5.0.2
root@storage:/# ifconfig
eth0 Link encap:Ethernet HWaddr 00:d0:b8:xx:xx:xx
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:2358 (2.3 KiB)
Interrupt:11
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3268 (3.1 KiB) TX bytes:3268 (3.1 KiB)
root@storage:/# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 50M 1.8M 49M 4% /
/dev/root.old 4.7M 1.9M 2.5M 43% /initrd
none 50M 1.8M 49M 4% /
ubi0:boot 455M 119M 332M 27% /boot
/dev/loop0 266M 266M 0 100% /mnt/apps
/dev/loop1 4.9M 1.4M 3.3M 31% /etc
/dev/loop2 60K 60K 0 100% /oem
tmpfs 125M 0 125M 0% /mnt/apps/lib/init/rw
tmpfs 125M 0 125M 0% /dev/shm
root@storage:/# cat /proc/cpuinfo
Processor : Feroceon 88FR131 rev 1 (v5l)
BogoMIPS : 794.62
Features : swp half thumb fastmult edsp
CPU implementer : 0x56
CPU architecture: 5TE
CPU variant : 0x2
CPU part : 0x131
CPU revision : 1
Hardware : Marvell RD-88F6281 Reference Board
Revision : 0000
Serial : 0000000000000000
root@storage:/# cat /proc/mtd
dev: size erasesize name
mtd0: 000c0000 00020000 "uboot"
mtd1: 00020000 00020000 "env"
mtd2: 00300000 00020000 "zImage"
mtd3: 00300000 00020000 "initrd"
mtd4: 1f400000 00020000 "boot"
root@storage:/# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev debugfs
nodev sockfs
nodev usbfs
nodev pipefs
nodev anon_inodefs
nodev tmpfs
nodev inotifyfs
nodev devpts
ext2
cramfs
nodev ramfs
vfat
nodev cifs
nodev oprofilefs
nodev ubifs
ufsd
iso9660
udf
msdos
root@storage:/# ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 init [2]
2 ? S< 0:00 [kthreadd]
3 ? S< 0:00 [ksoftirqd/0]
4 ? S< 0:00 [watchdog/0]
5 ? S< 0:00 [events/0]
6 ? S< 0:00 [khelper]
9 ? S< 0:00 [async/mgr]
93 ? S< 0:00 [kblockd/0]
106 ? S< 0:00 [khubd]
109 ? S< 0:00 [kseriod]
114 ? S< 0:00 [kmmcd]
140 ? S 0:00 [khungtaskd]
141 ? S 0:00 [pdflush]
142 ? S 0:00 [pdflush]
143 ? S< 0:00 [kswapd0]
188 ? S< 0:00 [aio/0]
194 ? S< 0:00 [cifsoplockd]
195 ? S< 0:00 [crypto/0]
376 ? S< 0:00 [mtdblockd]
398 ? S< 0:00 [orion_spi]
486 ? S< 0:00 [ubi_bgt0d]
488 ? S< 0:00 [ubifs_bgt0_0]
493 ? S< 0:06 [loop0]
496 ? S< 0:00 [loop1]
507 ? S< 0:00 [loop2]
618 ? S< 0:00 [usbhid_resumer]
818 ? Ss 0:00 logsave -s /var/log/fsck/checkfs fsck -C -R -A -a
934 ? Sl 0:00 /usr/sbin/rsyslogd -c3 -f /etc/rsyslog.conf
960 ? S 0:00 /usr/sbin/ifplugd -i eth0 -fwI -u0 -d1
1008 ? Ss 0:00 /usr/sbin/mdnsd
1010 ? Ss 0:00 /bin/hostnamed
1012 ? S 0:00 /sbin/executord -c /etc/sohoConfig.xml
1024 ttyS0 Ss 0:00 /bin/login --
1037 ? S 0:00 /usr/bin/dbus-daemon --nofork --system
1059 ttyS0 R 0:00 -sh
1062 ? Sl 0:00 /usr/local/wifi wifi
1104 ? Ss 0:00 dhclient3 -pf /var/run/dhclient.eth0.pid -lf /var/lib
1134 ? Sl 0:00 /usr/sbin/upnpd -webdir /etc/upnpd/web
1136 ? S 0:00 /usr/sbin/mdnsd -debug
1137 ? S<l 1:13 /usr/sbin/appweb -r /usr/local/appweb -f appweb.conf
1139 ? S 0:00 /bin/sh /usr/bin/flushlogs
1156 ? S 0:00 /usr/local/winRally/lld2d eth0
1159 ? S 0:00 /usr/local/winRally/lld2d ra0
1160 ? S 0:00 /bin/sh /usr/bin/chklease.sh
1162 ? S 0:02 /bin/sh /usr/bin/sohoAudit
1163 ? Sl 0:00 /usr/local/protomgrd protomgrd
1203 ? SN 0:00 /usr/sbin/discoverd
1227 ? Sl 0:00 /usr/local/datamover datamover
1373 ? Sl 0:00 /usr/local/connectd connectd
1394 ? Sl 0:00 /usr/local/quiktransfer quiktransfer
1597 ? Ss 0:00 /usr/lib/postfix/master
1598 ? S 0:00 qmgr -l -t fifo -u
1676 ? Sl 0:00 /usr/local/rad rad
5910 ? Ss 0:00 /usr/local/samba/sbin/nmbd -F
5912 ? Ss 0:00 /usr/local/samba/sbin/smbd -F
5913 ? S 0:00 /usr/local/samba/sbin/smbd -F
5914 ? S 0:00 /usr/sbin/cupsd -f
6655 ? Sl 0:00 /usr/local/twonky/twonkymediaserver -inifile /mnt/soh
6854 ? SNl 0:00 /usr/local/thumbnails thumbnails
6856 ? Sl 0:00 /usr/local/mt-daapd/bin/mt-daapd -f -d 9 -m -c /mnt/s
11231 ? S 0:00 /usr/local/sbin/wpa_supplicant -Dralink -ira0 -c /tmp
11445 ? Ss 0:00 /sbin/dhclient3 -nw -pf /var/run/dhclient.ra0.pid -lf
11717 ? Sl 0:00 /usr/local/displayd displayd
12061 ? S 0:00 sleep 5m
12784 ? S 0:00 sleep 60
12795 ? S 0:00 sleep 10
12796 ttyS0 R+ 0:00 ps ax
Pełna wersja środowiska bootloadera podczas normalnej pracy:
baudrate=115200
loads_echo=0
rootpath=/mnt/ARM_FS/
netmask=255.255.255.0
usbstart=usb start
run_diag=yes
console=console=ttyS0,115200 mtdparts=nand_mtd:0xc0000@0(uboot)ro,0x1ff00000@0x100000(root)
CASset=min
MALLOC_len=1
bootargs_root=root=/dev/nfs rw
bootargs_end=:::orion:eth0:none
image_name=uImage
standalone=fsload 0x2000000 $(image_name);setenv bootargs $(console) root=/dev/mtdblock0
rw ip=$(ipaddr):$(serverip)$(bootargs_end) $(mvPhoneConfig); bootm 0x2000000;
ethmtu=1500
eth1addr=00:50:43:xx:xx:xx
eth1mtu=1500
mvPhoneConfig=mv_phone_config=dev0:fxs,dev1:fxs
mvNetConfig=mv_net_config=(00:11:88:xx:xx:xx,0:1:2:3),mtu=1500
usb0Mode=host
yuk_ethaddr=00:00:00:xx:xx:xx
netretry=no
rcvrip=169.254.100.100
loadaddr=0x02000000
autoload=no
iomega=123
nandEcc=1bit
ethprime=egiga0
ethact=egiga0
ipaddr=192.168.100.97
serverip=192.168.100.91
arcNumber=1682
uboot_start=0x0
uboot_size=0xc0000
env_start=0xa0000
env_size=0x20000
kernel_start=0x100000
kernel_size=0x300000
initrd_start=0x540000
initrd_size=0x300000
boot_start=0x980000
boot_size=0x1f400000
bootcmd=run flash_load
flash_load=run make_boot_args load1 load2 boot
load1=nand read.e 0x2000000 $(kernel_start) $(kernel_size)
load2=nand read.e 0x4500000 $(initrd_start) $(initrd_size)
boot=bootm 0x2000000 0x4500000
krn=run a b c
rd=run d e f
a=tftp 0x2000000 zImage
b=nand erase $(kernel_start) $(kernel_size)
c=nand write.e 0x2000000 $(kernel_start) $(kernel_size)
d=tftp 0x4500000 initrd
e=nand erase $(initrd_start) $(initrd_size)
f=nand write.e 0x4500000 $(initrd_start) $(initrd_size)
flashall=run krn rd
make_boot_args=setenv bootargs console=ttyS0,115200 mtdparts=orion_nand:;setenv
bootargs $(bootargs)$(uboot_size)@$(uboot_start)(uboot),;setenv bootargs $(bootargs)$(env_size)@$(env_start)(env),;setenv bootargs
$(bootargs)$(kernel_size)@$(kernel_start)(zImage),;setenv bootargs
$(bootargs)$(initrd_size)@$(initrd_start)(initrd),;setenv bootargs
$(bootargs)$(boot_size)@$(boot_start)(boot)
ethaddr=00:D0:B8:xx:xx:xx
make_bootsetenv=make_boot_args setenv bootargs console=ttyS0,115200 mtdparts=orion_nand:;
setenv bootargs $(bootargs)$(uboot_size)@$(uboot_start)(uboot),; setenv bootargs
$(bootargs)$(env_size)@$(env_start)(env),; setenv bootargs
$(bootargs)$(kernel_size)@$(kernel_start)(zImage),; setenv bootargs
$(bootargs)$(initrd_size)@$(initrd_start)(initrd),; setenv bootargs
bootargs=setenv bootargs console=ttyS0,115200
boot_starsetenv=boot_start 0x980000
boot_sizesetenv=boot_size 0x1f400000
MAPOWERENV=Ver. 1.1.27 English
stdin=serial
stdout=serial
stderr=serial
mainlineLinux=yes
enaMonExt=no
enaCpuStream=no
enaWrAllo=no
pexMode=RC
disL2Cache=no
setL2CacheWT=yes
disL2Prefetch=yes
enaICPref=yes
enaDCPref=yes
sata_dma_mode=yes
netbsd_en=no
vxworks_en=no
bootdelay=3
disaMvPnp=no
hddPowerCtrl=no
enaAutoRecovery=yes
pcieTune=no
Druga część artykułu dotycząca instalacji Debiana znajduje się w wątku
viewtopic.php?f=39&t=1223Trzecia część artykułu dotycząca instalacji OpenWrt znajduje się w wątku
viewtopic.php?f=39&t=1231Czwarta część artykułu dotycząca instalacji ArchLinuxa znajduje się w wątku
viewtopic.php?f=39&t=1232