USBasp, bubuntu i udev

Kupiłem sobie ostatnio w nettigo zabawkę, czyli programator USBasp i jakieś kostki ATtiny 2313. Właściwie bez konkretnego planu, ot tak, żeby się pobawić dla zabicia czasu.
Wszystkiego bym się spodziewał, ale nie tego, że pół dnia będę kombinował jak to podpiąć do komputera (w sposób cywilizowany), a jeszcze nie wiem ile czasu zajmie mi podpięcie tego cuda do attiny. 😀 No to, żeby nie zapomnieć.

Kupiłem sobie ostatnio w nettigo zabawkę, czyli programator USBasp i jakieś kostki ATtiny 2313. Właściwie bez konkretnego planu, ot tak, żeby się pobawić dla zabicia czasu.
Wszystkiego bym się spodziewał, ale nie tego, że pół dnia będę kombinował jak to podpiąć do komputera (w sposób cywilizowany), a jeszcze nie wiem ile czasu zajmie mi podpięcie tego cuda do attiny. 😀 No to, żeby nie zapomnieć.

Problem sprowadza się do tego, że po podpięciu programatora, próba zaprogramowania (powietrza) kończy się dość popularnym jak się okazuje komunikatem:

wariat@lipa:~$ avrdude -p t2313 -c usbasp -v  empty2313at8.hex
(...)
         Using Port                    : /dev/parport0
         Using Programmer              : usbasp
avrdude: Warning: cannot query manufacturer for device: error sending control message: Operation not permitted
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

avrdude done.  Thank you.

I niby nic i żaden powód do tych kilku godzinnych poszukiwań (ok, w pracy między klientami, ale budujemy napięcie right? :D), gdyby nie to, że wszystko co udało mi się wygooglać to jakże odkrywcze rozwiązanie problemu: użyj sudo.
No nie, tak to się nie będziemy bawić. 😀

W każdym razie powyższe rozwiązanie działa, a to oznacza, że po prostu zwykły użyszkodnik nie ma praw do gadania z programatorem i trzeba to zmienić. Tylko tyle. Po kolei.

Jest sobie programator:

root@lipa:~# lsusb -s 002:007
Bus 002 Device 007: ID 16c0:05dc VOTI shared ID for use with libusb

i faktycznie gadać może do niego tylko root:

root@lipa:~# ls -l /dev/bus/usb/002/007
crw-rw-r-- 1 root root 189, 134 cze 19 12:05 /dev/bus/usb/002/007

Całe halo to dowiedzieć się z kim mamy do czynienia:

root@lipa:~# udevadm info -ap /sys/bus/usb/devices/2-1
(...)
 looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1':
    KERNEL=="2-1"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
(...)
    ATTR{authorized}=="1"
    ATTR{manufacturer}=="www.fischl.de"
    ATTR{product}=="USBasp"
(...)

I dopisać jedną regułkę udev:

root@lipa:~# cat /etc/udev/rules.d/99-usbasp.rules 
SUBSYSTEM=="usb", DRIVER=="usb", ATTR{manufacturer}=="www.fischl.de", ATTR{product}=="USBasp", GROUP="dialout"

Odłączyć, podłączyć i po robocie:

root@lipa:~# ls -l /dev/bus/usb/002/012
crw-rw-r-- 1 root dialout 189, 139 cze 19 12:43 /dev/bus/usb/002/012

Dlaczemu dialout? A bo arduino po zainstalowaniu kazało dodać usera do tej grupy, a że jedno i drugie leżało obok siebie to mimo, że grupa jak gdyby trochę od pały to w sumie czemu nie.
Teraz zostaje mi spięcie tego z ATtiny, to dopiero może być wyzwanie … dla mnie znaczy. 😀

Aktualizacja przez zmanę nazwy…

Przez jakiś czas dziwiłem się dlaczego tu i tam opowiadają o OO.o-3.3, a tu mi się nic nie buntuje. Dziś mnie olśniło, żeby sprawdzić i aktualizacja się znalazła.

#  eix -c "(libre|open)office$" 
[N] app-office/libreoffice (3.3.1): LibreOffice, a full office productivity suite.
[I] app-office/openoffice (3.2.1-r1@21.04.2011): OpenOffice.org, a full office productivity suite.
Found 2 matches.

A najbardziej wkurza mnie to, że ja tę kobyłę kompiluję (tu w pracy przez +16h) tylko dlatego, że wersja binarna ma jakiś dupny windziany fileselector zakorzeniony w latach 80tych zeszłego wieku.

Psuje atakują … permanentnie :D

Szedłem sobie spać, zamykam terminale i co widzę? Jakiś nowy sposób wywracania ludziom ludziom daemona ssh?

/var/log/sshd/current
Apr 21 23:23:45 [sshd] SSH: Server;Ltype: Version;Remote: 119.145.255.146-41652;Protocol: 2.0;Client: libssh-0.1
Apr 21 23:23:47 [sshd] SSH: Server;Ltype: Version;Remote: 119.145.255.146-41837;Protocol: 2.0;Client: libssh-0.1
Apr 21 23:23:50 [sshd] SSH: Server;Ltype: Version;Remote: 119.145.255.146-42020;Protocol: 2.0;Client: libssh-0.1
Apr 21 23:23:53 [sshd] SSH: Server;Ltype: Version;Remote: 119.145.255.146-42193;Protocol: 2.0;Client: libssh-0.1

W każdym razie denyhosts się nie pokapował, że coś się dzieje. A sam sposób wydaje się nie działać. Ale jak ten sam burak zaczął próbować to czego zwykle próbują …

/var/log/sshd/current
Apr 21 23:23:58 [sshd] SSH: Server;Ltype: Version;Remote: 119.145.255.146-42573;Protocol: 2.0;Client: libssh-0.1
Apr 21 23:24:00 [sshd] Invalid user shoutcast from 119.145.255.146
Apr 21 23:24:01 [sshd] SSH: Server;Ltype: Version;Remote: 119.145.255.146-42739;Protocol: 2.0;Client: libssh-0.1
Apr 21 23:24:02 [sshd] Invalid user stephanie from 119.145.255.146

to się w końcu połapał 😉

/var/log/sshd/current
Apr 21 23:24:30 [sshd] SSH: Server;Ltype: Version;Remote: 119.145.255.146-44837;Protocol: 2.0;Client: libssh-0.1
Apr 21 23:24:32 [sshd] Invalid user web from 119.145.255.146
Apr 21 23:24:33 [sshd] refused connect from 119.145.255.146 (119.145.255.146)

Wyścig z czasem :D

Po tym jak laptok praktycznie wyzionął ducha, a ja przywróciłem do łask grzyba podjąłem decyzję, że w miarę możliwości trochę gościa zmodernizuję. Pierwszy pomysł to wetknąć mu możliwie najszybszy CPU. Z lektury listy wynikało, że byłby to albo Athlon 64 x2 4800+ albo Athlon FX-60 ze wskazaniem na tego ostatniego.
Na Alledrogo nie występuje, ale okazało się, że bez problemu można gościa kupić na eBayu po drugiej stronie wielkiej kałuży.

A gdzie ten wyścig? No bo komp. przecież fotografuje. O każdej pełnej godzinie, ja zabrałem się za wymianę procka o 21:20 … ale się udało. 😀 Co prawda stary procek przykleił się do radiatora przez co wylazł z socketa bez jego otwierania, radiator był na tyle zabrudzony że go po proostu opłukałem wrzątkiem bo czyszczenie na sucho zajęłoby za dużo czasu ale wszystko wskazuje na to, że nic się nie popsuło no bo w końcu to piszę, co wskazuje, że Obie połówki nowego CPU czują się dobrze.
Chce ktoś Athlon 64 3500+ Socket 939?

Jupitery 2.0

Co prawda układ z przekaźnikiem, czyli jupitery 1.0 działał, ale Caladan któremu pozwoliłem sobie pozawracać głowę uznał, że nawet jeśli działa to tylko przez przypadek. Mnie samemu nie wszystko wydawało się być ok, ale w końcu działało. W głowie był plan (jak się później okazało całkiem słuszny), żeby przekaźnikiem sterować za pomocą tranzystora npn. Tylko wszystkie próby namalowania tego na kartce (tak naprawdę jeszcze przed ostatecznym zmontowaniem poprzedniego układu) rozbijały się o eee tak to chyba nie zadziała.

Co prawda układ z przekaźnikiem, czyli jupitery 1.0 działał, ale Caladan któremu pozwoliłem sobie pozawracać głowę uznał, że nawet jeśli działa to tylko przez przypadek. Mnie samemu nie wszystko wydawało się być ok, ale w końcu działało. W głowie był plan (jak się później okazało całkiem słuszny), żeby przekaźnikiem sterować za pomocą tranzystora npn. Tylko wszystkie próby namalowania tego na kartce (tak naprawdę jeszcze przed ostatecznym zmontowaniem poprzedniego układu) rozbijały się o eee tak to chyba nie zadziała.

Anyway ponieważ jak wiadomo jednostka z wiedzą regularnie naciskana wiedzę uwalnia, doszło po kilku wymianach zdań z Caladanem do powstania projektu jupitery-2.0 gdzie przekaźnik został całkowicie usunięty, właściwie wszystko zostało całkowicie usunięte, został tranzystor n-mosfet.
Niebagatelną rolę odegrał prosty symulator układów: Circuit Simulator Applet. Naprawdę super zabawka, oczywiście pewnie wysoce nieprofesjonalna, ale w tym też jest jej siła, bo zamiast straszyć po prostu działa.
No i tak powstało ten cud XXI wiecznej techniki 😀



Można oczywiście całość odpalić we wspomnianym symulatorze, wystarczy zaimportować opis i powinno zadziałać.

Słowem bym się teraz nie odezwał gdyby nie to, że zmontowałem, działa, i w końcu kwiatek się fotografuje. Co z tego wyniknie trudno stwierdzić, na razie mamy eksperymentalne studio badawcze:

Naszpikowane zaawansowaną elektroniką 😀

W międzyczasie zrobiłem wywiad w kwiaciarni w poszukiwaniu gotowego pacjenta aby nie ryzykować szoku termicznego po przenosinach z trawnika do dom^W laboratorium. Niestety, wszystko co da się kupić jest już poważnie wyrośnięte i się nie nadaje. Wykopałem więc Krokusa zgodnie z pierwotnym planem, odpaliłem małpy i … zdjęcia już się robią.

A co z tego wyniknie … to się okaże za kilka(naście?) dni.

W każdym razie w tej chwili fotografuję z prędkością 1/3600 fps czyli po ludzku mówiąc jedno zdjęcie na godzinę. Wydaje się, że to nawet za gęsto, zobaczymy. Sam kwiatek jest w dość ciemnym kącie, nie wiem czy to dobry pomysł, ale idea jest taka, żeby się za bardzo chłopak nie pospieszył i dał sobie zrobić choć kilka setek zdjęć zanim (jeśli) zakwitnie.

Tak samo jak podczas fotografowania karmnika wszystko odpalane jest z crona, z tą różnicą, że
gdyby komputer był wyłączony, to router go odpali wysyłając pakiet WoL, a sam skrypt fotografujący dodatkowo zajmuje się zapalaniem i gaszeniem oświetlenia.

$ cat get-image-0.4-krokus.sh 
#!/bin/bash


# get-image v 0.4 codename krokus :D

# MANUAL:
# ./get-image "/destination/directory/"

DEST_DIR="/tmp/"
if [ -d "$1" ]; then
    DEST_DIR="$1"
fi
FILENAME="${DEST_DIR}$( date "+%Y%m%d_%H%M%S" ).jpg"

TEMP_DIR=`mktemp -d /tmp/get-image-XXXXX`
cd ${TEMP_DIR}

# światło świeć
stty -F /dev/ttyUSB0 crtscts
sleep 30

wget http://admin:1234@192.168.1.12/snapshot.jpg \
    -O photo.jpg &> /dev/drzewo 

# już nie
sleep 5
stty -F /dev/ttyUSB0 -crtscts

convert photo.jpg                                                   \
        -gravity NorthEast                                          \
        -font "/home/wariat/.fonts/digital/digital_7/digital-7.ttf" \
        -pointsize 100                                              \
        -fill "#19adf4dd"                                           \
        -annotate +10+10 "$( date "+%e.%m.%Y" )"                    \
        "$FILENAME"

cd ~
rm -rf ${TEMP_DIR}

Poza tym, żeby komp nie chodził jak nie jest potrzebny po zrobieniu zdjęcia w sposób dość mało wyszukany sprawdza czy przypadkiem ktoś go nie używa i się wyłącza:

$ cat poweroff.sh 
#!/bin/bash

if [ -z "$(who)" ] && ! [ -f "/tmp/keeprunning" ]
then
    echo "nobody there"
    sudo poweroff
fi

Jupitery

No to skoro już zostałem filmowcem i nawet wykombinowałem, że kolejna superprodukcja to powinno być coś co dzieje się naprawdę wolno trzeba było się zabrać za robotę. Plan z fotografowaniem kwiatka nawet mi się podoba, ale zaraz przychodzi myśl, że to wszystko tak po prostu się nie uda. Żeby robić zdjęcia trzeba mieć światło, światło jest w dzień. Można fotografować kwiatek raz dziennie w południe, ale wtedy co? 30 klatek po miesiącu, nah.
Trzeba światła, sztucznego … przez miesiąc lub dwa i żeby nikt nie wyłączył? Nah. I tak dochodzimy do projektu jupitery 😀 Kompletnie się na tym nie znam, pewnie coś poważnie spierdzieliłem, ale … działa :D.

No to skoro już zostałem filmowcem i nawet wykombinowałem, że kolejna superprodukcja to powinno być coś co dzieje się naprawdę wolno trzeba było się zabrać za robotę. Plan z fotografowaniem kwiatka nawet mi się podoba, ale zaraz przychodzi myśl, że to wszystko tak po prostu się nie uda. Żeby robić zdjęcia trzeba mieć światło, światło jest w dzień. Można fotografować kwiatek raz dziennie w południe, ale wtedy co? 30 klatek po miesiącu, nah.
Trzeba światła, sztucznego … przez miesiąc lub dwa i żeby nikt nie wyłączył? Nah. I tak dochodzimy do projektu jupitery 😀 Kompletnie się na tym nie znam, pewnie coś poważnie spierdzieliłem, ale … działa :D.

Plan jest prosty, kilka okrutnie silnych LEDów oświetla aktora na czas zrobienia zdjęcia, fotki trzaskane są co godzinę lub dwie, czyli z prędkością 12 lub 24 klatki na dzień (360 lub 720 klatek na miesiąc), odtwarzane z prędkością 12fps. Powinno dać radę tak na oko.
Router będzie budził kompa 5 minut przed pełną godziną, cron uruchomi zestaw małp … ma szanse prawda? Jako aktor wstępnie został wybrany Krokus, podobno małe szanse, ale może się udać, że nie zdechnie po przeniesieniu z dworu do mieszkania.
Pozostało wykombinowanie oświetlenia… nie za bardzo wiedziałem jak się za to zabrać, więc zacząłem od odpowiedzi na proste pytanie. Czym mi to by było najwygodniej włączać? I wyszło, że najłatwiej jest zapalać i gasić RTS w serialu. Powstał potwór który działa choć chyba nie powinien. I tu mam kłopot, bo kompletnie się na tym nie znam ale coś jest nie tak. Schemat potwora wygląda tak:



I to działa… choć nie powinno chyba. Już tłumaczę może jakaś dobra dusza mnie oświeci (jak ten jupiter ;-). RTS może być podniesiony albo nie. Podniesiony daje +7V (w mojej wersji adaptera USB RS232), nie podniesiony ma tam -7V. I jedno i drugie powinno zamknąć przekaźnik (taki tam mam: Coto 9007-12-00), powinno prawda?
Żeby było z sensem jak się wydaje po drodze między RTS, a wyjściem diody zamontowanej równolegle do cewki przekaźnika powinna być jeszcze jedna dioda, która +7V przepuści, ale -7V już nie. Tylko jak ona tam jest to nie działa, a jak jej nie ma to tak.
Mam taką teorię (mówiłem, że się nie znam, więc mam własne teorie tam gdzie inni mają wiedzę), że kiedy RTS jest zdjęty i zapodaje -7V to prąd ma wybór, albo poleci przez cewkę gdzie napotka opór 1kohm albo sobie przeleci przez równolegle podpiętą diodę bez żadnych przeszkód. A skoro tak się da to za mało prądu płynie przez cewkę i się nie zamyka. Ma to jakiś sens?
Ale to nie rozwiązuje problemu z niedziałaniem kiedy na miejscu jest ta druga dioda która -7V zamyka po stronie seriala i nie puszcza. Może być tak, że sama dioda pobiera wystarczająco dużo prądu, żeby zabrakło go na zamknięcie cewki? Z RS232 pociągnąć za dużo nie można to jest jasne, nigdy się toto do zasilania niczego nie nadawało, może wydajność ledwo starcza na zamknięcie przekaźnika i cokolwiek po drodze to o jedno cokolwiek za dużo. Takie mam małe przemyślenia. Mam też dużą wątpliwość wyrażoną zdaniem, kiedy i czemu zrobię kuku mostkując tak bezczelnie RTS do masy via dioda kiedy światło jest wyłączone, czyli przez 99% czasu kiedy włączony jest komputer.

No ale najważniejsze, że działa mam więc platformę zdjęciową z reflektorami

Zaawansowaną wariacką elektronikę (no co! :D)

Przygotowane to to jest na więcej niż trzy lampy, ale te trzy wystarczą a i tak potrzebują razem coś koło 1A, więcej chyba nie powinienem puszczać przez ten przekaźnik.

Teraz wystarczy tylko:

stty -F /dev/ttyUSB0 crtscts

i świeci

a później:

stty -F /dev/ttyUSB0 -crtscts

i zgaśnie. Jednym słowem studio praktycznie gotowe, czas zabrać się za dostrojenie nowego zestawu małp do obsługi aparatu i klaps (a później albo klops, albo będę dziękował hackerowi na gali po rozdaniu przyszłorocznych oscarów ;-).

Javowy symulator układu jest rewelacyjny 😀 Zabawka w sam raz dla wariata. układ włącznika z kompletem diod.

Błędy w Oyo – przyjęliśmy zgłoszenie posłaliśmy dalej

Trochę to trwało, choć uważam, że znośnie zwracając uwagę, że koniec roku, urlopy, zaspy śnieżne, choroby. Nieważne. Dostałem odpowiedź z Medionu na przesłany wcześniej Oyo BugReport.

Trochę to trwało, choć uważam, że znośnie zwracając uwagę, że koniec roku, urlopy, zaspy śnieżne, choroby. Nieważne. Dostałem odpowiedź z Medionu na przesłany wcześniej Oyo BugReport.

Na wstępie Pan Robert z Medionu wyraża zaniepokojenie, że przesłana odpowiedź mnie nie usatysfakcjonuje. Trochę na wyrost, bo z mojego punktu widzenia, na ten moment liczy się, że coś się dzieje. Trudno się spodziewać, że nagle uda się wyeliminować wszystkie błędy w firmware i powstanie produkt doskonały.
Szczególnie, że wszystko wskazuje na to, że autorem programu stanowiącego UI w Oyo nie jest Medion tylko Qisda (to moje gdybanie, nie udokumentowana wiedza) i to z tym kawałkiem (oczywiście zamkniętym) firmware są największe kłopoty. Informacja o problemach musi iść małymi kroczkami w górę.

Wiadomość zawiera prośbę (tak ją potraktuję) o nie kopiowanie jej treści, a że nie chodzi o to, żeby się drażnić z firmą krótko … o ile ja potrafię coś krótko i treściwie 😉
W sprawie polskich znaków diakrytycznych – czyli najpoważniejszym problemie – błąd został potwierdzony już wcześniej, niestety najbliższa aktualizacja go nie eliminuje.
Już wcześniej wiedzieliśmy, że Empik dostał z Medionu nową wersję firmware na początku grudnia. Dlaczego jej nie dystrybuują nie mam pojęcia. Jeśli jedynym powodem jest to, że nie eliminuje ona najbardziej dotkliwego problemu (choć pewnie eliminuje inne) to można to pomału kwalifikować w kategorii kolejnej próby przestrzelenia sobie stopy przez Empik.
Jeśli chodzi o zawieszanie się Oyo w przypadku otwarcia książki bez spisu treści, czy bardziej konkretnie dowolnego epub z jakim miałem do czynienia wydanego przez O’Reilly. Błędu nie udało się podobno zreprodukować. Zaproponowałem przesłanie nagrania video. Pliku demonstracyjnego przesłać przecież nie mogę, bo byłaby to nieautoryzowana dystrybucja dzieła chronionego blah, blah, blah. Swoją drogą trzeba by przetestować jak się ebooki od O’Reilly zachowują w innych czytnikach w takiej sytuacji (próba wyświetlenia spisu treści). Oyo wisi (choć dycha). To video jak starczy mi cierpliwości spróbuję i tak nagrać, na wszelki wypadek i dla treningu.
W przypadku pozostałych problemów odpowiedź sprowadzała się do informacji, że przekazano dalej do odpowiedniego działu. Przy wiedzy jaką mam teraz można zakładać, że większości błędów nie da się szybko rozwiązać, bo tak jak problem polskich znaków dotyczą one nie tyle Oyo co aplikacji QBookApp, można się więc domyślać, że jedyne co Medion może to przesłać raport do autora programu (Qisda ?).

Ogólnie można z jednej strony podsumować, że dostałem odpowiedź bez odpowiedzi i jedyne co udało się uzyskać to potwierdzenie, że ktoś przesłane wiadomości czyta. Z drugiej strony o kłopotach z diakrytykami pewnie pisało wiele osób, a błąd jest poważny i skutecznie utrudnia czytanie książek, liczę więc, że nie będziemy czekali na jego poprawienie w nieskończoność, a dla mnie jak już wspomniałem najważniejsze jest uczucie, że gdzieś tam powoli coś się dzieje.

Zabawki

Święta, święta i … nowe zabawki 😀 Młody kupił sob^W^W dostał od gwiazdora iPada. No to się cały weekend bawiłem, nie podejmuję się oceniać obiektywnie, co najwyżej powiem, że utwierdziłem się w tym, że nie kupiłbym dla siebie chyba, że w cenie za jaką urządzenie nigdy się nie pojawi. Ale coś się jednak zdarzyło…

Święta, święta i … nowe zabawki 😀 Młody kupił sob^W^W dostał od gwiazdora iPada. No to się cały weekend bawiłem, nie podejmuję się oceniać obiektywnie, co najwyżej powiem, że utwierdziłem się w tym, że nie kupiłbym dla siebie chyba, że w cenie za jaką urządzenie nigdy się nie pojawi. Ale coś się jednak zdarzyło…

Nic nie zmieniło się w moim podejściu do przenośnej przeglądarki. Jak już jestem w zasięgu internetu to mam na miejscu komputer, a w nim przeglądarkę internetową w dodatku obsługującą flash. Tu przy okazji warto dodać, że cieszy mnie niezmiernie, że produkty Apple flasha nie obsługują, bo daje to nadzieje na zniknięcie pierdzielonych flashowych menu ze stron. W końcu kto chce, żeby jego strona nie działała na tak cudownym urządzeniu jak iPad.
Można oczywiście na tablecie czytać ale … do czytania mam już coś lepszego i znacznie tańszego. Co mnie więc zafascynowało?
Otóż to świetna zabawka do grania w gry. Cały weekend budowałem jakieś miasto, wioskę smurfów, strzelałem kurczakami do świnek, zrywałem bombki z choinki, zjadałem rekinem ludzi i … huk wie co jeszcze. Rewelacja! Zabawa jest tak świetna, że zrewidowałem poglądy … z 200zł mógłbym za takie cudo dać. Tyle, że to o jedno zero za mało. Wreszcie …
Przyszedł hacker, i też zaczął się bawić. Najpierw malowaliśmy obrazki przez godzinę i wciąż nie było dość, później młody zainstalował kilka gier dla dzieci i hacker świetnie sobie radził szukając zwierzaków w memory. Maluch już nawet troszeczkę sobie radzi z myszką, ale jednak nie na tyle dobrze, żeby móc bawić się samemu. W domu czasami gramy w gcompris jednak tam hacker nie jest w stanie do końca bawić się sam, więc albo po prostu lata helikopterem bez sensu, albo ciacha literki (czyli poznaje klawiaturę). Równie dużo radości sprawia hackerowi granie w gedit, w vi jeszcze nie próbowaliśmy grać ;-). Ale jednak, dotykowy interface spowodował, że hacker po prostu bawił się sam bez pomocy. Wartość urządzenia w moich oczach wzrosła znacznie. Powiedzmy, że 400 można by dać … na Apple nie starczy ale…

Przecież są chińskie tanie tablety z androidem. Najtańszą bezczelną podróbkę iPada znalazłem na Alledrogo za mniej niż 300zł. (!!!) Kurcze! Jest co prawda zonk, bo sprzedawcy tych podróbek nie wyglądają zbyt wiarygodnie, a na dodatek moja wiedza o tabletach jest żadna, nie mam więc pojęcia, czy każdą taką zabawkę z androidem da się podpiąć pod Android Market (czyli tanie i proste w obsłudze źródło softu). Ale tak czy siak po raz pierwszy zaczynam poważnie rozważać. W końcu trzeba szkolić małego hackera wszelkimi dostępnymi sposobami.

Ma ktoś doświadczenie z takimi tanimi zabawkami? Pomacać niemożna, sprzedawcy mało wiarygodni, nie byłoby mi łatwo się zdecydować. A może się mylę? Może to po porostu działa?

Oyo dostęp bez kabla

Ok, nie ma problemu z zalogowaniem się do Oyo i być może połączenie po tty jest ok, ale w końcu po co Oyo ma WiFi? No i po co ktoś kiedyś wymyślił protokół telnet którego od lat nie używamy bo wysyłanie haseł otwartym tekstem po sieci jest passe? 😉

Ok, nie ma problemu z zalogowaniem się do Oyo i być może połączenie po tty jest ok, ale w końcu po co Oyo ma WiFi? No i po co ktoś kiedyś wymyślił protokół telnet którego od lat nie używamy bo wysyłanie haseł otwartym tekstem po sieci jest passe? 😉

Można i tak i nie ma tu wielkich czarów. Połączenie po serialu odpalamy plikiem o nazwie usbdebug w głównym katalogu na karcie SD. Jeśli on (plik) tam jest to podczas wykonywania /linuxrc zadziała magia zapisana słowami:

# KEY_HOME, KEY_BOOK           
# /usr/local/sbin/hotkey_cmd /usr/local/sbin/usbdebug.sh 102 247
mount /dev/mmcblk1p1 /mnt/mmc1p1       
if [ -f /mnt/mmc1p1/usbdebug ]; then
   echo "usbdebug"                                      
   /usr/local/sbin/usbdebug.sh    
fi
umount /mnt/mmc1p1

No to wpiszmy sobie pomiędzy koniec warunku, a umount jeszcze jeden ficzer czyli tak:

mount /dev/mmcblk1p1 /mnt/mmc1p1       
if [ -f /mnt/mmc1p1/usbdebug ]; then
   echo "usbdebug"                                      
   /usr/local/sbin/usbdebug.sh    
fi
if [ -f /mnt/mmc1p1/telnet ]; then  #
   echo "telnet"                    #
   inetd                            #         
fi                                  #  
umount /mnt/mmc1p1   

i już. Teraz wystarczy aby na karcie sd znajdował się plik telnet, a po uruchomieniu WiFi w Oyo …

wariat@coyote ~ $ nmap 192.168.1.103
Starting Nmap 5.21 ( http://nmap.org ) at 2010-12-20 01:33 CET
Nmap scan report for 192.168.1.103
Host is up (0.0018s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
7/tcp   open  echo
13/tcp  open  daytime
21/tcp  open  ftp
23/tcp  open  telnet
37/tcp  open  time
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 8.77 seconds
wariat@coyote ~ $ telnet 192.168.1.103
Trying 192.168.1.103...
Connected to 192.168.1.103.
Escape character is '^]'.

Samsung login: root
Password: SReader
[root@Samsung ~]# uname -a
Linux Samsung 2.6.21.5-cfs-v19 #183 Tue Oct 19 14:27:21 CST 2010 armv5tejl unknown
[root@Samsung ~]# exit
logout
Connection closed by foreign host.

Minusem jest to, że Oyo nie pilnowane zrzuci połączenie z WiFi, ale zmiana w porównaniu z połączeniem po serialu jest niewielka, bo przejście w tryb uśpieni^W zawieszenia 😀 zamyka też połączenie tty. Ale połączenia po tty wznowić (w punkcie gdzie się zerwało) się nie da, a tu … trzeba tylko wykombinować screena. Skąd? A dokładnie tak jak na na Frank’s Wiki instalują nano.

wget http://ftp.us.debian.org/debian/pool/main/s/screen/screen_4.0.3-14%2bb1_armel.deb
wget http://ftp.us.debian.org/debian/pool/main/n/ncurses/libncursesw5_5.7+20100313-4_armel.deb
wget http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.1-6.1_armel.deb

FILES=$(ls /root/*deb)
cd /
for NAME in $FILES ; do
    ar -x "${NAME}"
    tar zxf data.tar.gz
    rm debian-binary data.tar.gz control.tar.gz
    rm "${NAME}"
done
cd -

do kompletu jakiś znośny .screenrc

[root@Samsung ~]# cat .screenrc 
vbell on

hardstatus on
hardstatus alwayslastline 
hardstatus string "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= @%H - %LD %d %LM - %c"

bindkey "^[[1;5D" prev  # change window with ctrl-left
bindkey "^[[1;5C" next  # change window with ctrl-right

i już znikające połączenie nie straszne. 🙂

Teoretycznie wypadałoby teraz zmienić hasło roota na jakieś mniej znane, z drugiej strony wystarczy pamiętać, żeby nie świecić otwartym telnetem w publicznych hotspotach i ewentualnie aby nie przekierować portów w routerze na IP zabawki.

Wujek John wykonał robotę … Oyo 0wned ;-)

Jednak co specjalista to specjalista. 😉 Empik aktualizacji do Oyo opublikować nie chce (choć podobno Medion już jakiś czas temu przesłał plik z nowym firmware). Trzeba było pogadać z zawodowcami ;-).

# john -show passwd 
root:SReader:0:0:root:/root:/bin/bash

1 password hash cracked, 0 left

Jednak co specjalista to specjalista. 😉 Empik aktualizacji do Oyo opublikować nie chce (choć podobno Medion już jakiś czas temu przesłał plik z nowym firmware). Trzeba było pogadać z zawodowcami ;-).

# john -show passwd 
root:SReader:0:0:root:/root:/bin/bash

1 password hash cracked, 0 left

Dalej jest też łatwo i zgodnie z instrukcją na Frank’s Wiki / OYO.

Samsung login: root
Password: 

[root@Samsung ~]# ls -la /rwdata/settings/
drwxr-xr-x    2 root     root         1024 Jan  1  2010 ./
drwxr-xr-x    7 root     root         1024 Dec 18 12:08 ../
-rw-r--r--    1 root     root         6094 Dec 18 12:17 QBookApp.ini
-rw-r--r--    1 root     root         5032 Jan  1  2010 QBookApp.ini.bak

(...)

[root@Samsung ~]# logout

Samsung SMDK Board on a armv5tejl
Samsung login: 

Na początek tylko test, czy na pewno jesteśmy skazani na stronę Empiku? Edytujemy oczywiście /rwdata/settings/QBookApp.ini na miejscu jest vi (tym co nie potrafią proponuję potrenować najpierw wychodzenie z vi gdzieś na boku ;-). Zamieniamy domyślną stronę startową digital.empik.com na własną, na początek niech to będzie strona eksiążki.org. Zapisujemy, restartujemy Oyo i …


DZIAŁA! 🙂

Jeśli nie uda się włączyć paska adresu (przyznaję nie przyglądałem się dokładniej co tam można jeszcze przestawić. (Dla ciekawych wersja offline dostępna jest po odpakowaniu pliku z niemiecką aktualizacją firmware rootfs.tar:usr/local/qisda/etc/QBookApp.default.ini można się porozglądać, co się da a czego nie na spokojnie) to myślę, że i tak nie ma nieszczęścia wystarczy przecież jakaś strona startowa z kilkoma odnośnikami. Do virtualo, własnej półki na książki i dodatkowo oczywiście z powrotem do Empiku, nóż widelec się przyda, choć są wątpliwości.

Wygnali mnie do pieczenia pierników, ale jest chwila wolnego więc się rozglądam i z ciekawostek … W pliku /usr/local/qisda/etc/index.html znajdziemy na przykład:

<body>
        <script type="text/javascript">                               
                if (navigator.language.indexOf("de") >= 0) {
                        document.write('<p>Bitte tragen Sie oben die gewünschte...
                } else if (navigator.language.indexOf("pl") >= 0) {
                        document.write('<p>Wprowadź adres www do paska adresowe...

Czyli co? Czyli trzeba tylko włączyć… w tym samym pliku co wcześniej czyli: /rwdata/settings/QBookApp.ini oczywiście w sekcji [empik]

has_open_web_browser=false

zmieniamy na true

Odpalamy Oyo i co widzimy w sekcji dodatki (tam gdzie do niedawna była przeglądarka zdjęć i odtwarzacz mp3)? Otóż mamy tam teraz trzeci przycisk z napisem Przeglądarka internetowa. Można wpisać adres jaki się chce, można zmieniać rozmiar fontu, można przeglądać sieć w trybie poziomym. Generalnie wydaje się, że działa!

Ok, no to skoro okazuje się, że mamy już w Oyo przeglądarkę, a ta przeglądarka startuje z lokalną stroną startową to wypadałoby tu dodać kilka linków. Nic trudnego, wystarczy zmodyfikować plik:
/usr/local/qisda/etc/index.html o którym było wyżej.
Znajdziemy tam wiersz definiujący odnośniki:

} else if (navigator.language.indexOf("pl") >= 0) {

	document.write('<a href="http://www.google.pl">Google</a><a href="http://pl.wikipedia.org">Wikipedia</a>');

Trzeba tylko dopisać co by się chciało. Docelowo niech to wygląda tak:

} else if (navigator.language.indexOf("pl") >= 0) {

	document.write('<a href="http://www.google.pl">Google</a>');
	document.write('<a href="http://pl.wikipedia.org">Wikipedia</a>');
	document.write('<a href="http://wariat.org.pl/smietnik/ebook-sync/">Półka wariata</a>');
	document.write('<a href="http://virtualo.pl/">virtualo</a>');
	document.write('<a href="http://www.eksiazki.org/">eKsiążki.org</a>');
	document.write('<a href="http://www.google.com/mobile/">Google mobile</a>');

Właściwie działa, Przeglądarka w Oyo nie potrafi przejść przez Basic Auth więc na moją półkę się nie zaloguję … trzeba będzie hasło wywalić tymczasowo, pozostałe problemy już z tych nie rozwiązywalnych, czyli np. brak mobilnej wersji virtualo.pl, niemniej jednak tu do biblioteki zakupionych książek dostać się udało, pobrać książkę na czytnik także. Czy dałoby się książkę kupić? Obiecuję spróbować przy najbliższej okazji.