abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 15:00 | Nová verze

Byla vydána verze 3.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí HTML, CSS a JavaScriptu Electron (YouTube, GitHub). Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

Ladislav Hagara | Komentářů: 0
dnes 14:44 | Nová verze

Po půl roce vývoje od vydání verze 6.0.0 byla vydána verze 7.0.0 překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, clang-tools-extra a LLD.

Ladislav Hagara | Komentářů: 0
dnes 13:44 | Nová verze

Byla vydána verze 3.0.0 knihovny pro vykreslování grafů v programovacím jazyce Python Matplotlib (Wikipedie, GitHub). Přehled novinek a galerie grafů na stránkách projektu. Zrušena byla podpora Pythonu 2.

Ladislav Hagara | Komentářů: 0
dnes 00:22 | Komunita

V Norimberku probíhá do pátku ownCloud conference 2018, tj. konference vývojářů a uživatelů open source systému ownCloud (Wikipedie) umožňujícího provoz vlastního cloudového úložiště. Přednášky lze sledovat online. Videozáznamy jsou k dispozici na YouTube. Při této příležitosti byl vydán ownCloud Server 10.0.10. Z novinek lze zdůraznit podporu PHP 7.2. Vydán byl také ownCloud Desktop Client 2.5.0. Vyzkoušet lze online demo ownCloudu.

Ladislav Hagara | Komentářů: 1
dnes 00:11 | Pozvánky

Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.

xkucf03 | Komentářů: 0
včera 16:11 | Komunita

Vývojáři relačního databázového systému PostgreSQL oznámili, že schválili svůj Code of Conduct (CoC) aneb kodex chování vývojářů PostgreSQL.

Ladislav Hagara | Komentářů: 16
včera 14:44 | Nová verze

Byla vydána verze 1.0 poštovního serveru Courier (Wikipedie). Aktualizovány byly také související balíčky jako Courier authentication library, Courier-IMAP, SqWebMail, maildrop nebo Cone.

Ladislav Hagara | Komentářů: 0
včera 02:22 | Zajímavý software

Společnost ​Versity Software otevřela svůj archivační souborový systém ScoutFS. Zdrojové kódy jsou k dispozici na GitHubu (kernel space, user space) pod licencí GPLv2.

Ladislav Hagara | Komentářů: 26
včera 00:44 | Nová verze

Byla vydána verze 4.2 programovacího jazyka Swift (Wikipedie). Zdrojové kódy jsou k dispozici na GitHubu. Ke stažení jsou oficiální binární balíčky pro Ubuntu 18.04, Ubuntu 16.04 a Ubuntu 14.04. Přehled novinek ve videozáznamu přednášky z WWDC 2018.

Ladislav Hagara | Komentářů: 6
17.9. 17:55 | Nová verze

Po třech a půl letech od vydání verze 3.4.1 byla vydána nová verze 3.4.2 programu pro filtrování spamu Apache SpamAssassin (Wikipedie). Z novinek lze zmínit 4 nové pluginy. Pravidla budou ověřována pomocí SHA-256 a SHA-512 místo SHA-1. Řešeny jsou také 4 bezpečnostní chyby. Například chyba CVE-2018-11780 v pluginu PDFInfo zneužitelná ke vzdálenému spuštění kódů (RCE).

Ladislav Hagara | Komentářů: 0
Na optické médium (CD, DVD, BD aj.) jsem naposledy vypaloval(a) data před méně než
 (13%)
 (15%)
 (20%)
 (23%)
 (25%)
 (4%)
 (1%)
Celkem 367 hlasů
 Komentářů: 33, poslední 16.9. 11:55
Rozcestník

Enterprise řešení RFID v podání firmy Intelleflex

25.8.2013 23:08 | Přečteno: 3317× | linux | Výběrový blog | poslední úprava: 29.8.2013 07:41

Jak lze totálně zabít RFID řešení v enterprise sféře postavené na linuxu aneb Intelleflex nebrat.

RFID v podání firmy Intelleflex

Někteří si jistě položí otázku, co je to RFID. Nuže, jedná se o "Radio Frequency Identification", tedy indentifikaci objektu pomocí radiových frekvencí. Jinými slovy, v našem konkrétním případě využíváme RFID na identifikaci tahačů (automobilů). Každý řidič nafasuje RFID tag a ten má za sklem u auta. Když k nám přijede, tak je již na dálku identifikován pomocí RFID čtečky(vysílače), která je propojena s IS (informačním systémem). Systém tedy o něm ví a hned dá vědět našemu zaměstnanci, kam má jet a co má naložit na jaký tahač.
U nás je tedy kladen důraz na schopnost číst tagy minimálně na 5m
Použití RFID je samozřejmě různorodé, viz třeba wikipedia : RFID.


Obsah


Pořídli jsme si Intelleflex FMR-5000.

Je čas si trochu vylít srdce.
Je to již mnoho let, kdy jsme šli do tohoto produktu. Do výběru jsem neviděl a těžko říci, jaké byly v té době možnosti. Bohužel, narazili jsme asi víc, než by se dalo čekat.


Aktivní tagy.

Firma v té době disponovala aktivními a pasivními tagy. Na takovou vzdálenost byla potřeba aktivních tagů, tzn. krabiček s baterií, která měla vydržet minimálně rok. Cena tagu byla 200,-/ks (počet našich tahačů / potřebných tagů nebudu zveřejňovat). Problém byl, že výrobce asi nepočítal s tím, že tag může být nějakou dobu před čtečkou, což je případ tahače, který přijel ke stanovišti a čekal na nakládku/vykládku. V takovém případě běžela stále komunikace mezi tagem a čtečkou a baterie v tagu rychle odcházela. Odchod tagu na věčnost byl neohlášený, prostě najednou řidiči tag přestal fungovat. Dost často tagy zlobily i s nabitou baterií a čtečka je nečetla.

Jelikož firma nic nezaručuje, tak toto nebylo možno ani reklamovat. Poté šéf přišel s myšlenkou výměny baterie v tagu, aby se nemusel kupovat nový tag. Při prvních pokusech jsme zjistili nejen to, že rozebrat tag je nadlidský úkol, ale i to, že tag má v sobě self-destruction mechanismus. Po odpojení od napájení ho již nelze oživit. Toto je přímo fce výrobce, která nám jaksi nebyla sdělena.


Firmware.

Firmware byl silně zabugován. Čtečky zlobily. Webové rozhraní bylo silně pomalé, umožňovalo atorizaci, ale neumožňovalo restart čtečky (ten šel udělat změnou IP, po který se čtečka automaticky restartovala a poté bylo potřeba změnit IP zpět a znovu přečkat restart). Další možnost pro restart bylo pomocí telnetu (nutné údaje nám sdělili až později). Občas se upgrade firmware dodavateli nepovedl a čtečka musela být zaslána výrobci, tedy do Kalifornie na nápravu. Čtečky taktéž disponují seriovým portem a jistým menu rozhraním po naběhnutí čtečky (přes onen seriový port), které jaksi funguje a nefunguje. Brána na čtečkách šla nastavit jen pomocí dhcp, staticky v rozhraní byla, ale nefungovala.


Hardware čtečky.

Po první výměně firmware začaly čtečky v létě tuhnout. Firmware byl asi náročnější a teplejší léto přestaly čtečky zvládat, takže se k nim instalovali 120 větráky na 230V. I přesto však občas došlo k výtuhu čtečky. Někdy se na ní nedalo ani dostat přes telnet a byl nutný fyzický zásah a odpojení od napájení. V jiných případech třeba soft restart nepomohl a bylo taktéž nutné nechat čtečku chvíli bez proudu. Tato věc se už nikdy zcela neodstranila. Čtečky byly umístěny různě, pod stříškou, v antoníčku, v lodním kontejneru, všude se chovaly stejně.


Přechod na novější RFID a novější tagy.

Technologie jde kupředu a FMR-5000 nahradila FMR-6000 a bylo i potřeba přejít na novější tagy, které měly obsahovat spořící režimy, měly se vyrovnat s delším kontaktem se čtečkou, měly pomocí API informovat o tom, že jim dochází baterie apod. Kompatibilita se starýma čtečkama byla zajištěna pomocí novějšího firmware.

Přechod na novější verzi firmware byl buď a nebo. Vše zařizoval dodavatel, my takové věci neřešili. Když se nepovedl upgrade firmware, tak opět posílal čtečku do Kalifornie výrobci. Bylo to 50% na 50%. Výrobce radil dodavateli, aby se pokoušel flashovat tak dlouho, dokud se mu to nepodaří. Není prostě nad parádní support. Takže dodavateli se občas po týdnu flashování něco podařilo přeflashovat.


Nový firmware.

Nový firmware byl (a stále je) opravdu výplod moderních technologií.
Webové rozhraní fungovalo a funguje jen ve firefoxu, v ničem jiném (opravdu vůbec v ničem, jen ve firefoxu).
V ostatních prohlížečích nejsou vidět v rozhraní žádné hodnoty (verze fw, uptime, ip apod.).
Aby toho nebylo málo, tak výrobce odstranil veškerou autorizaci, takže najednou mohl kdoli měnit nastavení čteček. Čtečky začaly silně zlobit.
Taktéž byl odstraněn telnet, ale všiml jsem si, že začalo fungovat ssh, ale na ten nám nikdo nechtěl dát přístup (dodavatel neznal a Intelleflex nedal).
Od této doby se tedy muselo vždy chodit ke čtečce a fyzicky jí restartovat (třeba 3x denně téměř každou z 9 RFID).
Webové rozhraní obsahuje pokročilou administraci a flashovací rozhraní. Záložky, které tyto volby zpřístupňují jen při prvním načtení web rozhraní probliknou a hned se schovají (zřejmě nějaké super cool zabezpečení), takže je třeba zadat přímou adresu těchto záložek a může se flashovat.


Dodavatel : ta US verze je naprosto totožná jako EU.

Stále jsem tomu nevěnoval pozornost a nechával vše na dodavateli, který většinou komunikoval s mým kolegou, jenž to měl tak nějak víc na starosti. Novější firmware byl dostupný jen v US verzi. Dodavatel konstatoval, že je stejný jako EU verze a nasadil ho. RFID čtečky začaly fungovat a vše vypadalo dobře.


Intelleflex : to jsme vás dostali, co?.

Čtrnáct dní po zakoupení upgradů apod. (nemalé částky) nám bylo oznámeno, že Intelleflex končí se supportem těchto čteček. Dodavatel v tom byl nevinně (dozvěděl se to kousek před námi).


Jak si pro nás došlo CTU.

Řekněmě, že CTU nesouhlasilo s prohlášením našeho dodavatele : "US verze je naprosto totožná jako EU" :), viz : 865-868MHz (EU) a 902-928MHz (USA). Kdo uhodne, co běží na 900MHz, resp. 876-880MHz a 921-925MHz? :). Na druhou stranu, pokuta se neplatila, dali nám jen lhůtu na vyřešení problému (ta byla dohodou asi jeden měsíc) s tím, že kdybychom nestíhali, tak si můžeme zaslat žádost o prodloužení s odůvodněním a bude nám vyhověno (aspoň se tak činí ve většině případů).


Už je dostupná EU verze, jdeme do ní.

Odvážné to tvrzení, které skončilo jak jinak, než opětovným kolečkem výměny všech RFID čteček a postupným zasláním do US na výměnu FW.


Co znamená ta červená dioda?.

Na čtečkách vždy svítila červená dioda, ale já si pamatoval, že ze začátku tomu tak nebylo. Ptal jsem se dodavatele a ten nic, že to nic neznamená. V takovým stavu nám chodily čtečky i z Kalifornie.


Stav, který mně již nenechal klidným.

Po všech těchto peripetiích a finančních výlohách byl současný stav tento

Vše jsem pozoroval z dálky a díval se, jak se objevují a mizí řešení a objevují nové problémy.
Největším impulzem k tomu, abych přestal dělat na svých věcech a zapojil se do řešení problémů s RFID byla kolegova dovolená.
Hned první den, kdy jsem musel běžet restartovat čtečky jsem konstatoval, že na to nemám chuť ani čas.
Rozhodl jsem se risknout poškození jedné plonkové čtečky a šel si s ní hrát. Takže jdeme na to.


Získání roota do RFID čtečky.

Připojíme čtečku přes seriový port k pc, port nastavíme takto :

cat /etc/minirc.rfid
# Automaticky vytvořený soubor - pro změnu nastavení použijte "minicom -s".
pu port             /dev/ttyS0
pu baudrate         57600
pu bits             8
pu parity           N
pu stopbits         1
pu rtscts           No

Po zapnutí čtečky je vidět následující výpis :

minicom rfid
Vítejte v programu minicom 2.6.1

VOLBY: I18n 
Datum překladu programu: Mar 25 2012, 09:58:15.
Port /dev/ttyS0

Stiskněte CTRL-A Z pro nápovědu o klávesách se zvláštním významem

�+Ethernet eth0: MAC address 00:50:c2:81:30:31
IP: 192.168.1.101/255.255.255.0, Gateway: 192.168.1.1
Default server: 192.168.1.100

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version UNKNOWN - built 13:06:56, Dec  3 2007

Platform: Cirrus Logic EDB9302 Board (ARM920T) Rev A
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.
Copyright (C) 2003, 2004, 2005, 2006 eCosCentric Limited

RAM: 0x00000000-0x02000000, [0x00043320-0x01fdd000] available
FLASH: 0x60000000 - 0x64000000, 512 blocks of 0x00020000 bytes each.
== Executing boot script in 3.000 seconds - enter ^C to abort
RedBoot> fis load zImage
RedBoot> exec -c "root=/dev/mtdblock1 rootfstype=jffs2 console=ttyAM0"
Using base address 0x00080000 and length 0x00200000
Uncompressing Linux................................................................................................ done, booting the ke.
Linux version 2.6.20.4 (root@software) (gcc version 4.1.1) #2 PREEMPT Wed Apr 2 10:55:26 PST 2008
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
Machine: Cirrus Logic EDB9302 Evaluation Board
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
Built 1 zonelists.  Total pages: 8016
Kernel command line: root=/dev/mtdblock1 rootfstype=jffs2 console=ttyAM0
PID hash table entries: 128 (order: 7, 512 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 8MB 8MB 8MB 8MB = 32MB total
Memory: 29304KB available (2736K code, 295K data, 108K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
ep93xx: PLL1 running at 400 MHz, PLL2 at 260 MHz
ep93xx: FCLK 200 MHz, HCLK 100 MHz, PCLK 50 MHz
SCSI subsystem initialized
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 1024 bind 512)
TCP reno registered
JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered (default)
io scheduler anticipatory registered
ep93xx_wdt: EP93XX watchdog, driver version 0.3
Serial: AMBA driver $Revision: 1.41 $
apb:uart1: ttyAM0 at MMIO 0x808c0000 (irq = 52) is a AMBA
apb:uart2: ttyAM1 at MMIO 0x808d0000 (irq = 54) is a AMBA
uart-pl010: probe of apb:uart3 failed with error -16
RAMDISK: wrong blocksize 8096, reverting to defaults
RAMDISK driver initialized: 2 RAM disks of 32768K size 1024 blocksize
loop: loaded (max 8 devices)
nbd: registered device at major 43
physmap platform flash device: 04000000 at 60000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
 Amd/Fujitsu Extended Query Table at 0x0040
physmap-flash.0: CFI does not contain boot bank location. Assuming top.
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
cmdlinepart partition parsing not available
Searching for RedBoot partition table in physmap-flash.0 at offset 0x3fe0000
8 RedBoot partitions found on MTD device physmap-flash.0
Creating 8 MTD partitions on "physmap-flash.0":
0x00000000-0x00040000 : "RedBoot"
0x00040000-0x01e40000 : "rootfs"
0x01e40000-0x02040000 : "zImage"
0x02040000-0x02240000 : "zImage-a"
0x02240000-0x036e0000 : "partition1"
0x036e0000-0x03fe0000 : "unallocated"
0x03fe0000-0x03fff000 : "FIS directory"
mtd: partition "FIS directory" doesn't end on an erase block -- force read-only
0x03fff000-0x04000000 : "RedBoot config"
mtd: partition "RedBoot config" doesn't start on an erase block boundary -- force read-only
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 10
NET: Registered protocol family 17
NET: Registered protocol family 15
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 108K
eth0: No network cable detected!
eth0: No network cable detected!



*****************************   MAIN MENU   ******************************
*  Instructions: Enter selection number and hit return.                  *
*                                                                        *
*  1  Enter Static IP                                                    *
*  2  Use DHCP                                                           *
*  3  Reset VR To Defaults                                               *
*  4  Get Reader IP Info                                                 *
*  5  Reboot Reader                                                      *
**************************************************************************
> Data CRC a78ce15a != calculated CRC 2a1b6263 for node at 009c725c
Data CRC 45ec67f5 != calculated CRC 4741cd8d for node at 009c99a8
Data CRC d7a06533 != calculated CRC 07e499c5 for node at 009ca574

Jak je vidět zvýrazněný text, o bootování se stará Redboot a má nastaven 3s timetou v boot menu. Stačí během těch 3s zmáčknout CTRL+C a jsme v boot menu. Poté stačí nadatlovat zmíněné příkazy s lehkou úpravou a máme roota :

minicom rfid
Vítejte v programu minicom 2.6.1

VOLBY: I18n 
Datum překladu programu: Mar 25 2012, 09:58:15.
Port /dev/ttyS0

Stiskněte CTRL-A Z pro nápovědu o klávesách se zvláštním významem

+Ethernet eth0: MAC address 00:50:c2:81:30:30
IP: 10.1.7.99/255.255.255.0, Gateway: 10.1.7.1
Default server: 192.168.1.100

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version UNKNOWN - built 13:06:56, Dec  3 2007

Platform: Cirrus Logic EDB9302 Board (ARM920T) Rev A
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.
Copyright (C) 2003, 2004, 2005, 2006 eCosCentric Limited

RAM: 0x00000000-0x02000000, [0x00043320-0x01fdd000] available
FLASH: 0x60000000 - 0x64000000, 512 blocks of 0x00020000 bytes each.
== Executing boot script in 3.000 seconds - enter ^C to abort

== Executing boot script in 3.000 seconds - enter ^C to abort

== Executing boot script in 3.000 seconds - enter ^C to abort
^C
RedBoot> ^C
RedBoot> ^C
RedBoot> ^C
RedBoot> ^C
RedBoot> ^C
RedBoot> ^C
RedBoot> ^C
RedBoot> ^C
RedBoot> ^C
RedBoot> ^C
RedBoot> fis load zImage
RedBoot> exec -c "root=/dev/mtdblock1 rootfstype=jffs2 console=ttyAM0 init=/bin/sh"
Using base address 0x00080000 and length 0x00250000
Uncompressing Linux................................................................................................ done, booting the ke.
Linux version 2.6.20.4 (root@software) (gcc version 4.1.1) #2 PREEMPT Wed Apr 2 10:55:26 PST 2008
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
Machine: Cirrus Logic EDB9302 Evaluation Board
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
Built 1 zonelists.  Total pages: 8016
Kernel command line: root=/dev/mtdblock1 rootfstype=jffs2 console=ttyAM0 init=/bin/sh
PID hash table entries: 128 (order: 7, 512 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 8MB 8MB 8MB 8MB = 32MB total
Memory: 29304KB available (2736K code, 295K data, 108K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
ep93xx: PLL1 running at 400 MHz, PLL2 at 260 MHz
ep93xx: FCLK 200 MHz, HCLK 100 MHz, PCLK 50 MHz
SCSI subsystem initialized
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (orderČtečku můžeme : -1, 2048 bytes)
TCP: Hash tables configured (established 1024 bind 512)
TCP reno registered
JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered (default)
io scheduler anticipatory registered
ep93xx_wdt: EP93XX watchdog, driver version 0.3
Serial: AMBA driver $Revision: 1.41 $
apb:uart1: ttyAM0 at MMIO 0x808c0000 (irq = 52) is a AMBA
apb:uart2: ttyAM1 at MMIO 0x808d0000 (irq = 54) is a AMBA
uart-pl010: probe of apb:uart3 failed with error -16
RAMDISK: wrong blocksize 8096, reverting to defaults
RAMDISK driver initialized: 2 RAM disks of 32768K size 1024 blocksize
loop: loaded (max 8 devices)
nbd: registered device at major 43
physmap platform flash device: 04000000 at 60000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
 Amd/Fujitsu Extended Query Table at 0x0040
physmap-flash.0: CFI does not contain boot bank location. Assuming top.
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
cmdlinepart partition parsing not available
Searching for RedBoot partition table in physmap-flash.0 at offset 0x3fe0000
8 RedBoot partitions found on MTD device physmap-flash.0
Creating 8 MTD partitions on "physmap-flash.0":
0x00000000-0x00040000 : "RedBoot"
0x00040000-0x01e40000 : "rootfs"
0x01e40000-0x020a0000 : "zImage"
0x020a0000-0x02300000 : "zImage-a"
0x02300000-0x037a0000 : "partition1"
0x037a0000-0x03fe0000 : "unallocated"
0x03fe0000-0x03fff000 : "FIS directory"
mtd: partition "FIS directory" doesn't end on an erase block -- force read-only
0x03fff000-0x04000000 : "RedBoot config"
mtd: partition "RedBoot config" doesn't start on an erase block boundary -- force read-only
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 10
NET: Registered protocol family 17
NET: Registered protocol family 15
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 108K
/bin/sh: can't access tty; job control turned off
#

Abychom nijak neovlivnili heslo roota(těžko říci, jak dochází k flashování a zda ho nějak nevyužívají), tak si vytvoříme vlastního uživatele (v našem případě se bude jmenovat "admin") a dáme mu uid 0, aby měl stejná práva jako root (což je takový malý hack, který používají oškliví lidé).

# vytvoříme vlastní domovský adresář :
mkdir /home/admin

# přidáme řádek do passwd :
vi /etc/passwd
...
admin:x:0:0:root:/home/admin:/bin/sh

# přidáme řádek do shadow :
vi /etc/shadow
...
admin:*:10933:0:99999:7:::

# nastavíme heslo :
passwd admin

Nyní by měl fungovat vzdálený přístup na čtečku přes ssh. Ale teď v ní nic neběží (ani ssh), nesputily se žádné služby. Spustili jsme totiž místo init scriptů rovnou shell "/bin/sh". Čtečku můžeme klidně natrdo restartovat a seriový kabel už nepotřebujeme (vše už můžeme dělat přes ssh). Nebo můžeme spustit tento příkaz, jenž nám spustí ssh a další věci (pak by měl přístup na ssh skutečně jít, ale web service a další věci to nespustí):

/etc/rc.sysinit

Nejde uložit žádný soubor - volné místo na partition.

Pokud nám nejde uložit žádný soubor při úpravě (/etc/passwd, /etc/shadow apod.), tak nejspíše proto, že došlo místo na flashce. Toto byl problém u asi 80% čteček. Může zato program watchdogu, který nesmyslně loguje přímo na interní disk. To lze zjistit, tak, že si vypíšeme PID procesu, jenž přistupuje k danému souboru :

# zjištění PID procesu :
fuser /dev/inull
264

# zjištění samotného procesu
ps |grep 264
264 root       512 S    /watchdog.FMR5000.bin

Partition se systémem má velikost 30MiB. Je použit souborový systém jffs2 se zapnutou kompresí. Program "/watchdog.FMR5000.bin" loguje do "/dev/inull", což je obyčejný soubor. Tento soubor nabyde asi do 190MiB, což je zhruba 19MiB zkomprimovaných dat a pak mohou začít problémy (na systémové partition defaultně 11MiB sežere systém + zmíněných 19MiB logů a je jasné, že je problém). Prvních pár řádků souborů s logem, jen tak pro přehled :

Watchdog Version 0.0.0004 
arg1 => turn on logging [1=true,0=false]
Starting DevStatus Test of VR
Connection established...
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
///////////////////////////////////////////////// 
// SocketConnection Object at address:0x13008
socketConnection->PortNumber:         80
socketConnection->IsServer:           0x0
socketConnection->RecvTimeoutSeconds: 0
socketConnection->RecvTimeoutMS:      1000
socketConnection->DataSize:           987
socketConnection->GotNewData:         0x0
socketConnection->DeviceName:         /dev/eth0
socketConnection->ServerIP:           127.0.0.1
socketConnection->ConnectionHandle:   3
socketConnection->LastErrorCode:      0
socketConnection->BufferSize:         8192
socketConnection->Buffer: 
---HEX DISPLAY ---
 3c 64 65 76 53 74 61 74 75 73 52 65 70 6c 79 3e 3c 65 72 72 6f 72 52 65 70 6f 72 74 3e 3c 6e 75
 6d 45 72 72 6f 72 73 3e 30 3c 2f 6e 75 6d 45 72 72 6f 72 73 3e 3c 2f 65 72 72 6f 72 52 65 70 6f
 72 74 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 30 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73
 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 33 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 35 3c 2f 6d 69
 6e 6f 72 3e 3c 70 61 74 63 68 3e 38 36 39 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65
 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64
 65 76 49 44 3e 31 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 33 30
 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 61 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 31
 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c
 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 32 3c 2f 64 65 76 49 44 3e
 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 32 30 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72
 3e 30 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 31 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63
 65 3e 3c 64 65 76 49 44 3e 33 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f
 72 3e 32 30 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 30 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74
 63 68 3e 33 30 33 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72
 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 34 3c 2f
 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 31 3c 2f 6d 61 6a 6f 72 3e 3c
 6d 69 6e 6f 72 3e 31 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 34 30 34 3c 2f 70 61 74 63 68
 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65
 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 35 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f
 6e 3e 3c 6d 61 6a 6f 72 3e 31 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 31 3c 2f 6d 69 6e 6f
 72 3e 3c 70 61 74 63 68 3e 35 30 35 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74
 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 63 6f 75 6e 74 72 79 3e 33 32 37
 3c 2f 63 6f 75 6e 74 72 79 3e 3c 2f 64 65 76 53 74 61 74 75 73 52 65 70 6c 79 3e
--- ASCII DISPLAY ---
0035869ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ130a1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ22001ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3200303ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ411404ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ511505ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ327
// END 
///////////////////////////////////////////////// 
Starting DevStatus Test of VR
Connection established...
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
///////////////////////////////////////////////// 
// SocketConnection Object at address:0x13008
socketConnection->PortNumber:         80
socketConnection->IsServer:           0x0
socketConnection->RecvTimeoutSeconds: 0
socketConnection->RecvTimeoutMS:      1000
socketConnection->DataSize:           987
socketConnection->GotNewData:         0x0
socketConnection->DeviceName:         /dev/eth0
socketConnection->ServerIP:           127.0.0.1
socketConnection->ConnectionHandle:   3
socketConnection->LastErrorCode:      0
socketConnection->BufferSize:         8192
socketConnection->Buffer: 
---HEX DISPLAY ---
 3c 64 65 76 53 74 61 74 75 73 52 65 70 6c 79 3e 3c 65 72 72 6f 72 52 65 70 6f 72 74 3e 3c 6e 75
 6d 45 72 72 6f 72 73 3e 30 3c 2f 6e 75 6d 45 72 72 6f 72 73 3e 3c 2f 65 72 72 6f 72 52 65 70 6f
 72 74 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 30 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73
 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 33 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 35 3c 2f 6d 69
 6e 6f 72 3e 3c 70 61 74 63 68 3e 38 36 39 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65
 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64
 65 76 49 44 3e 31 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 33 30
 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 61 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 31
 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c
 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 32 3c 2f 64 65 76 49 44 3e
 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 32 30 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72
 3e 30 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 31 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63
 65 3e 3c 64 65 76 49 44 3e 33 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f
 72 3e 32 30 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 30 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74
 63 68 3e 33 30 33 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72
 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 34 3c 2f
 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 31 3c 2f 6d 61 6a 6f 72 3e 3c
 6d 69 6e 6f 72 3e 31 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 34 30 34 3c 2f 70 61 74 63 68
 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65
 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 35 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f
 6e 3e 3c 6d 61 6a 6f 72 3e 31 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 31 3c 2f 6d 69 6e 6f
 72 3e 3c 70 61 74 63 68 3e 35 30 35 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74
 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 63 6f 75 6e 74 72 79 3e 33 32 37
 3c 2f 63 6f 75 6e 74 72 79 3e 3c 2f 64 65 76 53 74 61 74 75 73 52 65 70 6c 79 3e
--- ASCII DISPLAY ---
0035869ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ130a1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ22001ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3200303ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ411404ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ511505ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ327
// END 
///////////////////////////////////////////////// 
Starting DevStatus Test of VR
Connection established...
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
SocketConnection_Read() recv error code = 11
 Handle = 3, buffer = , data size = 0
///////////////////////////////////////////////// 
// SocketConnection Object at address:0x13008
socketConnection->PortNumber:         80
socketConnection->IsServer:           0x0
socketConnection->RecvTimeoutSeconds: 0
socketConnection->RecvTimeoutMS:      1000
socketConnection->DataSize:           987
socketConnection->GotNewData:         0x0
socketConnection->DeviceName:         /dev/eth0
socketConnection->ServerIP:           127.0.0.1
socketConnection->ConnectionHandle:   3
socketConnection->LastErrorCode:      0
socketConnection->BufferSize:         8192
socketConnection->Buffer: 
---HEX DISPLAY ---
 3c 64 65 76 53 74 61 74 75 73 52 65 70 6c 79 3e 3c 65 72 72 6f 72 52 65 70 6f 72 74 3e 3c 6e 75
 6d 45 72 72 6f 72 73 3e 30 3c 2f 6e 75 6d 45 72 72 6f 72 73 3e 3c 2f 65 72 72 6f 72 52 65 70 6f
 72 74 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 30 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73
 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 33 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 35 3c 2f 6d 69
 6e 6f 72 3e 3c 70 61 74 63 68 3e 38 36 39 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65
 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64
 65 76 49 44 3e 31 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 33 30
 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 61 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 31
 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c
 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 32 3c 2f 64 65 76 49 44 3e
 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 32 30 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72
 3e 30 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 31 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63
 65 3e 3c 64 65 76 49 44 3e 33 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f
 72 3e 32 30 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 30 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74
 63 68 3e 33 30 33 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72
 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 34 3c 2f
 64 65 76 49 44 3e 3c 76 65 72 73 69 6f 6e 3e 3c 6d 61 6a 6f 72 3e 31 3c 2f 6d 61 6a 6f 72 3e 3c
 6d 69 6e 6f 72 3e 31 3c 2f 6d 69 6e 6f 72 3e 3c 70 61 74 63 68 3e 34 30 34 3c 2f 70 61 74 63 68
 3e 3c 74 65 78 74 3e ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ff ff ff ff ff ff ff 3c 2f 74 65 78 74 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65
 3e 3c 64 65 76 69 63 65 3e 3c 64 65 76 49 44 3e 35 3c 2f 64 65 76 49 44 3e 3c 76 65 72 73 69 6f
 6e 3e 3c 6d 61 6a 6f 72 3e 31 3c 2f 6d 61 6a 6f 72 3e 3c 6d 69 6e 6f 72 3e 31 3c 2f 6d 69 6e 6f
 72 3e 3c 70 61 74 63 68 3e 35 30 35 3c 2f 70 61 74 63 68 3e 3c 74 65 78 74 3e ff ff ff ff ff ff
 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 3c 2f 74 65 78 74
 3e 3c 2f 76 65 72 73 69 6f 6e 3e 3c 2f 64 65 76 69 63 65 3e 3c 63 6f 75 6e 74 72 79 3e 33 32 37
 3c 2f 63 6f 75 6e 74 72 79 3e 3c 2f 64 65 76 53 74 61 74 75 73 52 65 70 6c 79 3e
--- ASCII DISPLAY ---
0035869ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ130a1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ22001ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3200303ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ411404ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ511505ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ327
// END 
///////////////////////////////////////////////// 
Starting DevStatus Test of VR

Setkal jsem se s případama, že byl soubor s logem menší, možná se někdy zcela náhodně otočí, opravdu nevím, jen vím, že se dost často neotáčí. Taktéž se stalo na pár čtečkách, že neběžel watchdog (asi kvůli 100% zaplnění místa)


/dev/inull ?.

Tento idiotský problém se vyřeší tak, že soubor smažeme a vytvoříme hardlink do /dev/null, což jednoduše znamená, že budeme veškeré logy zahazovat :

rm /dev/inull
ln /dev/null /dev/inull

# provedeme restart, ať máme jistotu :
reboot

Smazání souboru může trvat někdy docela dlouho, pěkná šílenost. Jednou jsem snad i natvrdo vypnul rfid a znovu nahodil


Co jsme tím vyřešili?.


Heslo roota aneb milujeme Johna.

Z předchozích kroků jsme získali přístup k osoleným hash heslům. Otázkou je, co s nimi? Jsou to sice MD5 hashe, ale jsou osolený, takže klasické tabulky s hashy nám asi nepomohou (mám jich doma kolem 500GiB, fňuk.). Měl jsem mít týden dovolenou, tak jsem si řekl, že na tu dobu pustím brutal force attack a uvidíme. Třeba to bude nějaké krátké heslo a podaří se.

# připravíme si db pro Johna :
unshadow /etc/passwd /etc/shadow > crack.passwd.db

# lámání hesel spustíme ve screenu, abychom mohli jednoduše kontrolovat průběh na dálku :
screen -dmS john-ripper
screen -r john-ripper

# spustíme lámání :
john crack.passwd.db
Created directory: /home/devaine/.john
Loaded 1 password hash (FreeBSD MD5 [SSE2i 12x])

# když dáme enter, tak se zobrazí aktuální rychlost + aktuálně zkoušený pass :
guesses: 0  time: 0:00:00:19 0.00% (3)  c/s: 102063  trying: ev4 - iu2

Úlohu jsem spustil na "Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz". K mému úžasu bylo druhý den po lámání. Stačilo k tomu 13h a výsledek je decryptované heslo : "ifx123" :). Paráda, nemusím obíhat čtečky s notebookem a bojovat přes seriák, nyní mám plný přístup na dálku na jakoukoliv čtečku. Ještě teda něco, co bude strejdovi G víc chutnat : intelleflex rfid root password : ifx123


Boot systému z blízka.

Jak čtečka nabíhá? Následujícím způsobem :

RedBoot -> Kernel 2.6.20.4 -> /etc/inittab :
cat /etc/inittab 
# /etc/inittab
#
# Copyright (C) 2001 Erik Andersen 
#
# Note: BusyBox init doesn't support runlevels.  The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.
#
# Format for each entry: :::
#
# id        == tty to run on, or empty for /dev/console
# runlevels == ignored
# action    == one of sysinit, respawn, askfirst, wait, and once
# process   == program to run

# Startup the system
null::sysinit:/etc/rc.sysinit

# Put a shell on the serial port
##ttyAM0::askfirst:-/sbin/getty 57600 /dev/ttyAM0
null::once:/work/intelleflex/serial_con
#null::once:/usr/local/reader/sr320init
null::once:/bin/sh /work/intelleflex/runStage1.sh
null::shutdown:/bin/umount -a

Dále pak inittab načte "/etc/rc.sysinit". Ten připojí nezbytná zařízení, nastaví adresu síťovce (buď dhcp, nebo spustí externí script, který nastaví statickou ip), dále spustí ssh službu (dropbear)

cat /etc/rc.sysinit
#!/bin/sh

#
# Set the path so we can find the programs we need.
#
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/reader:/:/usr/local/bin:.

#
# Mount the /proc, /proc/bus/usb, and /dev/pts filesystems.
#
mount -t proc proc /proc
mount -t usbfs usbfs /proc/bus/usb
mount -t devpts devpts /dev/pts
mkdir -p /sys
mount -t sysfs sysfs /sys
mount -a

#
# Start syslogd.
#
syslogd -C -m 0

#
# Start klogd.
#
klogd

HWADDR=`getRedBootMAC`
echo "${HWADDR}" > /etc/MACAddress
ifconfig eth0 down
ifconfig eth0 hw ether ${HWADDR}

#
# Configure the network interfaces.
#
ifconfig lo 127.0.0.1 up
route add -net 127.0.0.0 netmask 255.0.0.0 lo
if [ "x`grep ip= /proc/cmdline`" = "x" ]
then
udhcpc -i eth0 -b -p /var/run/udhcpc.eth0.pid >/dev/null 2>&1
fi

/setup_eth0.sh

#
# Start inetd.
#
inetd

#/work/intelleflex/serial_con & >/dev/null 2>&1

/bin/dropbear & >/dev/null 2>&1


#
# Start crond.
#
crond

Na tomto scriptu jsou nějaké docela zajímavé věci :

Dále se spouští binárka :

/work/intelleflex/serial_con

a script "/work/intelleflex/runStage1.sh", který nahodí web service, watchdog apod. :

cat /work/intelleflex/runStage1.sh
#!/bin/sh

/etc/rc5.d/S99iflex start >/dev/null 2>&1 &

exit 0

# if the upgrade script exists in /usr/local/upgrade then run it 
if [ -f /usr/local/upgrade/runUpgrade.sh ]
then
   /bin/sh /usr/local/upgrade/runUpgrade.sh
   status=$?
   if [ $status == 0 ]
   then
        rm -rf /usr/local/upgrade
        rm /usr/local/SystemUpdate.zip
        /work/intelleflex/runVR.sh
   else
        ## update failed
        rm -rf /usr/local/upgrade
        rm /usr/local/SystemUpdate.zip
        mkdir -p /work/intelleflex
        cd /
        tar -zxvf /usr/local/previous.tgz
        /work/intelleflex/runVR.sh
        #reboot
   fi
else
  # if there was no upgrade then run VR as normal
  /work/intelleflex/runVR.sh
fi

Nějaké systémové info.

# uname -a
Linux (none) 2.6.20.4 #2 PREEMPT Wed Apr 2 10:55:26 PST 2008 armv4tl unknown
# cat /proc/cpuinfo
Processor       : ARM920T rev 0 (v4l)
BogoMIPS        : 99.73
Features        : swp half 
CPU implementer : 0x41
CPU architecture: 4T
CPU variant     : 0x1
CPU part        : 0x920
CPU revision    : 0
Cache type      : write-back
Cache clean     : cp15 c7 ops
Cache lockdown  : format A
Cache format    : Harvard
I size          : 16384
I assoc         : 64
I line length   : 32
I sets          : 8
D size          : 16384
D assoc         : 64
D line length   : 32
D sets          : 8

Hardware        : Cirrus Logic EDB9302 Evaluation Board
Revision        : 0000
Serial          : 0000000000000000
# cat /proc/meminfo
MemTotal:        29412 kB
MemFree:          1104 kB
Buffers:             0 kB
Cached:           6712 kB
SwapCached:          0 kB
Active:          22148 kB
Inactive:         2628 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:               0 kB
Writeback:           0 kB
AnonPages:       18088 kB
Mapped:           3524 kB
Slab:             2424 kB
SReclaimable:      660 kB
SUnreclaim:       1764 kB
PageTables:        172 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:     14704 kB
Committed_AS:    22324 kB
VmallocTotal:   925696 kB
VmallocUsed:     65968 kB
VmallocChunk:   843772 kB
# free
              total         used         free       shared      buffers
  Mem:        29412        28296         1116            0            0
 Swap:            0            0            0
Total:        29412        28296         1116
# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00020000 "RedBoot"
mtd1: 01e00000 00020000 "rootfs"
mtd2: 00200000 00020000 "zImage"
mtd3: 00200000 00020000 "zImage-a"
mtd4: 014a0000 00020000 "partition1"
mtd5: 00900000 00020000 "unallocated"
mtd6: 0001f000 00020000 "FIS directory"
mtd7: 00001000 00020000 "RedBoot config"
# cat /etc/fstab
# /etc/fstab: static file system information.
#
#                    
/dev/root       /              ext2     rw,noauto         0      1
proc            /proc          proc     defaults          0      0
devpts          /dev/pts       devpts   defaults,gid=5,mode=620   0      0
tmpfs           /tmp           tmpfs    defaults          0      0
# mount
rootfs on / type rootfs (rw)
/dev/root on / type jffs2 (rw)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw)
sysfs on /sys type sysfs (rw)
tmpfs on /tmp type tmpfs (rw)
# df -ah
Filesystem                Size      Used Available Use% Mounted on
/dev/root                30.0M     11.5M     18.5M  38% /
proc                         0         0         0   0% /proc
devpts                       0         0         0   0% /dev/pts
sysfs                        0         0         0   0% /sys
tmpfs                    14.4M     12.0K     14.3M   0% /tmp
# dmesg
Linux version 2.6.20.4 (root@software) (gcc version 4.1.1) #2 PREEMPT Wed Apr 2 10:55:26 PST 2008
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177 
Machine: Cirrus Logic EDB9302 Evaluation Board 
Memory policy: ECC disabled, Data cache writeback   
On node 0 totalpages: 8192 
  DMA zone: 176 pages used for memmap
  DMA zone: 0 pages reserved    
  DMA zone: 8016 pages, LIFO batch:0 
  Normal zone: 0 pages used for memmap    
CPU0: D VIVT write-back cache   
CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
Built 1 zonelists.  Total pages: 8016
Kernel command line: root=/dev/mtdblock1 rootfstype=jffs2 console=ttyAM0
PID hash table entries: 128 (order: 7, 512 bytes)   
Console: colour dummy device 80x30   
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes) 
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)   
Memory: 8MB 8MB 8MB 8MB = 32MB total 
Memory: 29304KB available (2736K code, 295K data, 108K init)  
Calibrating delay loop... 99.73 BogoMIPS (lpj=498688)    
Mount-cache hash table entries: 512  
CPU: Testing write buffer coherency: ok   
NET: Registered protocol family 16   
ep93xx: PLL1 running at 400 MHz, PLL2 at 260 MHz    
ep93xx: FCLK 200 MHz, HCLK 100 MHz, PCLK 50 MHz
SCSI subsystem initialized 
NET: Registered protocol family 2    
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 0, 4096 bytes)    
TCP bind hash table entries: 512 (order: -1, 2048 bytes) 
TCP: Hash tables configured (established 1024 bind 512)  
TCP reno registered   
JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc.    
io scheduler noop registered (default)    
io scheduler anticipatory registered 
ep93xx_wdt: EP93XX watchdog, driver version 0.3
Serial: AMBA driver $Revision: 1.41 $
apb:uart1: ttyAM0 at MMIO 0x808c0000 (irq = 52) is a AMBA
apb:uart2: ttyAM1 at MMIO 0x808d0000 (irq = 54) is a AMBA
uart-pl010: probe of apb:uart3 failed with error -16
RAMDISK: wrong blocksize 8096, reverting to defaults
RAMDISK driver initialized: 2 RAM disks of 32768K size 1024 blocksize
loop: loaded (max 8 devices)
nbd: registered device at major 43
physmap platform flash device: 04000000 at 60000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
 Amd/Fujitsu Extended Query Table at 0x0040
physmap-flash.0: CFI does not contain boot bank location. Assuming top.
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
cmdlinepart partition parsing not available
Searching for RedBoot partition table in physmap-flash.0 at offset 0x3fe0000
8 RedBoot partitions found on MTD device physmap-flash.0
Creating 8 MTD partitions on "physmap-flash.0":
0x00000000-0x00040000 : "RedBoot"
0x00040000-0x01e40000 : "rootfs"
0x01e40000-0x02040000 : "zImage"
0x02040000-0x02240000 : "zImage-a"
0x02240000-0x036e0000 : "partition1"
0x036e0000-0x03fe0000 : "unallocated"
0x03fe0000-0x03fff000 : "FIS directory"
mtd: partition "FIS directory" doesn't end on an erase block -- force read-only
0x03fff000-0x04000000 : "RedBoot config"
mtd: partition "RedBoot config" doesn't start on an erase block boundary -- force read-only
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 10
NET: Registered protocol family 17
NET: Registered protocol family 15
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 108K
eth0: no IPv6 routers presen

Webové služby čtečky.

Služby, které běží na portu 80 směrováno na 8080(webcache), a které slouží ke komunikaci, jsou napsány v ruby. To není špatný jazyk, určitě se v něm takové věci rychle píšou, ale lze to použít na tak bídný hw?

# /opt/arm-ruby-linux2/bin/ruby --version
ruby 1.9.1p378 (2010-01-10 revision 26273) [arm-linux]

# /opt/arm-ruby-linux2/bin/rake --version
rake, version 0.8.3

# /opt/arm-ruby-linux2/bin/gem --version
1.3.1
# ps
  PID USER       VSZ STAT COMMAND
    1 root      1000 S    init       
    2 root         0 SWN  [ksoftirqd/0]
    3 root         0 SW<  [events/0]
    4 root         0 SW<  [khelper]
    5 root         0 SW<  [kthread]
   35 root         0 SW<  [kblockd/0]
   36 root         0 SW<  [kseriod]
   48 root         0 SW   [pdflush]
   49 root         0 SW   [pdflush]
   50 root         0 SW<  [kswapd0]
   51 root         0 SW<  [aio/0]
  154 root         0 SW   [mtdblockd]
  182 root         0 SWN  [jffs2_gcd_mtd1]
  192 root      1000 S    syslogd -C -m 0 
  194 root       984 S    klogd 
  215 root      1000 S    inetd 
  219 root       500 S    /work/intelleflex/serial_con 
  224 root       872 S    /bin/dropbear 
  263 root       948 S    /bin/dropbear 
  264 root       512 S    /watchdog.FMR5000.bin 
  267 root      1008 S    -sh 
  319 root       540 S    /tcpserver8.arm.bin 
  321 root     23684 R    /opt/arm-ruby-linux2/bin/ruby ./LJ.rb 
  323 root     23684 S    /opt/arm-ruby-linux2/bin/ruby ./LJ.rb 
  324 root     23684 S    /opt/arm-ruby-linux2/bin/ruby ./LJ.rb 
  349 root     23684 S    /opt/arm-ruby-linux2/bin/ruby ./LJ.rb 
  376 root       988 R    ps
# netstat -aep 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:2020            0.0.0.0:*               LISTEN      401/tcpserver8.arm.
tcp        0      0 0.0.0.0:time            0.0.0.0:*               LISTEN      215/inetd
tcp        0      0 0.0.0.0:echo            0.0.0.0:*               LISTEN      215/inetd
tcp        0      0 0.0.0.0:discard         0.0.0.0:*               LISTEN      215/inetd
tcp        0      0 0.0.0.0:daytime         0.0.0.0:*               LISTEN      215/inetd
tcp        0      0 0.0.0.0:webcache        0.0.0.0:*               LISTEN      403/ruby
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      403/ruby
tcp        0      0 0.0.0.0:chargen         0.0.0.0:*               LISTEN      215/inetd
tcp        0      0 0.0.0.0:2005            0.0.0.0:*               LISTEN      401/tcpserver8.arm.
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      224/dropbear
tcp        0      0 0.0.0.0:2010            0.0.0.0:*               LISTEN      401/tcpserver8.arm.
tcp        0      0 192.168.0.1:3655      192.168.0.1:80        TIME_WAIT   -
tcp        0      0 192.168.0.1:webcache  192.168.0.244:43653     TIME_WAIT   -
tcp        0      0 192.168.0.1:webcache  192.168.0.244:43655     TIME_WAIT   -
tcp        0      0 192.168.0.1:webcache  192.168.0.244:43651     TIME_WAIT   -
tcp        0      0 192.168.0.1:ssh       192.168.0.244:50454     ESTABLISHED 263/dropbear
tcp        0      0 localhost:2020          localhost:3851          ESTABLISHED 401/tcpserver8.arm.
tcp        0      0 localhost:2005          localhost:3887          ESTABLISHED 401/tcpserver8.arm.
tcp        0      0 localhost:3887          localhost:2005          ESTABLISHED 403/ruby
tcp        0      0 localhost:80            localhost:3907          ESTABLISHED 403/ruby
tcp        0      0 localhost:3907          localhost:80            ESTABLISHED 264/watchdog.FMR500
tcp        0      0 192.168.0.1:webcache  192.168.0.244:43652     TIME_WAIT   -
tcp        0      0 192.168.0.1:webcache  192.168.0.244:43654     TIME_WAIT   -
tcp        0      0 localhost:3851          localhost:2020          ESTABLISHED 403/ruby
udp        0      0 0.0.0.0:echo            0.0.0.0:*                           215/inetd
udp        0      0 0.0.0.0:discard         0.0.0.0:*                           215/inetd
udp        0      0 0.0.0.0:daytime         0.0.0.0:*                           215/inetd
udp        0      0 0.0.0.0:chargen         0.0.0.0:*                           215/inetd
udp        0      0 0.0.0.0:time            0.0.0.0:*                           215/inetd
udp        0      0 0.0.0.0:1003            0.0.0.0:*                           403/ruby
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  5      [ ]         DGRAM                       359 192/syslogd         /tmp/log
unix  2      [ ]         DGRAM                       457 224/dropbear        
unix  2      [ ]         DGRAM                       451 215/inetd           
unix  2      [ ]         DGRAM                       362 194/klogd

Stabilita? Ale kdeže... by oom-killer.

Resetování uptime ve web rozhraní má důvod, jenž jsem delší dobu předpokládal. Tím důvodem je restart webových služeb. Jenomže jsem nečekal, že neprobíhá úplně standardně :-/. K restartu web služeb dochází tak, že jednou za pár hodin vyskočí hláška s nedostatkem paměti a do práce se pustí oom-killer, který začne zabíjet aplikaci, jenž zato může(tou bývá web service). Watchdog se pak postará o to, aby služba znovu naběhla. Čtečka má tedy jednou za 2-5h výtuh na cca 3min, než se vše pokilluje a znovu pospouští (přecijen, když se ve scriptech používá sleep 60 apod., tak to tak rychlý start mít nikdy nebude). Občas se i mocný pan oom-killer mine a sundá i něco jiného (hlavně, pokud se někdo trefí do doby killování a je přihlášen na čtečce).


Timeout na čtečce, někdy až 3s!.

Kolega i já jsme si všimli, že občas trvá i 2-3s, než se načte tag. Možná je to způsobeno tím, že program na čtení tagů prochází čtečky cyklicky seriově za sebou a při větším počtu čteček je možná nějaká prodleva. Software dodal dodavatel (vyjímečně jsme si tentokrát nepsali nic vlastního). V takovém případě by byly dvě možné řešení :

1) přepsat app, aby komunikovala paralelně
2) spustit zmíněnou app vícekrát (po každé s určitými čtečkami - nebyl by problém)


Rekapitulace - kde soudruzi udělali chybu?.

Takže si shrneme, kde výrobce udělal chybu :


FMR-6000.

Tato čtečka má 512MiB NAND flash + 256MiB ramky, takže tady se konečně trochu pochlapili (FMR-5000 má 32MiB a 32MiB). Systém vypadá už líp. Ovšem web rozhraní má stále slabší uptime - taktéž u něj dochází k restartování. Root heslo je stejné jako u FMR-5000, tzn. "ifx123". Netuhne.

Čtečka podporuje runlevely, takže se spouští už trochu klasičtěji. Spouští se vše v pátem runlevelu :

~# ls -l /etc/rc5.d/
total 6
lrwxrwxrwx 1 1001 1001   14 Jan  1  2000 S09sshd -> ../init.d/sshd
lrwxrwxrwx 1 1001 1001   16 Jan  1  2000 S20syslog -> ../init.d/syslog
lrwxrwxrwx 1 1001 1001   16 Jan  1  2000 S80rc.pvr -> ../init.d/rc.pvr
-rwxr-xr-x 1 1001 1001  374 Dec 18  2009 S90setdisp
-rwxr-xr-x 1 1001 1001 2158 May 16  2011 S99iflex
lrwxrwxrwx 1 1001 1001   19 Jan  1  2000 S99rmnologin -> ../init.d/rmnologin
-rwxr-xr-x 1 1001 1001   31 Nov  1  2010 S99rtc
-rwxrwxrwx 1 root root   62 Nov 18  2010 S99tmpfs

Nějaké info o čtečce :

# dmesg
d 8192)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
AM3517  Linux PSP version 03.00.00.05 (AM3517EVM)
NetWinder Floating Point Emulator V0.97 (double precision)
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).
Slow work thread pool: Starting up
Slow work thread pool: Ready
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
msgmni has been set to 487
alg: No test for stdrng (krng)                                                  
io scheduler noop registered                                                    
io scheduler deadline registered                                                
io scheduler cfq registered (default)                                           
OMAP DSS rev 2.0                                                                
OMAP DISPC rev 3.0                                                              
OMAP VENC rev 2                                                                 
Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled                         
serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654                  
serial8250.1: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654                  
serial8250.2: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654                  
console [ttyS2] enabled                                                         
brd: module loaded                                                              
loop: module loaded                                                             
omap2-nand driver initializing                                                  
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xbc (Micron NAND 512MiB 1,8V 16-bi
Creating 5 MTD partitions on "omap2-nand.0":                                    
0x000000000000-0x000000080000 : "xloader-nand"                                  
0x000000080000-0x000000240000 : "uboot-nand"                                    
0x000000240000-0x000000280000 : "params-nand"                                   
0x000000280000-0x000000780000 : "linux-nand"                                    
0x000000780000-0x000020000000 : "jffs2-nand"                                    
vcan: Virtual CAN interface driver                                              
CAN device driver interface                                                     
TI High End CAN Controller Driver 0.7                                           
failed to get can_stb                                                           
ti_hecc ti_hecc.1: device registered (reg_base=d0870000, irq=24)                
usbcore: registered new interface driver kaweth                                 
pegasus: v0.6.14 (2006/09/27), Pegasus/Pegasus II USB Ethernet driver           
usbcore: registered new interface driver pegasus                                
rtl8150: v0.6.2 (2004/08/27):rtl8150 based usb-ethernet driver                  
usbcore: registered new interface driver rtl8150                                
usbcore: registered new interface driver cdc_ether                              
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver                      
ehci-omap ehci-omap.0: OMAP-EHCI Host Controller                                
ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 1            
ehci-omap ehci-omap.0: irq 77, io mem 0x48064800                                
ehci-omap ehci-omap.0: USB 2.0 started, EHCI 1.00                               
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002                   
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1              
usb usb1: Product: OMAP-EHCI Host Controller                                    
usb usb1: Manufacturer: Linux 2.6.32 ehci_hcd                                   
usb usb1: SerialNumber: ehci-omap.0                                             
hub 1-0:1.0: USB hub found                                                      
hub 1-0:1.0: 3 ports detected                                                   
usbcore: registered new interface driver usblp                                  
usbcore: registered new interface driver cdc_wdm                                
Initializing USB Mass Storage driver...                                         
usbcore: registered new interface driver usb-storage                            
USB Mass Storage support registered.                                            
usbcore: registered new interface driver mdc800                                 
mdc800: v0.7.5 (30/10/2000):USB Driver for Mustek MDC800 Digital Camera         
usbcore: registered new interface driver usbserial                              
USB Serial support registered for generic                                       
usbcore: registered new interface driver usbserial_generic                      
usbserial: USB Serial Driver core                                               
USB Serial support registered for aircable                                      
usbcore: registered new interface driver aircable                               
USB Serial support registered for ark3116                                       
usbcore: registered new interface driver ark3116                                
ark3116:v0.5:USB ARK3116 serial/IrDA driver                                     
USB Serial support registered for Belkin / Peracom / GoHubs USB Serial Adapter  
usbcore: registered new interface driver belkin                                 
belkin_sa: v1.2:USB Belkin Serial converter driver                              
USB Serial support registered for ch341-uart                                    
usbcore: registered new interface driver ch341                                  
USB Serial support registered for cp210x                                        
usbcore: registered new interface driver cp210x                                 
cp210x: v0.09:Silicon Labs CP210x RS232 serial adaptor driver                   
USB Serial support registered for Reiner SCT Cyberjack USB card reader          
usbcore: registered new interface driver cyberjack                              
cyberjack: v1.01 Matthias Bruestle                                              
cyberjack: REINER SCT cyberJack pinpad/e-com USB Chipcard Reader Driver         
drivers/usb/serial/cypress_m8.c: cypress_init                                   
USB Serial support registered for DeLorme Earthmate USB                         
USB Serial support registered for HID->COM RS232 Adapter                        
USB Serial support registered for Nokia CA-42 V2 Adapter                        
usbcore: registered new interface driver cypress                                
cypress_m8: v1.09:Cypress USB to Serial Driver                                  
USB Serial support registered for debug                                         
usbcore: registered new interface driver debug                                  
USB Serial support registered for Digi 2 port USB adapter                       
USB Serial support registered for Digi 4 port USB adapter                       
usbcore: registered new interface driver digi_acceleport                        
digi_acceleport: v1.80.1.2:Digi AccelePort USB-2/USB-4 Serial Converter driver  
USB Serial support registered for Edgeport 2 port adapter                       
USB Serial support registered for Edgeport 4 port adapter                       
USB Serial support registered for Edgeport 8 port adapter                       
USB Serial support registered for EPiC device                                   
usbcore: registered new interface driver io_edgeport                            
io_edgeport: v2.7:Edgeport USB Serial Driver                                    
USB Serial support registered for Edgeport TI 1 port adapter                    
USB Serial support registered for Edgeport TI 2 port adapter                    
usbcore: registered new interface driver io_ti                                  
io_ti: v0.7mode043006:Edgeport USB Serial Driver                                
USB Serial support registered for empeg                                         
usbcore: registered new interface driver empeg                                  
empeg: v1.2:USB Empeg Mark I/II Driver                                          
USB Serial support registered for FTDI USB Serial Device                        
usbcore: registered new interface driver ftdi_sio                               
ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver                              
USB Serial support registered for funsoft                                       
usbcore: registered new interface driver funsoft                                
USB Serial support registered for Garmin GPS usb/tty                            
usbcore: registered new interface driver garmin_gps                             
garmin_gps: v0.33:garmin gps driver                                             
USB Serial support registered for hp4X                                          
usbcore: registered new interface driver hp4X                                   
hp4x: v1.00:HP4x (48/49) Generic Serial driver                                  
USB Serial support registered for PocketPC PDA                                  
usbcore: registered new interface driver ipaq                                   
ipaq: v0.5:USB PocketPC PDA driver                                              
USB Serial support registered for IPWireless converter                          
usbcore: registered new interface driver ipwtty                                 
ipw: v0.3:IPWireless tty driver                                                 
USB Serial support registered for IR Dongle                                     
usbcore: registered new interface driver ir-usb                                 
ir_usb: v0.4:USB IR Dongle driver                                               
USB Serial support registered for iuu_phoenix                                   
usbcore: registered new interface driver iuu_phoenix                            
iuu_phoenix: v0.11:Infinity USB Unlimited Phoenix driver                        
USB Serial support registered for Keyspan - (without firmware)                  
USB Serial support registered for Keyspan 1 port adapter                        
USB Serial support registered for Keyspan 2 port adapter                        
USB Serial support registered for Keyspan 4 port adapter                        
usbcore: registered new interface driver keyspan                                
keyspan: v1.1.5:Keyspan USB to Serial Converter Driver                          
USB Serial support registered for Keyspan PDA                                   
USB Serial support registered for Keyspan PDA - (prerenumeration)               
USB Serial support registered for Xircom / Entregra PGS - (prerenumeration)     
usbcore: registered new interface driver keyspan_pda                            
keyspan_pda: v1.1:USB Keyspan PDA Converter driver                              
USB Serial support registered for KL5KUSB105D / PalmConnect                     
usbcore: registered new interface driver kl5kusb105d                            
kl5kusb105: v0.3a:KLSI KL5KUSB105 chipset USB->Serial Converter driver          
USB Serial support registered for KOBIL USB smart card terminal                 
usbcore: registered new interface driver kobil                                  
kobil_sct: 21/05/2004:KOBIL USB Smart Card Terminal Driver (experimental)       
USB Serial support registered for MCT U232                                      
usbcore: registered new interface driver mct_u232                               
mct_u232: z2.1:Magic Control Technology USB-RS232 converter driver              
USB Serial support registered for Moschip 2 port adapter                        
mos7720: 1.0.0.4F:Moschip USB Serial Driver                                     
usbcore: registered new interface driver moschip7720                            
USB Serial support registered for Moschip 7840/7820 USB Serial Driver           
mos7840: 1.3.2:Moschip 7840/7820 USB Serial Driver                              
usbcore: registered new interface driver mos7840                                
USB Serial support registered for moto-modem                                    
usbcore: registered new interface driver moto-modem                             
USB Serial support registered for navman                                        
usbcore: registered new interface driver navman                                 
USB Serial support registered for ZyXEL - omni.net lcd plus usb                 
usbcore: registered new interface driver omninet                                
omninet: v1.1:USB ZyXEL omni.net LCD PLUS Driver                                
USB Serial support registered for opticon                                       
usbcore: registered new interface driver opticon                                
USB Serial support registered for GSM modem (1-port)                            
usbcore: registered new interface driver option                                 
option: v0.7.2:USB Driver for GSM modems                                        
USB Serial support registered for oti6858                                       
usbcore: registered new interface driver oti6858                                
USB Serial support registered for pl2303                                        
usbcore: registered new interface driver pl2303                                 
pl2303: Prolific PL2303 USB to serial adaptor driver                            
USB Serial support registered for Qualcomm USB modem                            
usbcore: registered new interface driver qcserial                               
safe_serial: v0.0b:USB Safe Encapsulated Serial                                 
USB Serial support registered for safe_serial                                   
usbcore: registered new interface driver safe_serial                            
USB Serial support registered for siemens_mpi                                   
usbcore: registered new interface driver siemens_mpi                            
Driver for Siemens USB/MPI adapter                                              
Version 0.1 09/26/2005 Thomas Hergenhahn@web.de http://libnodave.sf.net         
USB Serial support registered for Sierra USB modem                              
usbcore: registered new interface driver sierra                                 
sierra: v.1.7.16:USB Driver for Sierra Wireless USB modems                      
USB Serial support registered for SPCP8x5                                       
usbcore: registered new interface driver spcp8x5                                
spcp8x5: v0.04:SPCP8x5 USB to serial adaptor driver                             
USB Serial support registered for symbol                                        
usbcore: registered new interface driver symbol                                 
USB Serial support registered for TI USB 3410 1 port adapter                    
USB Serial support registered for TI USB 5052 2 port adapter                    
usbcore: registered new interface driver ti_usb_3410_5052                       
ti_usb_3410_5052: v0.9:TI USB 3410/5052 Serial Driver                           
USB Serial support registered for Handspring Visor / Palm OS                    
USB Serial support registered for Sony Clie 3.5                                 
USB Serial support registered for Sony Clie 5.0                                 
usbcore: registered new interface driver visor                                  
visor: USB HandSpring Visor / Palm OS driver                                    
USB Serial support registered for Connect Tech - WhiteHEAT - (prerenumeration)  
USB Serial support registered for Connect Tech - WhiteHEAT                      
usbcore: registered new interface driver whiteheat                              
whiteheat: v2.0:USB ConnectTech WhiteHEAT driver                                
usbcore: registered new interface driver usblcd                                 
usbcore: registered new interface driver usbled                                 
usbcore: registered new interface driver usbtest                                
usbcore: registered new interface driver sisusb                                 
g_ether gadget: using random self ethernet address                              
g_ether gadget: using random host ethernet address                              
usb0: MAC 9e:88:35:89:d3:7e                                                     
usb0: HOST MAC 76:52:cf:4a:78:8b                                                
g_ether gadget: Ethernet Gadget, version: Memorial Day 2008                     
g_ether gadget: g_ether ready                                                   
musb_hdrc musb_hdrc: MUSB HDRC host driver                                      
musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 2              
usb usb2: New USB device found, idVendor=1d6b, idProduct=0002                   
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1              
usb usb2: Product: MUSB HDRC host driver                                        
usb usb2: Manufacturer: Linux 2.6.32 musb-hcd                                   
usb usb2: SerialNumber: musb_hdrc                                               
hub 2-0:1.0: USB hub found                                                      
hub 2-0:1.0: 1 port detected                                                    
input: TSC2004 Touchscreen as /class/input/input0                               
rtc-s35390a 1-0030: rtc core: registered rtc-s35390a as rtc0                    
Bluetooth: Virtual HCI driver ver 1.3                                           
Bluetooth: HCI UART driver ver 2.2                                              
Bluetooth: HCI H4 protocol initialized                                          
Bluetooth: HCI BCSP protocol initialized                                        
Bluetooth: HCILL protocol initialized                                           
Bluetooth: Broadcom Blutonium firmware driver ver 1.2                           
usbcore: registered new interface driver bcm203x                                
Bluetooth: Digianswer Bluetooth USB driver ver 0.10                             
usbcore: registered new interface driver bpa10x                                 
Bluetooth: BlueFRITZ! USB driver ver 1.2                                        
usbcore: registered new interface driver bfusb                                  
Bluetooth: Generic Bluetooth USB driver ver 0.6                                 
usbcore: registered new interface driver btusb                                  
Bluetooth: Generic Bluetooth SDIO driver ver 0.1                                
usbcore: registered new interface driver usbhid                                 
usbhid: USB HID core driver                                                     
TCP cubic registered                                                            
NET: Registered protocol family 17                                              
NET: Registered protocol family 15                                              
can: controller area network core (rev 20090105 abi 8)                          
NET: Registered protocol family 29                                              
can: raw protocol (rev 20090105)                                                
can: broadcast manager protocol (rev 20090105 t)                                
Bluetooth: L2CAP ver 2.14                                                       
Bluetooth: L2CAP socket layer initialized                                       
Bluetooth: SCO (Voice Link) ver 0.6                                             
Bluetooth: SCO socket layer initialized                                         
Bluetooth: RFCOMM TTY layer initialized                                         
Bluetooth: RFCOMM socket layer initialized                                      
Bluetooth: RFCOMM ver 1.11                                                      
Bluetooth: BNEP (Ethernet Emulation) ver 1.3                                    
Bluetooth: BNEP filters: protocol multicast                                     
Bluetooth: HIDP (Human Interface Emulation) ver 1.2                             
lib80211: common routines for IEEE802.11 drivers                                
lib80211_crypt: registered algorithm 'NULL'                                     
Power Management for TI OMAP3.                                                  
Disabling unused clock "vpfe_fck"                                               
Disabling unused clock "vpfe_ick"                                               
Disabling unused clock "emac_fck"                                               
Disabling unused clock "emac_ick"                                               
Disabling unused clock "mcbsp_fck"                                              
Disabling unused clock "mcbsp_fck"                                              
Disabling unused clock "mcbsp_fck"                                              
Disabling unused clock "mcbsp_ick"                                              
Disabling unused clock "mcbsp_ick"                                              
Disabling unused clock "mcbsp_ick"                                              
Disabling unused clock "gpt2_ick"                                               
Disabling unused clock "gpt3_ick"                                               
Disabling unused clock "gpt4_ick"                                               
Disabling unused clock "gpt5_ick"                                               
Disabling unused clock "gpt6_ick"                                               
Disabling unused clock "gpt7_ick"                                               
Disabling unused clock "gpt8_ick"                                               
Disabling unused clock "gpt9_ick"                                               
Disabling unused clock "wdt3_ick"                                               
Disabling unused clock "wdt3_fck"                                               
Disabling unused clock "gpio2_dbck"                                             
Disabling unused clock "gpio4_dbck"                                             
Disabling unused clock "gpio5_dbck"                                             
Disabling unused clock "gpio6_dbck"                                             
Disabling unused clock "gpt9_fck"                                               
Disabling unused clock "gpt8_fck"                                               
Disabling unused clock "gpt7_fck"                                               
Disabling unused clock "gpt6_fck"                                               
Disabling unused clock "gpt5_fck"                                               
Disabling unused clock "gpt4_fck"                                               
Disabling unused clock "gpt3_fck"                                               
Disabling unused clock "gpt2_fck"                                               
Disabling unused clock "gpt12_ick"                                              
Disabling unused clock "wdt1_ick"                                               
Disabling unused clock "wdt2_ick"                                               
Disabling unused clock "wdt2_fck"                                               
Disabling unused clock "gpio1_dbck"
Disabling unused clock "mcbsp_ick"
Disabling unused clock "mcbsp_ick"
Disabling unused clock "gpt10_ick"
Disabling unused clock "gpt11_ick"
Disabling unused clock "mcspi_ick"
Disabling unused clock "mcspi_ick"
Disabling unused clock "mcspi_ick"
Disabling unused clock "mcspi_ick"
Disabling unused clock "hdq_ick"
Disabling unused clock "hdq_fck"
Disabling unused clock "mcspi_fck"
Disabling unused clock "mcspi_fck"
Disabling unused clock "mcspi_fck"
Disabling unused clock "mcspi_fck"
Disabling unused clock "mcbsp_fck"
Disabling unused clock "mcbsp_fck"
Disabling unused clock "gpt11_fck"
Disabling unused clock "gpt10_fck"
Disabling unused clock "dpll4_m6x2_ck"
Disabling unused clock "dpll4_m5x2_ck"
Disabling unused clock "dpll3_m3x2_ck"
Disabling unused clock "sys_clkout1"
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 1
emac-mii: probed
rtc-s35390a 1-0030: setting system clock to 2012-05-26 13:29:24 UTC (1338038964)
VFS: Mounted root (jffs2 filesystem) on device 31:4.
Freeing init memory: 176K
udev: starting version 141
udev: deprecated sysfs layout; update the kernel or disable CONFIG_SYSFS_DEPRECATED; some udev features will not work correctly
eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:00, id=7c0f1)
PHY: ffffffff:00 - Link is Up - 100/Full
~# uname -a
Linux IA211100138 2.6.32 #5 PREEMPT Tue Nov 2 16:13:56 PDT 2010 armv7l GNU/Linux
~# cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 7 (v7l)
BogoMIPS        : 499.92
Features        : swp half thumb fastmult vfp edsp neon vfpv3 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x1
CPU part        : 0xc08
CPU revision    : 7

Hardware        : OMAP3517/AM3517 EVM
Revision        : 0020
Serial          : 0000000000000000
~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00080000 00020000 "xloader-nand"
mtd1: 001c0000 00020000 "uboot-nand"
mtd2: 00040000 00020000 "params-nand"
mtd3: 00500000 00020000 "linux-nand"
mtd4: 1f880000 00020000 "jffs2-nand"
~# cat /etc/fstab
# stock fstab - you probably want to override this with a machine specific one

rootfs               /                    auto       defaults              1  1
proc                 /proc                proc       defaults              0  0
devpts               /dev/pts             devpts     mode=0620,gid=5       0  0
usbfs                /proc/bus/usb        usbfs      defaults              0  0
tmpfs                /var/volatile        tmpfs      defaults,size=32M     0  0
tmpfs                /dev/shm             tmpfs      mode=0777             0  0
tmpfs                /media/ram           tmpfs      defaults,size=32M     0  0

# uncomment this if your device has a SD/MMC/Transflash slot
#/dev/mmcblk0p1       /media/card          auto       defaults,sync,noauto  0  0
~# mount
rootfs on / type rootfs (rw)
/dev/root on / type jffs2 (rw,relatime)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /dev type tmpfs (rw,relatime,size=8k,nr_inodes=8192,mode=755)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
usbfs on /proc/bus/usb type usbfs (rw,relatime)
tmpfs on /var/volatile type tmpfs (rw,relatime,size=131072k)
tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777)
~# df -ah
Filesystem                Size      Used Available Use% Mounted on
/dev/root               504.5M    163.9M    340.6M  32% /
proc                         0         0         0   0% /proc
sysfs                        0         0         0   0% /sys
none                      8.0K      8.0K         0 100% /dev
devpts                       0         0         0   0% /dev/pts
usbfs                        0         0         0   0% /proc/bus/usb
tmpfs                   128.0M     24.0K    128.0M   0% /var/volatile
tmpfs                   122.0M         0    122.0M   0% /dev/shm
~# cat /proc/meminfo      
MemTotal:         249860 kB
MemFree:          203680 kB
Buffers:               0 kB
Cached:            15728 kB
SwapCached:            0 kB
Active:            28796 kB
Inactive:           7320 kB
Active(anon):      20484 kB
Inactive(anon):        0 kB
Active(file):       8312 kB
Inactive(file):     7320 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         20416 kB
Mapped:             6068 kB
Shmem:                96 kB
Slab:               8312 kB
SReclaimable:       2716 kB
SUnreclaim:         5596 kB
KernelStack:         328 kB
PageTables:          204 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      124928 kB
Committed_AS:      24004 kB
VmallocTotal:     647168 kB
VmallocUsed:        1112 kB
VmallocChunk:     645884 kB
~# free
              total         used         free       shared      buffers
  Mem:       249860        46180       203680            0            0
 Swap:            0            0            0
Total:       249860        46180       203680
~# ps                          
  PID USER       VSZ STAT COMMAN
    1 root      1640 S    init [
    2 root         0 SW   [kthre
    3 root         0 SW   [ksoft
    4 root         0 SW   [watch
    5 root         0 SW   [event
    6 root         0 SW   [khelp
   10 root         0 SW   [async
  214 root         0 SW   [sync_supers]
  216 root         0 SW   [bdi-default]
  217 root         0 SW   [kblockd/0]
  228 root         0 SW   [ksuspend_usbd]
  233 root         0 SW   [khubd]
  248 root         0 SW   [kmmcd]
  254 root         0 SW   [bluetooth]
  259 root         0 SW   [cfg80211]
  271 root         0 SW   [musb_hdrc]
  273 root         0 SW   [rpciod/0]
  280 root         0 SW   [khungtaskd]
  281 root         0 SW   [kswapd0]
  282 root         0 SW   [aio/0]
  283 root         0 SW   [nfsiod]
  284 root         0 SW<  [kslowd000]
  285 root         0 SW<  [kslowd001]
  286 root         0 SW   [crypto/0]
  438 root         0 SW   [mtdblockd]
  614 root         0 SW   [usbhid_resumer]
  617 root         0 SW<  [krfcommd]
  652 root      2024 S <  /sbin/udevd -d 
 1241 root         0 SWN  [jffs2_gcd_mtd4]
 1373 root      4300 S    /usr/sbin/sshd 
 1378 root      2680 S    /sbin/syslogd -n -C64 -m 20 
 1380 root      2616 S    /sbin/klogd -n 
 1433 root      1548 S    /work/intelleflex/watchdog.bin 
 1440 root      1896 S    /sbin/getty 38400 tty1 
 1998 root      1548 S    /tcpserver.a8.bin /dev/ttyS0 115200 
 2000 root     29236 S    /usr/bin/ruby ./LJ.rb 
 2039 root      4352 S    sshd: root@pts/0  
 2044 root      2884 S    -bash 
 2076 root      2944 R    ps
~# /opt/ruby1.9.1/bin/ruby --version
ruby 1.9.1p378 (2010-01-10 revision 26273) [armv7l-linux-eabi]
~# /opt/ruby1.9.1/bin/rake --version
rake, version 0.8.7
~# /opt/ruby1.9.1/bin/gem --version
1.3.7
~# netstat -aep                                                                     
Active Internet connections (servers and established)                                
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/P
tcp        0      0 (null):2020             (null):*                LISTEN      1998/
tcp        0      0 (null):webcache         (null):*                LISTEN      2000/
tcp        0      0 (null):www              (null):*                LISTEN      2000/
tcp        0      0 (null):2005             (null):*                LISTEN      1998/
tcp        0      0 (null):ssh              (null):*                LISTEN      1373/
tcp        0      0 (null):ndtp             (null):*                LISTEN      1998/
tcp        0      0 (null):50342            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61414            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61452            TIME_WAIT   -    
tcp        0      0 (null):45087            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45102            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61462            TIME_WAIT   -    
tcp        0      0 (null):45067            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61464            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61442            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61429            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61461            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61447            TIME_WAIT   -    
tcp        0      0 (null):45083            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61463            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61424            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61394            TIME_WAIT   -    
tcp        0      0 (null):45085            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61466            TIME_WAIT   -    
tcp        0      0 (null):45071            (null):www              TIME_WAIT   -    
tcp        0      0 (null):50344            (null):www              TIME_WAIT   -    
tcp        0      0 (null):50339            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45070            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61423            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61430            TIME_WAIT   -    
tcp        0      0 (null):50341            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61457            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61406            TIME_WAIT   -    
tcp        0      0 (null):45078            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61425            TIME_WAIT   -    
tcp        0      0 (null):45097            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45104            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61392            TIME_WAIT   -    
tcp        0      0 (null):45111            (null):www              TIME_WAIT   -    
tcp        0      0 localhost.localdomain:49480 localhost.localdomain:2005 ESTABLISHE
tcp        0      0 (null):webcache         (null):61407            TIME_WAIT   -    
tcp        0      0 (null):45110            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61390            TIME_WAIT   -    
tcp        0      0 (null):45095            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45117            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61412            TIME_WAIT   -    
tcp        0      0 (null):50338            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61412            TIME_WAIT   -    
tcp        0      0 (null):50338            (null):www              TIME_WAIT   -    
tcp        0      0 (null):50346            (null):www              ESTABLISHED -    
tcp        0      0 (null):45092            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45091            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61431            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61459            TIME_WAIT   -    
tcp        0      0 (null):45108            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45076            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45099            (null):www              TIME_WAIT   -    
tcp        0      0 localhost.localdomain:49701 localhost.localdomain:www ESTABLISHED
tcp        0      0 (null):45112            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61402            TIME_WAIT   -    
tcp        0      0 (null):45115            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61419            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61455            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61432            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61460            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61393            TIME_WAIT   -    
tcp        0      0 (null):50335            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45086            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45064            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45084            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45103            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61450            TIME_WAIT   -    
tcp        0      0 localhost.localdomain:www localhost.localdomain:49701 ESTABLISHED
tcp        0      0 (null):50330            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45072            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45118            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45073            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61428            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61458            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61449            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61395            TIME_WAIT   -    
tcp        0      0 localhost.localdomain:57617 localhost.localdomain:2020 ESTABLISHE
tcp        0      0 (null):50340            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61427            TIME_WAIT   -    
tcp        0      0 (null):45080            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45098            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45093            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45089            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45106            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61443            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61411            TIME_WAIT   -    
tcp        0      0 (null):50345            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61435            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61438            TIME_WAIT   -    
tcp        0      0 localhost.localdomain:2005 localhost.localdomain:49480 ESTABLISHE
tcp        0      0 (null):45082            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61451            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61445            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61418            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61437            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61434            TIME_WAIT   -    
tcp        0      0 (null):50332            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61416            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61468            TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61405            TIME_WAIT   -    
tcp        0      0 (null):45074            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61415            TIME_WAIT   -    
tcp        0      0 (null):50337            (null):www              TIME_WAIT   -    
tcp        0      0 (null):50336            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45109            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45107            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45081            (null):www              TIME_WAIT   -    
tcp        0      0 (null):45077            (null):www              TIME_WAIT   -    
tcp        0      0 (null):webcache         (null):61408            TIME_WAIT   -    
tcp        0      0 (null):50334            (null):www              TIME_WAIT   -    
tcp        0      0 (null):ssh              (null):37271            ESTABLISHED 2039/
tcp        0      0 (null):webcache         (null):61408            TIME_WAIT   -    
tcp        0      0 (null):50334            (null):www              TIME_WAIT   -
tcp        0      0 (null):ssh              (null):37271            ESTABLISHED 2039/0
tcp        0      0 (null):45101            (null):www              TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61467            TIME_WAIT   -
tcp        0      0 (null):45105            (null):www              TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61410            TIME_WAIT   -
tcp        0      0 (null):45096            (null):www              TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61417            TIME_WAIT   -
tcp        0      0 (null):50333            (null):www              TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61426            TIME_WAIT   -
tcp        0      0 (null):50343            (null):www              TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61401            TIME_WAIT   -
tcp        0      0 localhost.localdomain:2020 localhost.localdomain:57617 ESTABLISHED 1998/tcpserver.a8.b
tcp        0      0 (null):webcache         (null):61420            TIME_WAIT   -
tcp        0      0 (null):45113            (null):www              TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61454            TIME_WAIT   -
tcp        0      0 (null):45075            (null):www              TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61456            TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61436            TIME_WAIT   -
tcp        0      0 (null):45100            (null):www              TIME_WAIT   -
tcp        0      0 (null):45116            (null):www              TIME_WAIT   -
tcp        0      0 (null):webcache         (null):61444            TIME_WAIT   -
tcp        0      0 (null):45090            (null):www              TIME_WAIT   -
netstat: /proc/net/tcp6: No such file or directory
udp        0      0 (null):1003             (null):*                            2000/ruby
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  2      [ ]         DGRAM                      1323 652/udevd           @/org/kernel/udev/udevd
unix  3      [ ]         DGRAM                      2296 1378/syslogd        /dev/log
unix  2      [ ]         DGRAM                      2303 1380/klogd

Kvalita podpory.

Support Intelleflexu je něco velmi žalostného. Podpora netuší vůbec nic, ani netušili, že nějaký FMR-5000 mají. Veškeré respons time byly v řádu týdnů a vše muselo jít přes dodavatele (přímo s námi se nikdo nechtěl bavit). Dodavatel řešil problémy výměnami za čtečky, jenž měl jako testovací/náhradní. U FMR-6000 jsme řešili to, že četla tagy na 100m a výkon nešel nijak regulovat, web rozhraní akceptovalo změny, zapsalo do souborů na čtečce, ale chovalo se to stejně. Když jsme se obrátili na support, tak jsme se odpovědi nedočkali, ale chtěli po nás elaborát, jak zařízení používáme, v jakém prostředí, proč to chceme apod. a po asi 5 týdnech nám bylo sděleno, že lze regulovat výkon jen přes API a toto nám již pomohlo.
Když jsme přecházeli z US na EU firmware, tak jsem porovnal oba fw a našel rozdíl jen v jednom parametru u jednoho scriptu (vypadalo to jak nahrávání fw do čtečky s jinými parametry). Ne, z podpory nechtěli říci, jak jednoduše pomocí nastavení změnit US fw na EU a museli jsme jim čtečky posílat.


Budoucnost.

Našli jsme v ČR výrobce RFID čteček, které jsou kompatibilní s našimi tagy, za které jsme dali stovky tisíc. Tímto výrobcem je Metra Blansko a.s.. Jejich RFID je plně otevřeno, umožňují úpravu fw, dodávají ukázkové zdrojáky v pythonu, odpovídají na cokoliv, nic netají a jsou plně otevřeni. Tyto RFID čtečky jsme začali dodávat do kiosků na automatizaci tisku lístků pro tahače a zatím plná spokojenost. V této souvilosti je v plánu zahájit testování těchto RFID čteček jako náhradu za Intelleflex. Pro ovládání a komunikaci se čtečkami je v plánu zakoupit tuto kompaktní průmyslovou hračku včetně GPIO a relé, které na pár místech taktéž používáme : TS-7550 a TS-ENC750
Ve finále se tedy předpokládá toto all-in-one řešení, které je tak třetinové velikosti, je plně otevřené, s více možnostmi a menším, leč dostatečným, výkonem a poloviční cenou (možná ještě menší).


Závěr.

V současné době je ve všech čtečkách smazaný log soubor a přesměrovaný do "/dev/null".
HW 230V Spínače jsem všude povypínal a již nejsou potřeba.
Zatím čtečky běží stabilně (když pominu restart webových služeb pokillováním oom-killerem)
Chvíli jsem si hrál s myšlenou posílit ram pomocí compcache, nebo něčeho podobného, ale nakonec jsem usoudil, že ten čas na úpravy se mi nevyplatí.
Na několika místech používáme FMR-6000, ale problémy s FW (né moc funkční web rozhraní, nulové zabezpečení) uzavřeností, supportem apod. samozřejmě zůstávají.

Ve skutečnosti bylo problémů ještě více a prošli jsme si více upgradama firmwarů, na jedné čtečce jsem detekoval poškozený storage apod., ale myslím, že to už nemělo cenu sepisovat a toto bohatě stačilo :).

Produkty firmy Intelleflex nemohu nikomu doporučit, ač nějaké zlepšení tam je, tak stále je to jedna velká tragedie.

Máte také podobné zkušenosti s některýma "enterprise" produktama?


UPDATE 29.8.2013 :
Nakonec nejdeme do té krásné, trochu cenově dražší, krabičky z USA. Důvodem je nejen cena, která by nevadila, ale hlavně i dostupnost. Máme už tedy objednané dva sety tohoto :

1x desku (65 EUR):
A20-OLinuXino-MICRO-4GB

1x MOD-IO2 (13 EUR)
MOD-IO2

2x RS232 (2x 6 EUR):
MOD-RS232

1x rozpětku (2 EUR):
UEXTx5

2x kabel (2x 2 EUR):
CABLE-IDC10-15cm

1x teplotní sensor (8 EUR):
MOD-TC

1x Teplotní sondu (3 EUR):
TC-K-TYPE

1x SD karta se systémem (10 EUR)
(použije se jako předloha, systém bude běžet na NAND flash paměti, s případnými dalšími ks se už nebude kupovat)
A20-Debian-SD

Poštovné (1-3 day): 21 EUR :
Shipping

Je to plně otevřené řešení a pěkná skládačka. Pokud se to osvědčí, tak si asi necháme udělat shield na míru pro nás, aby to bylo aspoň na úrovni a bude.
Taktéž se nezapomenu podělit o zkušenosti s nasazením :)

Zdar Max        

Hodnocení: 97 %

        špatnédobré        

Anketa

Tak jak to vidíte?
 (2 %)
 (17 %)
 (1 %)
 (9 %)
 (93 %)
Celkem 153 hlasů

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Luk avatar 26.8.2013 00:03 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Omlátit jim to o držku, nic lepšího si nezaslouží. Mimochodem mám zkušenosti podobného charakteru s čtečkami čárových kódů Motorola MC-2180. Bohužel se čtečkami (přenosnými na čárové kódy, autonomními, s OS, robustními a blbuvzdornými atd.) je ta potíž, že není skoro žádný výběr a pokud se dají dohromady požadované vlastnosti, prakticky nic k výběru nezbyde.

Zmíněná čtečka běží na Windows Mobile Core, což je OS, ve kterém není v podstatě nic, kromě holého systému. K tomu je tam přidaných pár aplikací, jedna pro čtení čárových kódů a pár dalších pro jiné věci. Vyvíjet pro to aplikace se moc nedá. Motorola poskytuje jakési prostředí RhoMobile Suite, založené na Eclipse, které ale nejde rozchodit (nebudu rozepisovat proč, bylo by to na déle). Navíc pro využití podstatné části API je potřeba dodatečná licence.

Sama Motorola doporučuje implementovat aplikace webově a poskytuje k tomu jakousi odvozeninu WebKitu, obohacenou o čtečkově specifické věci. Takže teoreticky to vypadá slibně. Jenže - není zlato vše, co se třpytí:
  • Ten WebKit je ukrutně pomalý. Načtený čárový kód doputuje do aplikace za cca 2 sekundy, což je děsivé. Při změně barvy pozadí z JS je vidět, jak se to celé zvolna překresluje.
  • Samovolně a nedeterministicky se vymazává Local Storage. Někdy přežije ukončení aplikace, někdy ne. Nedeterminističnost spočívá v nějaké neznámé závislosti na aplikaci, při opakovaném spouštění téže aplikace se to chová konzistentně.
  • Po delší době běhu aplikace se WebKit dostane do podivného stavu, z něhož se lze někdy dostat ukončením a opětovným spuštěním, jindy pomůže jen restart čtečky.
  • CORS a HTTPS se v tomto WebKitu nesnášejí a společně nefungují.
  • Při přepnutí do režimu suspend (po chvíli neaktivity) aplikace ztratí fokus a už ho sama nedokáže získat. Výsledek - vše se tváří normálně, ale nefunguje to. Musí se hrábnout prstem/stylusem na displej a teprve pak to ožije.
  • Není žádná intuitivní cesta, jak systém čistě vypnout nebo restartovat. Uživateli pak dojde trpělivost a vyndá baterku.
  • Má to ještě další neduhy, na které jsem si teď nevzpomněl a je to dobře, protože proč se rozčilovat víc, než je nutné...
LinuxMarket - linuxový e-shop | LinuxEXPRES - linuxový magazín | OpenOffice.cz - portál uživatelů OpenOffice/LibreOffice
26.8.2013 01:45 Kvakor
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
To čarování s MAC adresou tam mohlo být ze starší verze, co běžela na hardwaru bez MAC adresy. Podobné embedded desky bez MAC v síťové kartě jem viděl a MAC tam byla buď samostatně v NVRAM nebo se musela načítat ze souboru, aby to nedělalo brikule s DHCP (defaultně se generuje MAC náhodně).

A to logování do /dev/input je nejspíš něco, co zapoměli vývojáři odstranit, zkusil bych se kouknout do konfigurace udevu, co tam vlastně strkali a do čeho jim ta data lezla. Vůbec bych se nedivil, kdyby to původně bylo něco na způsob USB/serial konvertoru, co se z druhé strany chová jako sériová konzola.

PS: Vlastně mně napadá, že by vůbec nebylo špatné mít kabel, kde by z obou stran byly USB konektory a mezi tím dva USB/serial konvertory oddělené optočleny a zapojené křížem jako NULL modem. Nevyrábí někdo něco takového?
Jendа avatar 26.8.2013 07:05 Jendа | skóre: 75 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
PS: Vlastně mně napadá, že by vůbec nebylo špatné mít kabel, kde by z obou stran byly USB konektory a mezi tím dva USB/serial konvertory oddělené optočleny a zapojené křížem jako NULL modem. Nevyrábí někdo něco takového?
Ne, ale můžeš si to snadno postavit: FTDI Basic Breakout (lze koupit na DX za třetinu ceny) + dva optočleny.
27.8.2013 23:38 Dan Ohnesorg | skóre: 29 | blog: Danuv patentovy blog | Rudná u Prahy
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
A nebo se da koupit http://www.ftdichip.com/Products/Cables/USBtoUSB.htm - USB Null Modem Cable 2.5m, pod linuxem to chodi uplne v pohode. Daji se i konfigurovat, takze se da v udev zachytit vlastni kabel a podle toho spustit nejake akce. Na seriove konzole je to idealni.
I'm an Igor, thur. We don't athk quethtionth. Really? Why not? I don't know, thur. I didn't athk. TP -- Making Money
Jendа avatar 26.8.2013 06:55 Jendа | skóre: 75 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Vítej v Enterprise.

+1

Tohle je ten článek, který bych možná psal anglicky. Jinak to root heslo bych jim napsal a za týden poslal na full-disclosure mailing list.
Tato čtečka má 512MiB NAND flash + 256MiB ramky, takže tady se konečně trochu pochlapili (FMR-5000 má 32MiB a 32MiB).
LOL, nám čte RFIDy Arduino (16 KiB flash, 1 KiB RAM). Jak si může *čtečka* nevystačit s 32 MiB RAM? Já na takovém počítači provozuji i MySQL server :-D.

Co jim ten web interface přepsat do něčeho normálního? Vždyť když tam máš SSH, tak nepotřebuješ nic kromě vyčtení tagu.
Max avatar 26.8.2013 07:24 Max | skóre: 66 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Teď, když se čtečky nacházejí v relativně dostatečně funkčním stavu, to asi nemá smysl přepisovat. Článek vznikal na jaře a od té doby je funkčnost uspokojující. Osobně nejsem programátor, ale spíš slepovač kódu a programátoři nemají na takové věci time.
Zdar Max
Měl jsem sen ... :(
26.8.2013 09:12 Dodoj
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Dobry :-D Nejlepsi na tom je to ruby. Kvuli nemu byla vlastne vetsina tvych problemu. HW na to nestacil ani kdyz orezali pulku funkci toho weboveho rozhrani. To jim zase nejakej frikulin poradil, ze je to in. Nebo tam spis nastoupil nejaky studentik a zacal to tam bastlit po dalsim studentikovi, ktery se uklepl pri zadavani /dev/null.
26.8.2013 09:51 drunkezz | skóre: 33 | blog: kadeco
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex

+11...uplne presne.

dpc ruby vsade!..co to je za moda toto.?!?

Max avatar 26.8.2013 09:55 Max | skóre: 66 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Jinak na těch novějších RFID FRM-6000 vytěžuje ta web služba napsaná v ruby CPU na 60% nonstop.
zdar Max
Měl jsem sen ... :(
26.8.2013 10:35 Honz
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Dobrá machrovina... Hodně štěstí v dalším boji s emerickými imperialisty...
26.8.2013 11:46 Radovan Garabík
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Len by si autor mal dať pozor pri najbližšej návšteve USA, aby naňho už nečakali páni v tmavých oblekoch a slnečných okuliaroch... (viď Skľarov).
26.8.2013 19:31 Kvakor
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
To je pravda, vlézt do zařízení přes bootloader by možná ještě šlo okecat, ale to lámání hesel by už nejspíš bylo považopvané za porušení DMCA.
26.8.2013 13:13 Jan Grmela | skóre: 45 | blog: Kilo šťávy z lachtana | Brno
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Pro jeden projekt jsme teď nakoupili od Honeywellu čtečky QR kódů. Utěšuju se tím, že je tam Android ale po přečtení tvého článku se začínám trochu bát, jak moc dobře to bude fungovat...
Píšu pro Pivní recenze a protože mě to IT už fakt nebaví, tak jsme si s klukama postavili pivovar Lucky Bastard
Max avatar 26.8.2013 16:30 Max | skóre: 66 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
My kromě několika Motorol a dalších věcí máme i několik Honeywell Dolphin 9900. Po asi dvou letech nám dva odešly (z celkem asi 10). Odešla dotykovka. Problém je, že oni mají vše all-in-one, takže se oprava vůbec nevyplatí. Motorola je na tom mnohem líp, takže náhradní součástky jsou a jdou měnit a nemají to tak integrované, takže je oprava i levnější.
Odteď asi na Honeywall kašleme a pojedeme asi jen v Motorole.
Ještě se uvidí.
Zdar Max
Měl jsem sen ... :(
Dreit avatar 26.8.2013 16:27 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex

Bohužel "Enterprise" = "tajíme, mlžíme, hrabeme" :-(

 

Docela hezky by to šlo udělat s přenosným FM vysílačem (zlomek wattu, dosah pár metrů, levný a legální) a jednočipem. Master by mohl běžet na PC ve firmě (například nějaký slabý ARM) a postupně dokolečka vysílat ID možných přijímačů. Pokud by slave zachytil svoje ID, odeslal by odpověď. Tou by mohlo být téměř cokoli, od prostého "ANO" až po jméno řidiče, popis nákladu a tlak v pneumatikách. Pokud se odpověď v nastaveném timeoutu nevrátí, zkusí master komunikovat s dalším přijímačem. (vymyšleno za pochodu, určitě na tom najdete hromadu chyb)

Nope
26.8.2013 17:26 luv | skóre: 18 | blog: luv
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Enterprise je velice casto hruza, vyvijet vlastni system imho take ale neni idealni.
Dreit avatar 26.8.2013 18:11 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex

Ideální to není, ale kompletní dokumentace a člověk co ví jak to funguje je často k nezaplacení ;-)

Nope
26.8.2013 18:58 Michal Kašpar | skóre: 15
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex

Ideální to není, ale kompletní dokumentace a člověk co ví jak to funguje je často k nezaplacení ;-)

Hehe. A vy už jste skutečně někdy u interního vývoje trvajícího déle než rok viděl aspoň jedno z toho :-)?
26.8.2013 19:29 drunkezz | skóre: 33 | blog: kadeco
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex

+1 .... uz 3/4 roka sa bastli u nas esset management 2ja ludia ktori na tom robia pomaly zacinaju reverz engineering na moduloch co uz spravili:)

enterprise je jedine dobre co existuje, ale nie kvazi-enterprise co sa na to hraju firmicky atd... a este aj toho enteprise vendora je treba dobre vyberat. ked sme vyberali noveho blejd/nw vendora, sme mali od ciska IBM a HP kompletne riesenia asi 3 mesiace na testovanie, a obracali sme to hore dole (RAC testy,new perf I/O perf CPU perf, memory ...)

Dreit avatar 26.8.2013 20:12 Dreit | skóre: 15 | blog: Dreit a jeho dračí postřehy | Královehradecký kraj
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex

Znám člověka, co vytvořil několik navzájem podobných přístrojů a nemá problém se v nich vyznat. Nedávno mě překvapil když jsem měl jednu otázku na jeho schéma staré několik let a bez váhání mi vysvětlil důvody, proč to udělal přesně tak, jak to udělal. Nevěřil jsem svým očím.

Ale pravda, s dokumentací je to trochu horší. Schéma a osazovací plány desek sice jsou, ale pár záchytných míst kam připojit sondu a tabulka možných závat by často nebyla na škodu - teď se řešení všech anomálií rovná reverznímu inženýrství a část výrobků pro naší bezradnost končí v koši.

Nope
26.8.2013 17:19 luv | skóre: 18 | blog: luv
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Skvela prace, moc diky ze sis dal praci a sepsalo to do blogu :-)
xkucf03 avatar 27.8.2013 15:05 xkucf03 | skóre: 46 | blog: xkucf03
Rozbalit Rozbalit vše Certifikace
Má Intelleflex certifikát?
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
27.8.2013 15:42 Marv-CZ | skóre: 21
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Takovýto blog je lepší, než většina hlavních článků. Díky autorovi za něj.
29.8.2013 05:30 pc2005 | skóre: 36 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
To by asi bylo jednodušší od nich koupit prázdnej hardware a distribuci si sestavit sám. Kde mají ke stažení zdrojáky?
Max avatar 29.8.2013 07:37 Max | skóre: 66 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Co jsme se o tom bavili, tak tenkrát u nás prý bylo několik firem, co dodává řešení RFID a toto jediné řešení bylo funkční. Léta ubíhají, možná by se tenkrát našlo ještě něco lepšího, možná ne. Každopádně současný stav je po SW stránce taktéž lehce žalostný, nemluvě o supportu.
V článku píšu o krabičce z USA. Nakonec jsme se rozhodli pro něco jiného a mnohem levnějšího. Rozhodnutí takové padlo nejen kvůli ceně, ale hlavně kvůli dostupnosti a dobrému renomé. Už jsou tedy na cestě tyto dva komplety k testování :

1x desku (65 EUR):
A20-OLinuXino-MICRO-4GB

1x MOD-IO2 (13 EUR)
MOD-IO2

2x RS232 (2x 6 EUR):
MOD-RS232

1x rozpětku (2 EUR):
UEXTx5

2x kabel (2x 2 EUR):
CABLE-IDC10-15cm

1x teplotní sensor (8 EUR):
MOD-TC

1x Teplotní sondu (3 EUR):
TC-K-TYPE

1x SD karta se systémem (10 EUR)
(použije se jako předloha, systém bude běžet na NAND flash paměti, s případnými dalšími ks se už nebude kupovat) A20-Debian-SD

Poštovné (1-3 day): 21 EUR :
Shipping

Je to plně otevřené řešení a pěkná skládačka. Pokud se to osvědčí, tak si asi necháme udělat shield na míru pro nás, aby to bylo aspoň na úrovni a bude.
Zdar Max
Měl jsem sen ... :(
29.8.2013 21:19 pc2005 | skóre: 36 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Každopádně současný stav je po SW stránce taktéž lehce žalostný, nemluvě o supportu. V článku píšu o krabičce z USA.
A GPL zdrojáky k tomu dodávaj? Přece jen i nějakej IT student dokáže sestavit minimálně stejně "kvalitní" systém :-D. ... Hmm ale nevím zda se na obchod firma-firma GPL vztahuje (na pronájem ne).

Ad deska: Hezký, ale na RFID to je overkill :-D (i když jsem na webu výrobce nenašel frekvenci těch ARM jader). Ledaže by to byl decentralizovaný firemní server s přidruženou RFID funkcí :-D.
Max avatar 29.8.2013 22:35 Max | skóre: 66 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Nerozumím otázce :) Oni podle mně jen kupují desku od nějakého výrobce, který k tomu dodává i ten linuch s devel nástroji. Klasická emeded distribuce. Teď to z hlavy nevím, který to je. A co udělá Intelleflex? Přidá k tomu RFID a napíše management služby včetně API v ruby. Teď nechápu, k čemu by měl dodávat zdrojáky? K tomu jejich výtvoru v ruby nejsou potřeba, ne? A nějaká čistá clean linux distribuce, k čemu zdrojáky u ní? Problém je v tom ovládání RFID (v tom ruby bastlu). Napsat něco vlastního je jaksi mimo a je to práce bez budoucnosti.

Pokud jde o tu novou desku pro vlastní řešení. Co by jsi navrhl ty? Ušetřit 500,-Kč a koupit něco s 1% výkonem? Teď vážně, opravdu mi zkus doporučit něco v podobné cenové hladině, co bude mít GPIO, dvě relátka, dva seriáky a dvě USB + NAND flash a bude to otevřené řešení.
Zdar Max
Měl jsem sen ... :(
30.8.2013 02:18 pc2005 | skóre: 36 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
No asi je výhodnější koupit hotový řešení, ale blog tou vírou otřásá :-). Možná by bylo levnější si nechat sestavit distribuci od nějakýho brigádníka, nebo sám a vyhnout se tak problémům s firmwarem, přehříváním a s tím přidruženým offline časem. Na vlastní sestavení jsou ale potřeba drivery RFID popřípadně drivery toho SoC (pokud to není ve vanilla). V případě vlastní firmware by pak nehrozil konec podpory od výrobce (to už tady IMHO pár lidí psalo).

Dualcore ARM a dualcore 3D grafika jako jádro čtečky mě prostě overkill přijdou (nemůžu si pomoct :-( :-D). Většinu tvých požadavků ale splňuje třeba Rpí ne? Funkci: vyčíst data a poslat info na server + otevřít dveře by krásně dokázal 8bit MCU (i když, tam by asi byl problém s ethernetem, ale RS232/485 nebo klidně DTMF po interní telefonní lince :-D to jistí).

Ale pokud je u těch starejch čteček problém jen ve firmware, tak bych si je jen rootnul a upravil k obrazu svému.
Max avatar 30.8.2013 07:32 Max | skóre: 66 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
U RPI asi jedině model B, ale stále se mi nelíbí, že nemá NAND a systém by měl být tedy na SD kartě. A cenově není nijak moc vzdálen od onoho A20-OLinuXino. Samozřejmě se mi zdá výkon u A20 velký, na druhou stranu to spíš beru jako bonus, pokud by se to chtělo zneužít k něčemu jinému. Poměr cena/výkon/výbava je u A20 nejlepší, co jsem viděl a dodávací lhůty včetně všech rozšiřujících modulů jsou plně ok.

Pokud jde o to RFID, tak tam podle mně není chyba jen v SW (jehož ruby bastl jede 60-100% CPU,na nových RFID nejde pod 60%), ale i v HW (u toho staršího typu). Deklarují třeba funkčnost při 55 stupních, což je v reálných podmínkách bez chlazení nemožné dodržet (a kdo ví, zda ten první rok, co to běželo, nebylo slabší léto a tudíž ho to přežilo).
Z toho důvodu bych také rád u nového zařízení monitoroval teplotu, abychom měli nějaký přehled a znali reálné podmínky.
Zdar Max
PS: u té A20 - Cortex-A7 jsem se dočetl, že by měla být max frekvence 912MHz
Měl jsem sen ... :(
30.8.2013 22:28 pc2005 | skóre: 36 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Jo neexistence NAND je určitá nevýhoda, ale zase by ses nemusel bát, že překročíš počet zápisů na připájeným čipu. Jinak právě dvojjádro bude spíš to teplo generovat než třeba Microchip ;-). Ale 55 stupňů by měly ty desky vydržet všechny, u mého modemu (MIPS nebo ARM - teď si nejsem jistý) mám někdy dojem, že to je pracovní teplota :-D.
Max avatar 30.8.2013 22:31 Max | skóre: 66 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Právě, že to hřát nebude. Je to jak slabší mobil ;-).
O zápisy na NAND flash se netřeba bát, logy a vše ostatní půjde do ram.
Zdar Max
Měl jsem sen ... :(
Stanislav Brabec avatar 23.9.2013 17:10 Stanislav Brabec | skóre: 45 | Praha
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex
Skoro mi připadá, že tato firma nasadila své experty i do Národního bezpečnostního úřadu Slovenské republiky. Algoritmus generování master hesla i kvalita softwaru tomu odpovídá.

Zlatí čínští inženýři. Když jsem napsal zdrcující kritiku na jejich Bluetooth přijímač, poděkoval mi jeden z vývojářů firmware, a dostal jsem za odměnu opravenou verzi (pravda, tam zase přehodili levý a pravý kanál).
23.9.2013 20:44 pc2005 | skóre: 36 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Enterprise řešení RFID v podání firmy Intelleflex

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.