Postanowiłem ostatnio spróbować możliwości sieciowych GP2X i po szybkiej rekompilacji jądra w moim desktopie udało mi się połączyć z konsolką przy pomocy TCP/IP. Uruchomiłem telnet i...
karol@omoikane karol% telnet 10.1.1.1
Trying 10.1.1.1...
Connected to 10.1.1.1.
Escape character is '^]'.
Linux 2.4.25 (gp2x) (ttyp0)
gp2x login: root
[root@gp2x root]$uname -a
Linux gp2x 2.4.25 #3390 2006. 04. 20. (¸ń) 14:31:55 KST armv4l unknown
[root@gp2x root]$cat /proc/cpuinfo
Processor : Arm920Tid(wb) rev 0 (v4l)
BogoMIPS : 99.32
Features : swp half thumb
Hardware : MagicEye-MDK
Revision : 0000
Serial : 0000000000000000
[root@gp2x root]$
Oprócz tego działa też ftp i http, ale za sprawdzanie samby już się nie brałem (bo i po co).
Komunikacja możliwa jest dzięki modułowi cdc_ether. Po włączeniu sieci na GP2X urządzenie zostaje wykryte przez kernel:
usb 1-2: new high speed USB device using ehci_hcd and address 3
usb 1-2: new high speed USB device using ehci_hcd and address 4
usb 1-2: configuration #1 chosen from 2 choices
usb0: register 'cdc_ether' at usb-0000:00:02.1-2, CDC Ethernet Device, 92:e1:df:7c:11:13
Pojawia się też interfejs usb0, który po skonfigurowaniu umożliwia bezproblemowe połączenie z konsolą. Niestety nmap typu urządzenia nie rozpoznaje. ;)
2006-10-05 01:24:20
Edytuj
Integracja (i małe rozszerzenie) testowego kodu emulującego mysz przy pomocy joysticka/klawiatury z kodem Battle for Wesnoth poszła szybko i sprawnie. Dzięki temu grę na GP2X daje się już obsługiwać! Prawie. Ktoś niesprytnie użył osobnej pętli zdarzeń do obsługi (zamykania) dialogów w trakcie gry i niestety nie da się przebrnąć przez pierwszy z nich, ale to już tylko kwestia małej poprawki. Jak na początek - jest dobrze!
Oprócz tego dodałem możliwość wymuszenia na grze, by uznała cache plików konfiguracyjnych za poprawny, bez względu na wynik liczenia sum kontrolnych lub znaczników czasowych. Co prawda powoduje to, że zmiana danych nie zostanie odzwierciedlona w grze (możliwe, że nawet wprowadzi jakieś błędy), ale czterokrotna redukcja czasu uruchamiania była tego warta. Zresztą i tak prawie nikt samodzielnie konfiguracji nie modyfikuje.
Nowy kod dostępny jest rzecz jasna w gałęzi rozwojowej.
2006-09-17 12:58:43
Edytuj
Wczoraj wieczorem usiadłem na chwilkę do Wesnoth i po krótkim boju z kompilacją biblioteki SDL_net na moją ARMową maszynkę oraz małych poprawkach w konfiguracji autoconfa udało mi się skompilować grę na GP2X:
grzywacz@stealth bin% file wesnoth
wesnoth: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, statically linked, stripped
Statycznie zlinkowany program ma 7.2MB i... uruchamia się! Zdjęcie zamieszczę przy okazji. Do rozwiązania mam teraz kilka problemów:
- Emulacja myszki przy pomocy joysticka (kod koncepcyjny już jest, muszę go zintegrować z grą)
- Kompilacja biblioteki SDL_mixer tak, by nie segfaultowała w funkcji Mix_OpenAudio()
- Opcja wyłączenia automatycznej weryfikacji i budowy cache'u plików konfiguracyjnych gry
Zmierzę się z nimi w najbliższej wolnej chwili.
2006-09-15 13:40:12
Edytuj
Słowo wstępu
GP2X to niszowa konsolka do zastosowań wszelkich (przez producenta określana jako "personal entertainment player"), działająca pod kontrolą Linuksa. Mimo tego, że została wyprodukowana przez GamePark Holdings, nieznaną u nas firmę z Korei Południowej, zamknięty w czarnej obudowie sprzęt jest dość ciekawy, a jego wykorzystanie może być interesującym wyzwaniem dla każdego zapalonego programisty. W kolejnych wpisach postaram się rzucić nieco więcej światła na poszczególne jej elementy.
MMSP2
Głównym układem konsoli jest MP2520F, będący częścią platformy MMSP2. Jest to układ typu SoC, czyli, mówiąc bardzo potocznie, kupa składającej się na komputer elektroniki zintegrowanej w ramach jednej kości. W jego skład wchodzą dwa 32-bitowe procesory ARM 920T i 940T (artykuł w Wikipedii wart przeczytania), kontroler pamięci, kontroler przerwań, procesor video, postprocesor video, procesor graficzny (2D), procesor obrazu, układ dźwiękowy zgodny z AC97, kontroler obrazu oraz zestaw różnorodnych komponentów wejścia/wyjścia (USB, kontroler pamięci Flash oraz SD/MMC, UART, I2C). Oprócz tego realizuje funkcje DMA, zegarów czasu rzeczywistego oraz zarządania energią. Co ciekawe, konsola nie posiada zasilanej pamięci CMOS, przez co nie jest w stanie pamiętać ustawionego czasu (zegary resetowane są przy każdym uruchomieniu).
Komunikacja
Poszczególne komponenty komunikują się między sobą oraz z urządzeniami zewnętrznymi przy pomocy 4 niezależnych szyn danych, przy czym dostęp do pamięci możliwy jest tylko przy pomocy jednej z nich (dzielonej przez oba procesory oraz kontroler DMA). Oprócz tego możliwa jest bezpośrednia, potokowa komunikacja między postprocesorem video a kontrolerem obrazu, dzięki czemu zdekodowany obraz w formacie YUV może być od razu wyświetlany i opcjonalnie poddany dodatkowemu przetwarzaniu, umożliwiającemu takie operacje jak deblocking, deringing, skalowanie, konwersje przestrzeni kolorów oraz dithering (realizowane sprzętowo). Podobne połączenie funkcjonuje między procesorem obrazu (mogącym przetwarzać obraz z kamer - tu niewykorzystywane) a postprocesorem video. Nie trzeba dodawać, że takie rozwiązanie znacznie odciąża pamięć.
Procesor 2D
Producent firmuje tę część MMSP2 jako zdolną do akcelerowania operacji GDI oraz Direct2D w Windows CE. Użytkowników GP2X, która pracuje pod kontrolą Linuksa to rzecz jasna nie interesuje. Oczywiście nie wyklucza to użycia go do zwiększenia wydajności operacji graficznych. Część możliwości dostępna jest w łatwy sposób dzięki implementacji sprzętowo akcelerowanych funkcji w bibliotece SDL (blitting, double buffernig, ...). Inne wymagają od programisty bezpośredniej interakcji ze sprzętem.
Procesor video
Układ ten zdolny jest do sprzętowego dekodowania filmów zakodowanych zgodnie z MPEG4, DivX 3.11/4/5 lub MJPEG. Oprócz tego zapewnia część z dostępnych funkcji obróbki obrazu (m.in. deblocking i deringing). Maksymalne parametry dekodowanego obrazu to rozdzielczość 720x480 przy 30 klatkach na sekundę (przetestowałem, działa jak złoto :)).
Postprocesor video
Ten element MMSP2 umożliwia dalszą obróbkę obrazu video, w tym skalowanie, obroty, kontrolę nasycania, kontrastu, jasności, gammy, dithering, alpha blending, color keying oraz konwersje przestrzeni kolorów. Pomniejszanie obrazu przydaje się, gdy chcemy wyświetlić film w niskiej (320x240) rozdzielczości ubsługiwanej przez wbudowany ekran LCD, powiększanie zaś, gdy chcemy skorzystać z wyjścia S-Video i wyświetlić obraz z konsoli na telewizorze.
Kontroler obrazu
Maksymalna obsługiwana rozdzielczość wyświetlanego obrazu to 1024x768, choć w GP2X wykorzystać można tylko 320x240. Obsługiwane są wszystkie typowe głębie kolorów RGB (8-24 bity) oraz kilka bardziej egzotycznych.
Wejście/wyjście
MMSP2 daje spory wybór interfejsów we./wyj., z czego nie wszystkie daje się w pełni wykorzystać w GP2X. Kontroler hosta USB umożliwia podłączenie zewnętrznych urządzeń takich jak np. mata do DDRa ;-), ale niezasilany port w konsolce wymaga do tego użycia dodatkowego huba. GP2X może działać też jako zwykłe urządzenie USB (sieć, dostęp do karty SD w trybie usb storage). Kontroler UART umożliwia skorzystanie z 4 portów szeregowych, ale potrzebna jest do tego specjalna płytka rozszerzająca dla developerów, podłączana do portu Ext(ension). Opcjonalnie można pobawić się lutownicą, jak w opisie dodawania odbiornika GPS
Podsumowanie
W powyższym zestawieniu pominąłem dokładniejsze opisy modułów DMA, I2C, zarządzania energią, zegarów oraz watchdoga, jako że nie są one specjalnie interesujące z punktu widzenia użytkownika konsoli. O układzie dźwiękowym mogę niestety powiedzieć tylko tyle, że działa. Szczegółowe informacje na temat budowy układu MMSP2 można znaleźć na stronie producenta, w opisie chipsetu oraz pełnym manualu. W następnej części przyjrzę się nieco dokładniej obu procesorom konsolki i postaram się przedstawić ich zalety, wady oraz sposoby radzenia sobie z tymi ostatnimi.
2006-09-10 22:06:24
Edytuj
Pomysł dość zwariowany i wymagający świetnego rozeznania w sprzęcie oraz oprogramowaniu, ale spójrzcie tylko na to: GP2X z wewnętrznym odbiornikiem GPS. Ta sama osoba wyposażyła wcześniej swoją konsolkę w standardowy port USB, dający możliwość wykorzystania trybu "usb host" do podłączania zewnętrznych urządzeń, choćby przechowywania danych. Oczywiście z racji tego, że na konsoli działa Linux, obsługa peryferiów nie nastręcza żadnych problemów.
2006-09-07 00:36:07
Edytuj
Hello world
Co prawda granie jeszcze mi się nie znudziło, ale możliwość odpalenia na GP2X własnej aplikacji w końcu okazało się zbyt wielką pokusą. Musiałem to zrobić. Zacząłem od ściągnięcia oficjalnego SDK, w którego skład wchodzi podstawowy toolchain, z kompilatorem (gcc 3.x), asemblerem, linkerem, biblioteką C i kilkoma innymi, potrzebnymi do kompilacji narzędziami. Ubogo, ale wystarczyło do skompilowania pierwszego "hello world", które po skopiowaniu na kartę SD i uruchomieniu w emulatorze terminala wypisało eleganckie: "Hi! This is your GP2X ready software!". Pierwszy sukces.
SDL
Przyznam, że jestem leniem. Zamiast w pocie czoła kompletować sobie środowisko wraz z wszystkimi niezbędnymi bibliotekami, skorzystałem z gotowego skryptu autorstwa ooPo'a i archiwum źródeł (do pobrania tutaj), dzięki którym dwoma wywołaniami make zbudowałem nowe gcc (4.0.2) z wszystkimi pomocniczymi aplikacjami oraz bibliotekami (SDL z dodatkami, libjpeg, libpng, zlib, libogg, libvorbis, libxml...) - jednym słowem wszystko, co może przydać się w pisaniu aplikacji na GP2X. SDLowe "hello world" było już tylko formalnością:
Odbijające się po ekranie ludziki z zestawu ikon nuvola, wyłączane naciśnięciem dowolnego przycisku konsolki. Zdaje się zatem, że wszystko działa i w wolnej chwili będę mógł napisać coś bardziej użytecznego. Jako ciekawostka:
bouncers.gpe: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, statically linked, for GNU/Linux 2.0.0, stripped
2006-09-04 10:24:37
Edytuj
Jakiś czas temu (na swojej prywatnej jabbie) pisałem o konsolce GP2X. Jako że jestem już jej szczęśliwym posiadaczem i trochę ją potestowałem, to podzielę sie wrażeniami z, jak na razie krótkiego, użytkowania tego sprzętu.
Zaczynamy od marudzenia
Pierwszy zawód spotkał mnie dość szybko - ponieważ konsolka sama w sobie ma bardzo mało pamięci stałej (ok. 20MB wolnego miejsca na wbudowanym flashu, które zostało niewykorzystane przez system), to z konieczności należy zaopatrzyć się w kartę SD o odpowiednio dużej pojemności. Oprócz karty należałoby kupić czytnik, ale że GP2X daje się podłączyć do komputera przy pomocy USB i udostępnić kartę/flash w trybie usb storage, to zakup ten sobie na początek darowałem. Błąd. Otrzymany w zestawie (certyfikowany przez producenta i w ogóle) kabel okazał się być wadliwy. Po połączeniu nim sprzętów kernel zaczął wypluwać co sekundę brzydkie błędy:
kjut kernel: hub 1-0:1.0: connect-debounce failed, port 1 disabled
Szybkie poszukiwanie w sieci ujawniło, że najprawdopodobniej jest to wina przewodu. "Na wszelki wypadek" kupiłem czytnik kart SD, dodatkowy przewód był w zestawie i... magia, podłączenie GP2X przy jego pomocy rozwiązało problem! Dodam, że "certyfikowane" akcesoria są oczywiście odpowiednio droższe od tanich zamienników, które bez problemu można kupić w sklepie. Brzydko.
Po udanym bezpośrednim połączeniu konsolki z komputerem naszły mnie wątpliwości, czy słusznie zrobiłem wydając dodatkowe pieniądze na czytnik, mogłem przecież kupić sam kabel, co najmniej o połowę tańszy. Jednak warto było. Połączenie z konsolką nie jest zbyt stabilne i w pewnych (tajemniczych dla mnie) warunkach potrafi się przerwać, a szybkość kopiowania danych nie jest nadzwyczajna. Czytnik oszczędza więc czas i nerwy, a w przyszłości może znajdę dla niego jeszcze inne zastosowanie.
Słodycz
Powyższe wyczerpuje listę problemów, które do tej pory miałem z GP2X. Gdy je już rozwiązałem, pozostała sama słodycz.
Sprzęt bardzo ładnie daje sobie radę z odtwarzaniem filmów - co prawda domyślnie obsługiwany jest tylko obraz zakodowany MPEG4 oraz dźwięk MP3/OGG Vorbis, ale w większości przypadków to zupełnie wystarcza. Bez większych problemów można znaleźć w sieci aplikacje (przerobiony oryginalny player, MPlayer) z obsługą większej liczby formatów, jak choćby dźwięku w AC3. Obsługa nie nastręcza trudności. Dźwięk odtwarzany przez słuchawki brzmi bardzo dobrze, a jakości obrazu nie można niczego zarzucić. Ekran jest jasny i nie smuży. Ponadto mamy możliwość wyboru częstotliwości zegara procesora - dzięki temu można odpowiednio dopasować jego wydajność (i pobór energii!) do oglądanego filmu.
Odtwarzanie muzyki sprawdza się równie dobrze. Obsługiwane są formaty MP3 oraz OGG Vorbis, do wyboru jest kilka ustawień equalizera, a jednym przyciskiem można zablokować pozostałe i wyłączyć ekran - idealne rozwiązanie, gdy jesteśmy w drodze.
Przeglądarka grafik działa szybko, a jej obsługa jest bardzo intuicyjna. Pozwala na łatwe skalowanie oraz obracanie obrazu, przesuwanie go oraz przełączanie między kolejnymi plikami. Stanowi drobny, ale bardzo funkcjonalny element całości.
Dodatkowych aplikacji nie brakuje - konsolka przyszła do mnie z preinstalowanym demem gry Vektar, dynamicznej strzelaninki z miłą dla oka i ucha oprawą. Szybko zaopatrzyłem się w kolejne - Quake'a, Sudoku, Powermangę (wreszcie doceniłem fakt, że napisano ją z myślą o małej rozdzielczości), C-Dogs, UQM... Do tego emulator terminala (obsługiwany joystickiem!) i alternatywny do oficjalnego czytnik ebooków. Znalazłem też trochę ładnych scenowych demek demonstrujących możliwości drzemiące w tym niepozornym kawałku sprzętu. Zainteresowanych odsyłam do archiwum aplikacji dla GP2X.
Gdy nacieszę się już stroną użytkową konsolki, spróbuję napisać na nią moją pierwszą aplikację - mały krok w kierunku zrobienia kompletnego portu Battle for Wesnoth, przymiarką do którego są prace nad trybem tiny gui, o których pisałem już kilkukrotnie na mojej prywatnej jabbie. Z postępów prac zdam tu rzecz jasna szczegółową relację. ;-)
2006-09-03 17:49:55
Edytuj