Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
pl:miw:miw08_ruleruntimep [2008/06/15 13:20]
gjn
pl:miw:miw08_ruleruntimep [2008/06/27 10:55]
gjn
Linia 1: Linia 1:
-====== Opis ====== 
-__**Projekt zakończony**__ 
  
-Konrad Rybacki, <​konrad.rybacki@wp.pl>​ 
- 
-Embedded Prolog Runtime (EPR) – Running Prolog on Embedded Platforms, programming Prolog-C Interfaces, evaluation, refinment, testing, improvement;​ C and Prolog Programming is required 
- 
-====== Spotkania ====== 
-[[pl:​miw:​miw08_ruleruntimep:​spotkania]] 
- 
-====== Projekt ====== 
- 
- 
-===== 08.03.18 ===== 
-  * Próba utworzenia wirtualnego środowiska uruchomieniowego emulującego system oparty o procesor z rodziny ARM. 
-Wykorzystano:​ Pakiet QEMU, wersja 0.9.1_2, system uruchomieniowy (host) FreeBSD 7.0, procesor klasy i686. 
-Uruchomienie dystrybucji ARM systemu NetBSD nie powiodło się. Emulator albo zupełnie odmawia współpracy,​ nie rozpoznając właściwie obrazu jądra, albo sygnalizuje błędy w uruchamianym kodzie. Należy dokładnie sprawdzić wsparcie dla architektury opartej o ARM w tym systemie w konfrontacji z możliwościami QEMU. Niestety, brak jest dokumentacji opisującej bezpośrednio przykłady uruchomienia NetBSD na tym symulatorze. 
- 
-Próba uruchomienia systemu Linux na wspomnianym emulatorze, zgodnie z opisem [[http://​www.aurel32.net/​info/​debian_arm_qemu.php]] zakończyła się połowicznym sukcesem. System wprawdzie uruchamia się, ale przy próbie zapisu na dysk dochodzi do błędu segmentacji. Najprawdopodobniej jest to spowodowane jakimiś zależnościami FreeBSD - QEMU. Niestety, nie miałem możliwości przetestowania QEMU na innym systemie - do zrobienia w najbliższym czasie. 
- 
-  * Analiza wymagań implementacji Prologa: 
- 
-W związku z wymienionymi wcześniej problemami, trudno podejmować próby oceny wymagań dostępnych środowisk. SWI Prolog posiada wygodną w użyciu bibliotekę,​ pozwalającą w pewnym stopniu analizować zużycie zasobów [[http://​gollem.science.uva.nl/​SWI-Prolog/​Manual/​profile.html]]. Niestety, nie udało mi się znaleźć odpowiednika dla YAP, bez czego właściwie trudno o wykonanie sensownych porównań. Do wykorzystania zestaw testów sprawdzających wydajność Prologa: [[http://​www.cs.cmu.edu/​afs/​cs/​project/​ai-repository/​ai/​lang/​prolog/​code/​bench/​0.html]]. Interesująca może być również strona: [[http://​www.david-reitter.com/​compling/​prolog/​compare.html]]. 
- 
-  * Próba cross-kompilacji Prologa na architekturę ARM: 
- 
-W ramach próby wykorzystałem toolchain arm-elf-linux. Niestety, kompilator sygnalizuje błędy w kodzie (zarówno w przypadku YAP jak i SWI) - może być to spowodowane niezgodnością wersji. Należy przetestować inne dostępne wersje oraz, po rozwiązaniu problemów zasygnalizowanych powyżej (QEMU), sprawdzić, czy możliwa będzie kompilacja w natywnym środowisku. 
- 
-Kompilacja CxProlog nie powiodła się zarówno przy środowisku docelowym arm-linux jak i FreeBSD. Brak skryptów umożliwiających konfigurację budowy tego oprogramowania prawdopodobnie poważnie utrudni możliwość jego uruchomienia w systemie innym niż GNU/Linux. 
- 
- 
- 
- 
-===== 08.04.08 ===== 
- 
-Kross-kompilacja:​ 
- 
-  * Przygotowanie środowiska. Należy pobrać archiwa zawierające pakiety **binutils**,​ **newlib** oraz **gcc** i umieścić w odpowiednio dobranej strukturze katalogów. 
- 
-   ​- ​ cd [binutils-build] 
-   - [binutils-source]/​configure --target=arm-elf --prefix=[toolchain-prefix] --enable-interwork --enable-multilib 
-   - make all install 
-   - export PATH="​$PATH:​[toolchain-prefix]/​bin"​ 
-   - cd [gcc-build] 
-   - [gcc-source]/​configure --target=arm-elf --prefix=[toolchain-prefix] --enable-interwork --enable-multilib --enable-languages="​c,​c++"​ --with-newlib --with-headers=[newlib-source]/​newlib/​libc/​include 
-   - make all-gcc install-gcc 
-   - cd [newlib-build] 
-   - [newlib-source]/​configure --target=arm-elf --prefix=[toolchain-prefix] --enable-interwork --enable-multilib 
-   - make all install 
-   - cd [gcc-build] 
-   - make all install 
-   - cd [gdb-build] 
-   - [gdb-source]/​configure --target=arm-elf --prefix=[toolchain-prefix] --enable-interwork --enable-multilib 
-   - make all install ​ 
- 
-  * Jeżeli ma się odbyć pełny proces kompilacji, to należy również wyposażyć się w pliki nagłówkowe oraz wymagane biblioteki z przyszłego środowiska uruchomieniowego. 
-  * Kompilacja oprogramowania odbywa się zgodnie z np. następującymi regułami: 
-  - rozpakowanie archiwum, wejście do katalogu, w którym odbywa się kompilacja 
-  - [sciezka_do_zrodel]/​configure --target=arm-elf --host=i386-unknown-freebsd CC=[toolchain-prefix]/​bin/​arm-elf-gcc CPP=[toolchain-prefix]/​bin/​arm-elf-cpp RANLIB=[toolchain-prefix]/​bin/​arm-elf-ranlib CPPFLAGS="​-I[sciezka_do_naglowkow]"​ LDFLAGS="​-L[sciezka_do_bibliotek] --prefix=[prefiks] 
-  - użycie CPPFLAGS i LDFLAGS jest w pewnych warunkach opcjonalne 
-  * YAP przechodzi taki proces pomyślnie do momentu linkowania. Niestety, ze względu na ciągłe trudności ze znalezieniem właściwego środowiska,​ brak odpowiednich bibliotek umożliwiających końcowe zbudowanie pakietu. 
-  * W przypadku SWI problemem jest brak odpowiednich plików nagłówkowych - należy to rozwiązać tak samo jak problem powyższy. 
- 
-  * Udało się znaleźć ciekawe wydanie systemu linuks uruchamialne na wirtualizatorze qemu: 
-http://​free-electrons.com/​community/​demos/​qemu-arm-directfb 
-Samo wydanie nie odpowiada dokładnie oczekiwaniom ale zawiera zestaw skryptów oraz opis pozwalający na budowę własnej dystrybucji - co wobec problemów ze znalezieniem jakiejkolwiej innej, działającej,​ może być dobrym rozwiązaniem. 
- 
-  * Platforma Neo1973 wymagana do uruchomienia dystrybucji OpenMoko nie jest oficjalnie wspierana przez Qemu. Wsparcie dla tej architektury jest aktualnie przedmiotem aktywnego rozwoju - instnieje możliwość wyposażenia Qemu w taką funkcjonalność,​ ale nie jest to rozwiązanie w pełni stabilne i przewidywalne. 
- 
- 
- 
-===== 08.04.15 ===== 
- 
-Platformy warte rozważenia w dalszej części projektu, to: Android, OpenMoko (Neo1973) oraz płyta ewaluacyjna Versatile PB. 
- 
-=== Android === 
- 
-== Zalety == 
- 
-  * Stabilny rozwój architektury. 
-  * Dobry zestaw narzędzi pozwalających na tworzenie oprogramowania. 
-  * Dobrej jakości dokumentacja. 
- 
-== Wady == 
-  * Ograniczenia licencyjne (Google zastrzega sobie pewne zasadnicze [[http://​en.wikipedia.org/​wiki/​Android_%28mobile_phone_platform%29|prawa]] co do projektu) 
-  * Częściowo zamknięty kod 
-  * Ograniczenie dostępności pewnych funkcji hardware'​u dla oprogramowania. 
-  * Duży koszt ew. urządzenia. 
- 
- 
-=== OpenMoko === 
-  
-== Zalety == 
-  * Całkowita otwartość kodu. 
-  * Jasna koncepcja rozwoju. 
-  * Dostępność wirtualizatora (w najbliższej przyszłości,​ p. wyżej) 
- 
-== Wady == 
- 
-  * Aktualnie brak dobrego środowiska do emulacji platformy. 
-  * Duży koszt ew. urządzenia. 
- 
- 
-=== Versatile PB === 
- 
-[[http://​www.arm.com/​products/​DevTools/​VPB926EJ-S.html]] 
- 
-== Zalety == 
- 
-  * Jest to architektura o względnie uniwersalnym charakterze. 
-  * Obecna od dłuższego czasu na rynku - dobra dostępność oprogramowania. 
-  * Możliwość rozbudowy o dodatkowe komponenty. 
- 
-== Wady == 
-  * Przeciętnej jakości dokumentacja. 
- 
- 
- 
- 
-===== 08.04.22 ===== 
- 
-=== Krytyczna ocena dostępnych platform === 
- 
-== Maemo == 
- 
-  * Całkowicie otwarty kod. 
-  * Dobrej jakości SDK. 
-  * Pełen zestaw mogących się przydać bibliotek i oprogramowania:​ D-Bus, Hal, X Windows, itp. 
-  * Z przyczyn finansowych brak możliwości przetestowania poza środowiskiem emulowanym. 
- 
-== Platforma Maemo i wymienione wcześniej w odniesieniu do własnoręcznie przygotowanego środowiska == 
- 
-  * Każda z tych platform jest związana z konkretnym rozwiązaniem sprzętowym - trudność migracji, brak możliwości uruchomienia poza środowiskiem emulowanym. Przeciwnie, środowisko oparte o własnoręcznie dostosowany system prawdopodobnie byłoby łatwiej dostosować do nowego rozwiązania sprzętowego. 
-  * Ograniczona dostępność oprogramowania w binarnych pakietach w porównaniu np. do standardowej dystrybucji Debiana. 
-  * Konieczność stosowania określonych rozwiązań,​ częściowa zamkniętość/​ograniczenia w użyciu kodu/​narzędzi. 
- 
-=== Architektura ARMEL === 
- 
-Brak wsparcia ze strony dostępnych wirtualizatorów. 
- 
-=== Płyta ewaluacyjna Colibri === 
- 
-Wsparcie dla środowiska Linuksa: [[http://​www.vollmann.ch/​en/​colibri/​info.html]],​ [[http://​wiki.toradex.com/​index.php?​title=Linux]]. Niestety są to rozwiązania komercyjne. 
- 
- 
- 
-===== 29.04.22 ===== 
- 
- 
- 
-==== EMDebian ==== 
- 
-[[http://​rybacki.rootnode.net/​debian.pdf]] 
- 
-[[http://​wiki.debian.org/​Embedded_Debian]] 
- 
-[[http://​www.emdebian.org/​]] 
- 
-[[http://​wiki.debian.org/​EmdebianQuickStart]] 
- 
-[[http://​wiki.debian.org/​EmdebianGuide]] 
- 
-===== Minimalne środowisko uruchomieniowe ===== 
- 
-Jako platformy uruchomieniowej wydałoby się zasadne użycie systemu GNU/Linux wyposażonego w pakiety: D-Bus, PolicyKit oraz Hal. Pakiety te umożliwiają realizację zagadnień takich jak: komunikacja międzyprocesowa,​ zarządzanie uprawnieniami oraz interakcja z warstwą sprzętową. Dzięki wysokiemu poziomowi abstrakcji oraz łatwej konfigurowalności mogłby by stanowić wystarczające środowisko - teoretycznie,​ możliwe do przeniesienia na inne platformy. 
- 
-===== Scratchbox ===== 
- 
-Środowisko to pozwala na imitację częściowo natywnej kompilacji oprogramowania oraz kompilację skrośną. Wykorzystywany jest emulator QEMU dla architektury ARMEL. ​ 
- 
-===== SDK maemo ===== 
- 
-SDK maemo pozwala na stworzenie środowiska uruchomieniowego na bazie architektury x86 opartej o system GNU/Linux. Nie jest to emulacja, lecz kompilacja i użycie natywnego dla tej architektury kodu ale z użyciem elemetów dostępnych tylko dla maemo: 
- 
-[[http://​maemo.org/​development/​documentation/​tutorials/​maemo_4-0_tutorial.html#​development]] 
- 
-Takie rozwiązanie znacznie zwiększa wygodę testowania i obsługi aplikacji, jednocześnie nie ograniczając możliwości uruchomienia w środowisku emulatora (QEMU). 
- 
- 
- 
- 
- 
- 
- 
- 
-====== Sprawozdanie ====== 
- 
-===== Przegląd architektur sprzętowych ===== 
- 
-Ostatecznie,​ do dalszych prac, zostały uwzględnione trzy różne rozwiązania sprzętowe oparte o procesor architektury arm/armel. Dwa z nich to klasyczne urządzenia typu smartphone/​pda,​ natomiast w przypadku trzecim jest to płyta ewaluacyjna o szerokim zakresie zastosowań. Właściwości tych urządzeń zostaną rozpatrzone w poniższych punktach: 
- 
- 
- 
-==== Neo1973 ==== 
- 
-Jest to telefon pracujący w standardzie GSM , wyposażony w zestaw funkcji pozwalających zaliczyć go do klasy urządzeń smartphone. W finalnej wersji (aktualnie jest to sprzęt będący obiektem ciągłego rozwoju) mają się znaleźć: 
- 
-  * Procesor: Samsung S3C2442 B54 SoC @ 400Mhz 
-  * Interfejs WiFi: Atheros 802.11 b/g 
-  * Akcelerator graficzny: SMedia Glamo3362 
-  * Dwa czujniki przyspieszeń (3D) 
-  * 256MB pamięci Flash 
-  * 128MB pamięci SDRAM 
-  * 2MB pamięci Flash NOR 
-  * Bateria 1200mAh 
-  * Podświetlanie LED 
-  * Odbiornik GPS u-blox/​Atmel ATR0635 
-  * Interfejs Bluetooth 
-  * Host USB z zasilaniem 
-  * Czytnik kart microSD 
-  * Interfejs JTAG 
- 
-Oprogramowanie na tę architekturę powstaje w środowisku OpenMoko, które zostanie opisane w dalszych akapitach. 
- 
-Platforma ta może być emulowana przez wirtualizator QEMU, jednak wsparcie dla niej jest ciągle w fazie rozwoju (konieczności modyfikacji źródeł QEMU na podstawie odpowiedniego repozytorium). 
- 
- 
-==== Nokia Internet Tablet ==== 
- 
-Jest to seria urządzeń o funkcjonalności zbliżonej do klasycznych rozwiązań typu PDA (wbrew błędnie powielanym opiniom, urządzenia te nie posiadają funkcji telefonu). Najnowszym modelem z tej serii jest N810: 
- 
-  * Procesor: 400 MHz TI OMAP 2420 
-  * 2GB pamięci Flash 
-  * 128MB pamięci SDRAM 
-  * Klawiatura, ekran dotykowy 
-  * Wyświetlacz 800x400 pikseli, 16 bitowa głębia kolorów 
-  * Intefejs IEEE 802.11 b/g 
-  * Bateria 1500mAh 
-  * Czytnik kart miniSD 
-  * Interfejs Bluetooth 
-  * Interfejs USB 
-  * Odbiornik GPS 
-  * Kamera 
-  * Czujnik światła 
- 
-Platforma rozwojowa - maemo. 
- 
-Architektura ta jest wspierana (częściowo) przez wirtualizator QEMU. 
- 
- 
- 
-==== Płyta ewaluacyjna Versatile ==== 
- 
-Platforma ta, spośród wybranych, ​ zawiera najszerszy zestaw komponentów - jest to rozwiązanie przeznaczone do w pełni profesjonalnych zastosowań. Istnieje wiele odmian tego urządzenia;​ jako przykład może zostać przedstawiona [[http://​www.arm.com/​products/​DevTools/​VPB926EJ-S.html|płyta]]:​ 
- 
-  * Procesor ARM926EJ-S 
-  * Akcelerator Java Jazelle®, dodatki DSP 
-  * Koprocesor MOVE™, sprzętowy akcelerator kompresji MPEG 
-  * Koprocesor zmiennoprzecinkowy 
-  * Kontroler DMA, kontroler przerwań 
-  * Interfejs JTAG  
-  * 64MB pamięci Flash 
-  * 128MB 32 bitowej pamięci SDRAM 
-  * 2MB pamięci SRAM 
-  * Interfejs ethernet 
-  * LCD i ekran dotykowy 
-  * Wyjście VGA 
-  * 4 porty szeregowe 
-  * 1 synchroniczny port szeregowy 
-  * 32 zewnętrznych wyprowadzeń i/o 
-  * 1 interfejs USB, 2 hosty USB 
-  * 2 czytniki SmartCard 
-  * Interfejs klawiatury i myszy 
-  * Wyjście/​wejście audio stereo 
-  * Wyświetlacz alfanumeryczny 2x16 LCD 
-  * Kontroler PCI 
- 
-Platforma wspierana przez wirtualizator QEMU. 
- 
-===== Przegląd dostępnych środowisk softwareowych ===== 
- 
- 
- 
- 
-==== OpenMoko ==== 
- 
-Jest to projekt w stu procentach społecznościowy,​ a zatem i otwarty/​niezależny (GPL). Dystrybucja ta powstaje w oparciu o platformę [[http://​oe.linuxtogo.org/​]]. ​ 
- 
-Struktura zawartego oprogramowania została przedstawiona na poniższym schemacie: 
- 
-{{:​pl:​miw:​soft_stack_openmoko.jpg|:​pl:​miw:​soft_stack_openmoko.jpg}} 
- 
-  * Za komunikację międzyprocesową odpowiedzialny jest demon **D-Bus**. 
-  * Obsługa zdarzeń systemowych (np. zmiana stanu baterii, itp.) jest zapewniona przez demona **neod**; jest to rozwiązanie dość nietypowe i wyłamujące się z konwencji (w środowiskach opartych o system Linux tę rolę pełni najczęściej HAL), dodatkowo, prawdopodobnie jest to rozwiązanie tymczasowe: http://​svnweb.openmoko.org/​trunk/​src/​target/​OM-2007.2/​daemons/​neod/​README?​view=auto 
- 
- 
- 
- 
-==== Maemo ==== 
- 
- 
- 
-Środowisko to powstało w oparciu o dystrybucję linuksa Debian. Ciekawą własnością SDK należącego do tego środowiska jest możliwość stworzenia platformy uruchomieniowej na bazie architektury x86 z wykorzystaniem kompilacji skrośnej oraz częsciowej tylko emulacji (QEMU). To rozwiązanie jest możliwe dzięki zastosowaniu pakietu [[http://​www.scratchbox.org/​]]: ​ 
- 
-http://​maemo.org/​development/​documentation/​tutorials/​maemo_4-0_tutorial.html#​development 
- 
-Struktura oprogramowania została przedstawiona poniżej: 
- 
-{{:​pl:​miw:​soft_stack_maemo.png|:​pl:​miw:​soft_stack_maemo.png}} 
- 
-Środowisko bazuje na klasycznych rozwiązaniach:​ warto tu szczególną uwagę zwrócić na wykorzystanie takich pakietów, jak **D-Bus** oraz **HAL** (szczególnie interesujące w kontekście sterowania/​obsługi zdarzeń). Szczególnie cenna może być również wirtualizacja systemu plików (**GnomeVFS**),​ umożliwiająca wykorzystanie wielu dostępnych źródeł danych; narzędzia do obsługi XML; G-Conf (globalne zarządzanie danymi konfiguracyjnymi). 
- 
- 
- 
-==== Dystrybucja Debiana dla architektury ARM ==== 
- 
-Nie jest to właściwie pełne środowisko jak w przypadkach wyżej opisanych a raczej wydanie samego systemu możliwe do uruchomienia na wybranych paltformach sprzętowych. Szczególnym przypadkiem zastosowania tej dystrybucji,​ może być wspominana wcześniej płyta ewaluacyjna Versatile PB. 
- 
-Z faktem, iż nie jest to w pełni funkcjonalne środowisko wiąże się konieczność samodzielnego wyposażenia go w odpowiednie oprogramowanie. Problem ten częściowo da się rozwiązać przez wykorzystanie dostępnych wraz z dystrybucją pakietów i/lub kompilacji skrośnej/w środowisku wirtualizatora. Sytuacja taka daje jednak niewątpliwą korzyść w postaci możliwości niemal dowolnej ingerencji w ostateczny kształt rozwiązania. 
- 
-Przykład uruchomienia tej dystrybucji na wirtualizatorze,​ został przedstawiony tutaj: [[http://​www.aurel32.net/​info/​debian_arm_qemu.php]]. 
- 
- 
- 
-===== Zagadnienia związane z przenoszeniem ===== 
- 
-Kwestię przenaszalności,​ w rozważanym tutaj przypadku, można sprowadzić do problemu, czy na danej architekturze da się uruchomić system GNU/Linux. Ewentualne ograniczenia mogą wynikać z wyboru dodatkowego oprogramowania. Zastosowanie popularnych rozwiązań,​ wymienionych wcześniej (HAL, D-Bus, GnomeVFS, PolicyKit, itd.) daje możliwość oddzielenia warstwy sprzętowej/​systemowej od samego środowiska uruchomieniowego prologu. W praktyce oznacza to, że np. migracja między wymienionymi tu platformami będzie ograniczała się najwyżej do instalacji i/lub odpowiedniej konfiguracji wymaganego oprogramowania. 
- 
-===== Analiza zużycia zasobów przez kompilatory prologu ===== 
- 
- 
- 
-==== Kompilacja ==== 
- 
-Kompilację przeprowadzono w środowisku:​ http://​www.aurel32.net/​info/​debian_arm_qemu.php uruchomionym na wirtualizatorze QEMU. Komputer, na którym uruchomiono wirtualizator wyposażony był w procesor Core 2 Duo T5500, 2GB pamięci RAM, system operacyjny FreeBSD. Kompilacja **Yap** zajęła w sumie ok. 40 min. W przypadku **SWI**, proces ten przeciągnął się nieomal do 3 godzin. 
- 
- 
- 
- 
- 
-==== Zużycie pamięci ==== 
- 
-=== SWI === 
- 
-{{:​pl:​miw:​mem_swi.png|:​pl:​miw:​mem_swi.png}} 
- 
-Po uruchomieniu (zajmowanej pamięci rzeczywistej):​ 2968kB. 
- 
-=== Yap === 
- 
-{{:​pl:​miw:​mem_yap.png|:​pl:​miw:​mem_yap.png}} 
- 
-Po uruchomieniu (zajmowanej pamięci rzeczywistej):​ 3328kB. 
- 
- 
-==== Zużycie czasu procesora ==== 
- 
-Nie udało się dokładnie zbadać zapotrzebowania na czas procesora w przypadku wymienionych kompilatorów,​ jednak, zauważono, w środowisku wirtualizatora wyraźnie mniejszą responsywność kompilatora SWI. 
- 
- 
-===== Kierunki rozwoju pracy ===== 
- 
-  * Określenie na jakim poziomie ma przebiegać interakcja prologu z pozostałymi składnikami systemu; na tej podstawie wybór właściwego oprogramowania otaczającego. 
-  * Wybór platformy lub wykorzystanie uniwersalnych,​ przenaszalnych rozwiązań. 
-  * Stworzenie środowiska ułatwiającego analizę wymagań/​działania kompilatorów prologu pod względem wydajności i niezawodności. 
- 
-==== Na przyszłość ==== 
-Do sprawdzenia:​ 
-  * [[http://​www.ubuntu.com/​products/​mobile]] 
-  * [[http://​www.moblin.org/​index.php]] 
-  * [[https://​wiki.ubuntu.com/​MobileAndEmbedded]] 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-====== Materiały ====== 
-{{:​pl:​miw:​gjn-mixdes2006-final.pdf|:​pl:​miw:​gjn-mixdes2006-final.pdf}} 
- 
-http://​www.toradex.com/​e/​colibri_evalboard.php 
pl/miw/miw08_ruleruntimep.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0