Linux i IPaq

Asystenci Komputerowi - PDA (Personal Digital Assistant - podręczny komputer, którego system operacyjny jest przystosowany do współpracy z elektronicznym pisakiem - słownik informatyczny ang-pol) stają się coraz większymi przyjaciółmi współczesnych managerów – mały lekki komputerek, składający się z wyświetlacza, kilku przycisków i rysika jest wyposażony w terminarz, listę kontaktów, kalkulator. W ostatnich latach obserwujemy bardzo dynamiczny rozwój tych urządzeń – coraz lepsze wyświetlacze, szybsze procesory powodują, że PDA przejmuje coraz więcej funkcji zwykłego komputera, a parametrami technicznymi nie odbiega od tych, które jeszcze kilka lat temu z dumą zajmowały nasze biurka.

Kieszonkowy PC - PPC (Pocket PC), taka nazwa jest ostatnio lansowana przez czołowych producentów (Compaq, CASIO, Palm, Ericson), jest o wiele poręczniejszy od notebooka, a możliwościami niejednokrotnie go przewyższa. Obecnie na rynku konkurują ze sobą modele PPC: iPaq serii H3600 (produkt firmy Compaq), Palm serii V, Psion. Są one wyposażane, w zależności od producenta, w system operacyjny PalmOS, WindowsCE, Epoc.

PPC i Linux

Marka Palm jest obecnie najbardziej rozpowszechniona na polskim rynku, co wynika ze stosunkowo niskich cen urządzeń tej firmy, jednak istniejąca instalacja systemu Linux na Palma nie działa jeszcze na wszystkich typach tych urządzeń, jak również nie udostępnia środowiska okienkowego.

Firma Compaq już prawie dwa lata produkuje PPC, są to: seria H31** wyposażona w monokrystaliczne wyświetlacze oraz seria H36** - modele z kolorowym wyświetlaczem. Ten mały komputer (12.99 x 8.33 x 1.57 cm, waga 180g) jest w zależności od wersji wyposażany w 16-64 MB pamięci Flash ROM, 32 MB RAM,procesor RISC Intel StrongARM 206 MHz, ciekłokrystaliczny wyświetlacz (320x240), port USB i szeregowy, IrDA, systemem operacyjny WindowsCE oraz pakiet biurowym dla PPC. Dopiero jednak dokupienie Expansion Pack powoduje, ze iPaq staje się pełnowartościowym urządzeniem z możliwością zainstalowania 1 lub 2 kart PCMCIA II/III, a więc– kart sieciowych (przewodowych i bezprzewodowych), modemów, kart GSM i GPRS, kart CompactFlash (do 128MB), CardStorage (do 5GB pojemności!!) czy czytniki kodów kreskowych.Czy w takim świecie mogłoby zabraknąć Linuxa?

Dystrybucje Systemu Linux dla komputerów iPaq

Podobnie jak w wypadku komputerów PC, istnieje co najmniej kilka dystrybucji systemu Linux dla komputerów iPaq. Do niedawna najbardziej znaną była stworzona przez Comapaq’a hh (od handhelds.org). Na jej bazie powstawały kolejne wraz, z najbardziej dziś popularnymi dystrybucjami, Familiar i Imitiate. Familiar zawiera między innymi okrojoną wersję pakietu Python, Xfree86 z managerem okienek Blackbox oraz nowy system zarządzania pakietami ipkg, który przypomina znane z innych instalacji systemy RPM i DEB. Została opracowany przez Alexander Guy i Carl Worth a wersja 0.4 jest ostatnią stabilną wersją (niedawno ogłoszono wstępną wersję 0.5). Intimate jest rozszerzeniem Familiar, o ile jednak Familiar mieścił się w zwykłym, nie rozbudowywanym iPaq’u o tyle Intimate wymaga minimum 340MB przestrzeni dyskowej np. w postaci microdrive’ów. Celem twórców było dostarczenie możliwie pełnej wersji z programami Doom, Konqueror i odtwarzaczami MPEG.

Instalacja dystrybucji Familiar

Instalacja Linuxa na iPaq’u nie jest zadaniem trudnym, należy jednak trzymać się dość dokładnie instrukcji, a w razie jakiś problemów zawsze można skontaktować z chętnymi do pomocy członkami listy dyskusyjnej. Możemy ją podzielić na kilka etapów: archiwizacja istniejącego systemu (WindowsCE), instalacja bootloadera, partycjonowanie, instalacja jądra systemu i obrazu systemu. Przygotowanie do instalacji obejmuje przegranie na iPaq’a, przy pomocy dostarczonego wraz z nim programu komunikacyjnego ActiveSync, programu osloader.exe, należy również dobrze naładować iPaq’a, komputer stacjonarny najlepiej podłączyć do UPS’a.

Tworzenie kopii systemu Windows

Jeżeli jesteśmy przekonani, że nie będziemy wracać do systemu z Redmond, możemy ten krok opuścić jeśli nie, to na iPaq’u uruchamiamy program osload.exe i wybieramy z menu opcję “tools–flash-save to files…”. Program stworzy plik flash_00000000.bin, który następnie przenosimy na komputer stacjonarny, w celu zrobienia miejsca na kolejne pliki obrazu, operację powtarzamy jeszcze trzy razy, otrzymując w ten sposób cztery 4MB pliki będące zrzutem pamięci flash naszego iPaq’a.

Instalowanie programu startowego

Potrzebne będą binaria programu startowego (bootloadera) – najnowsza wersja bootldr-0000-2.14.8 jest dostępna na płycie oraz sumy md5, które bezwzględnie należy porównać z sumami posiadanych binariów. Krok ten jest niebezpieczny - jego niepoprawne wykonanie może grozić uszkodzeniem iPaq’a tak, że nieunikniona będzie wizyta w serwisie. Na posiadanym komputerze stacjonarnym uruchamiamy emulator terminala: HyperTerm pod Windows, minicom pod Linuxem, ustawiamy parametry połączenia na 115200 8N1 oraz wyłączamy kontrolę przepływu. Na iPaq’u uruchamiamy osloader.exe – wybieramy opcje ”tools-bootldr-run”, ekran stanie się czarny, a terminal pokazać znak zachęty, wydajemy komendę load bootldr i rozpoczynamy transmisję protokołem xmodem pliku bootldr-0000-2.14.8.

Rysunek 1. Instalowanie programu startowego

Otrzymywane komunikaty będą podobne do tych na Rysunku 1, jeśli brak „erasing .. writing flash .. verifying .. done”, należy powtórzyć transfer pliku – pod żadnym pozorem nie wolno wtedy wyłączać komputera. Wszystko w porządku? - możemy odetchnąć – najbardziej niebezpieczną część instalacji mamy już za sobą. Restartujemy iPaq’a, z ekranu uśmiechnie się do nas znajomy pingwin, po naciśnięciu przycisku kalendarza emulator terminala na komputerze stacjonarnym zachęci nas do kontynuowania instalacji.

Podział na partycje

W zależności od wersji posiadanej wersji iPaq’a mamy do dyspozycji 16 lub 32MB nieulotnej pamięci typu flash. Wielkość posiadanej pamięci możemy sprawdzić komendą: qflash - wartość '00170017' oznacza 16MB, a '00180018' 32MB. Usuwamy dotychczas zdefiniowane partycje partition reset, następnie tworzymy partycję na której będzie jądro systemu: partition define kernel 0x80000 0x80000 0. Komenda partition define przyjmuje 4 parametry: nazwę partycji, adres początkowy, rozmiar i typ (16 - JFFS2), możemy więc łatwo ustawić inny interesujący nas rozmiar, co może okazać się niezbędne dla jąder większych niż 512kB. Pozostałe miejsce przeznaczamy na partycje root, komenda partition define root 0x100000 0xf00000 16 (dla urządzenia z 16MB) lub partition define root 0x100000 0x1f00000 16 (dla urządzenia z 32 MB). Możemy przeglądnąć zdefiniowane partycje partition show, poza zdefiniowanymi przez nas pojawi się tam również partycja startowa systemu bootldr. oraz partycja zawierająca parametry startowe dla jądra params. Następnie ustawiamy parametry startowe dla jądra systemu: set linuxargs "noinitrd root=/dev/mtdblock/3 init=/linuxrc console=ttySA0", wirtualnego dysku set copy_ramdisk 0x0 oraz parametry terminala set baudrate 115200. Całość zatwierdzamy komendą: params save.

Instalowanie jądra systemu i obrazu partycji

Pozostaje nam zainstalowanie obrazu jądra systemu i partycji głównej, w tym celu potrzebne będą odpowiednio pliki zImage-2.4.3-rmk2-np1 oraz task-familiar-complete.jffs2.Wydajemy komendę load kernel i rozpoczynamy transmisję protokołem xmodem obrazu jądra, następnie load root i przesyłamy obraz partycji.

Rysunek 2. Instalowanie obrazu jądra
Pierwsze uruchomienie i logownie

Komenda boot spowoduje uruchomienie sytemu, na konsoli powinniśmy zobaczyć komunikaty startowe, poproszeni o podanie nazwy użytkownika i hasła wpisujemy root i rootme. Teraz pozostaje nam konfiguracja systemu oraz wyposażenie go w wymagane przez nas oprogramowanie.

Połączenie z komputerem stacjonarnym - PPP

Port szeregowy, który do tej pory wykorzystywaliśmy jako konsolę, jest również skonfigurowany tak, że wykrywa sesję PPP (Point to Point Protocol). W celu zestawienia takiego połączenia z drugiej strony kabla szeregowego powinniśmy mieć maszynę Unix’ową. Jako root wydajemy na niej polecenie: /usr/sbin/pppd /dev/ttyS0 115200 192.168.0.254:192.168.0.1 nodetach noauth debug nocrtscts lock user ppp connect '/usr/sbin/chat -v -t3 ogin--ogin: ppp po kilku chwilach powinniśmy dostać informacje o udanym rozpoczęciu sesji i mieć możliwość „pingowania” iPaq’a. Powyższa komenda zakłada że komputer stacjonarny ma IP:192.168.0.254 oraz, że kabel podłączyliśmy do dev/ttyS0, nadaje ona iPaq’owi IP:192.168.0.1.

Zainstalowany przez nas Familiar 0.4 (poza X’ami na porcie 8000) udostępnia usługę ssh, spróbujmy więc: ssh root@192.168.1.3jeśli wszystko zrobiliśmy poprawnie powinniśmy zostać poproszeni o hasło (rootme). Jeżeli, mimo iż otrzymujemy odpowiedzi na ping’a, mamy problemy z połączeniem, to najczęściej jest to wina ssh, które nie może wystartować na skutek braku pliku klucza ssh_host_key. Możemy go wygenerować instrukcją: /usr/bin/ssh-keygen -f /etc/ssh/ssh_host_key -N '', oraz ręcznie uruchomić demona: sshd - operacje te najlepiej wykonać używając konsoli szeregowej przerywając wcześniej połączenie PPP.

Sesja PPP w połączeniu z możliwością zdalnego logowania przez ssh ułatwi nam prace administracyjne oraz umożliwi przesył plików poprzez scp. Pełny dostęp do Internetu będzie możliwy jednak dopiero po skonfigurowaniu routingu oraz usługi maskowania adresów (NAT, masquerade) po stronie komputera stacjonarnego. Poza oczywistymi korzyściami, jak dostęp do WWW, będziemy mogli skorzystać z dobrodziejstw managera pakietów ipkg takich jak automatyczne uaktualnianie posiadanych wersji oprogramowania czy przeglądanie aktualnie dostępnych pakietów.

Interfejs sieciowy

Najprostszym sposobem umożliwienia komunikacji pomiędzy naszym świeżo zainstalowanym Linuksem a resztą sieci będzie wyposażenie iPAQa w kartę sieciową wykonaną w standardzie PCMCIA. Możemy do tego celu użyć dowolnej karty wspieranej przez pakiet pcmcia-cs, który jest domyślnie instalowany w naszej dystrybucji. Wydajmy polecenie: cardctl ident jeśli karta została zidentyfikowana poprawnie to zobaczymy następujący komunikat: „Socket 0: product info: "Ethernet", "Adapter", "2.0" manfid: 0x0149, 0xc1ab function: 6 (network)”. Wpiszmy teraz cardctl status, jeżeli w odpowiedzi otrzymamy: „Socket 0: 5V 16-bit PC Card function 0: [ready]” to nasza karta działa prawidłowo. Jeśli nie jest ona rozpoznawana, możemy dokonać edycji pliku konfiguracyjnego /etc/pcmcia/config lub poszukać pomocy na stronie domowej pakietu pcmcia-ca. Po pomyślnym zainstalowaniu nowego adaptera można przejść do etapu konfiguracji ustawień sieciowych.

Konfiguracja parametrów sieci

Dystrybucja Familiar zawiera całość oprogramowania wymaganego do poprawnej pracy podsystemu sieciowego. Dostępne są ważniejsze polecenia, takie jak: ifconfig, route, ipmaddr, iptunnel oraz netstat, służące do konfiguracji i testowania podstawowych ustawień sieci. Konfiguracja właściwie nie różni się od tej przeprowadzanej w dużych dystrybucjach, jedyną trudnością może być brak interaktywnego narzędzia dokonującego modyfikacji odpowiednich plików. Większość czynności konfiguracyjnych musimy wykonać ręcznie edytując pliki w różnych miejscach systemu. Podstawowe ustawienia kart sieciowych PCMCIA są przechowywane w pliku /etc/pcmicia/network.opts. Wystarczy przypisać do odpowiednich zmiennych żądane przez nas parametry sieciowe, a następnie wyjąć i powtórnie umieścić w gnieździe kartę, aby wprowadzone przez nas zmiany zostały uwzględnione. Można też użyć polecenia: cardctl eject && cardctl insert. Typowe wartości parametrów tego pliku mogą wyglądać następująco: IPADDR="192.168.0.1" NETMASK="255.255.255.0" NETWORK="192.168.0.0" BROADCAST="192.168.0.255" GATEWAY="192.168.0.254". Ciekawą właściwością jest możliwość przechowywania kilku zestawów konfiguracji. Możemy posiadać kilka ustawień, wybieranych w zależności od punktu do którego się przyłączamy, identyfikowanych np. za pomocą numeru MAC konfigurowanej karty. Miejscami, w których chcemy używać naszego iPAQa, są, na przykład, sieć biurowa i domowa. Jeśli posiadamy dwie karty, to w zależności od tego którą włożymy (biurową czy domową) oprogramowanie samo dokona konfiguracji ustawień sieci specyficznych dla firmy lub domu. Własność ta może być również wykorzystywana gdy posiadamy dodatkową kartę bezprzewodową. Podobną funkcjonalność można uzyskać stosując protokoły BOOTP lub DHCP. Dodatkowo istnieją jeszcze możliwości zestawienia połączenia sieciowego za pomocą interfejsu IRDA lub USB jednak nie były one testowane przez autorów.

Maskowanie adresu

Jeśli nie posiadamy dedykowanego adresu, z puli wykorzystywanych w naszej sieci, możemy przydzielić adres niepubliczny i zastosować mechanizm maskowania adresów. W tym przypadku wszystkie pakiety wygenerowane przez iPAQ’a będą miały adres źródłowy hosta do którego nasz PPC został dołączony. Na hoście dostępowym wpiszmy: modprobe iptable_nat iptables -t nat -A POSTROUTING -s 192.168.0.1 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward, na iPAQ’u: ifconfig eth0 192.168.0.1 oraz route add default gw 192.168.0.254. Mechanizm ten równie dobrze sprawdza się przypadku użycia karty sieciowej jak i portu szeregowego z zestawioną sesją PPP.

Rysunek 4. Maskowanie adresów IP.
Aplikacje

W naszej instalacji znajdziemy wiele pożytecznych programów, jednym z nich jest fscribe. Pozwala nam on na swobodne przełączanie się między trybami w jakich działa, używany do wprowadzania informacji, rysik. Rozpoznaje ręczne pismo, umożliwia korzystanie z programowej klawiatury albo powoduje że rysik działa jak myszka. Edytor tekstowy Notepad potrafi obrabiać nawet pliki typu rtf., o ile jednak odczytywanie informacji jest faktycznie przyjemne o tyle wprowadzenie, nawet krótkiego tekstu, wymaga wiele cierpliwości. Dodatkowo możemy zainstalować również przeglądarki WWW – obecnie najbardziej rozwiniętymi są dwa produkty Dillo i ViewML, oba to wersje alfa, nie potrafią obsługiwać jeszcze wielu znaczników HTML takich jak ramki i tabele, o wsparciu dla DHTML Java, JavaScript, cookies nie wspomnę, trudno jednak od tak świeżych produktów oczekiwać funkcjonalności jakiej Netscape czy Explorer nabierały przez lata. IPaqa można wyposażyć również w serwer Samba, a sympatycy biegających po ekranie pingwinów mogę je sobie zainstalować również tutaj, choć wtedy na użyteczne informacje jest już naprawdę mało miejsca.

Własne programy

Tworzenie własnych programów dla iPaq'a najłatwiej rozpocząć od języka Java. Istniejąca dla tej architektury wirtualna maszyna JRE (Java Runtime Enviroment) stworzona przez organizację BlackDown jest obecne dostępna dla wersji 1.3.1. Dzięki przenośności tego języka tworzenie i kompilowanie programów realizujemy tak samo jak dotychczas - gotowe binaria z łatwością instalujemy i bez problemów uruchamiamy na iPaq'u. Należy jednak pamiętać o stosunkowo niskich parametrach przetwarzania tego komputerka i, mimo iż jest to możliwe, unikać zaawansowanych rozwiązań graficznych (w tym Swinga), bo inaczej nasz program będzie działał niesamowicie wolno. Większość programistów nadal preferuje C/C++. W celu stworzenia własnej aplikacji w tym języku niezbędne jest zaadaptowanie posiadanego na maszynie Unixowej kompilatora (gcc) dla nowej platformy. Przygotowanie crosscompilatora nie jest sprawą prostą - zainteresowanych odsyłam na stronę http://www.handhelds.org/z/wiki/BuildACrossCompiler. Odpowiednio skompilowane i zlinkowane programy są, po przeniesieniu, gotowe do użytku, oczywiście pod warunkiem, że nie korzystamy z biblioteki niedostępnej na nowej platformie, co niestety zdarza się dość często.

Podsumowanie

Czy Linux przyjmie się jako system operacyjny dla PPC czy będzie tylko zabawka w rękach hobbystów, zależy głównie od ilości, jakości i użyteczności działających na nim aplikacji, a tych z dnia na dzień przybywa. W większości są to adaptacje programów znanych już wcześniej, które po ponownej kompilacji działają na nowej platformie sprzętowej, inne, jak przeglądarki, z uwagi na brak klawiatury i niewielki wyświetlacz, są tworzone w całości od początku. Czy jednak znajdzie się konkurent dla PocketOffice? Z pewnością największa przewagą Linuxa jest możliwość uruchamiania aplikacji na serwerze z przekierowaniem wyświetlania (DISPLAY) na ekran iPaq – nie ograniczają nas wtedy zasoby pamięci i mocy obliczeniowej, wymaga to jednak połączenia z siecią lokalną, z czym ‘poza biurem’ mogą być spore problemy (na wszechobecną sieć radiową przyjdzie nam bowiem jeszcze trochę poczekać).

Rysunki:
w tekscie:
- Rysunek 1 – load_bootldr.tif
- Rysunek 3 – load_root.tif
- Rysunek 4 – masq.tif
dowolnie umieszczone:
- Rysunek 2 - Restartujemy iPaq’a, z ekranu uśmiechnie się do nas znajomy pingwin - bootloader[1|2].jpg
- Rysunek 5 Quake to oczywiście żart – iPaq nie posiada jednostki zmiennopozycyjnej – ale może kiedyś... - quake.tif
- Rysunek 6 - Klawiatura - jeśli ktoś jednak preferuje tradycyjny sposób wprowadzania informacji – może się oczywiście zaopatrzyć w pełno wymiarową, kieszonkową (składaną) klawiaturę - http://www.thinkoutside.com/ - klawiatura.jpg
- Rysunek 7 - Notepad – bardzo miły program do edycji dokumentów tekstowych, potrafi obrabiać nawet pliki typu rtf. - notepad.jpg
- Rysunek 8 - Java - działa nawet Swing! - java[1|2].jpg
- Rysunek 9 - Przeglądarka WWW Dillo i pingwinki - dillo_pingwin.jpg
Linki:
- http://www.compaq.com/products/handhelds/pocketpc/index.html - informacje producenta na temat iPaq
- http://www.compaq.com/products/handhelds/pocketpc/options.shtml - możliwe rozszerzenia sprzętowe
- http://familiar.handhelds.org - strona domowa instalacji Familiar
- http://ipaq.secret.org.uk/intimate - strona domowa instalacji Intimate
- http://www.geocities.com/glenn65535/ - aplikacje na iPaq
- http://www.handhelds.org:8080/wiki/IPMasqHowto - konfiguracja maskarady dla iPaq
- http://www.handhelds.org/z/wiki/BuildACrossCompiler - tworzenie crossKompliatora
- http://handhelds.org/email_lists.html - listy dyskusyjne

Autor

Mgr inż. Dominik Radziszowski i mgr inż. Jacek Kosiński są pracownikami Grupy Systemów Rozproszonych Katedry Informatyki AGH. Od kilku lat tworzą aplikacje dla heterogenicznych systemów rozproszonych, obecnie zajmują się adaptacją urządzeń PDA dla potrzeb telemedycyny. Prowadzą również prace z zakresu IPv6 w kontekście różnych bezprzewodowych protokołów warstwy fizycznej i łącza danych.