Portál AbcLinuxu, 1. května 2025 10:54
Jak lze totálně zabít RFID řešení v enterprise sféře postavené na linuxu aneb Intelleflex nebrat.
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.
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.
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 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.
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ě.
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 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.
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.
Č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).
Ř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ů).
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.
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.
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.
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
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)
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
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
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
# 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
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
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).
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)
Takže si shrneme, kde výrobce udělal chybu :
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
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.
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ší).
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?
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 :)
Tiskni
Sdílej:
/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?
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.
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
+11...uplne presne.
dpc ruby vsade!..co to je za moda toto.?!?
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)
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 tohoIdeální to není, ale kompletní dokumentace a člověk co ví jak to funguje je často k nezaplacení
+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 ...)
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.
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
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
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.