Chciałbym zapoczątkować serię artykułów poświęconych tematyce Linuxa na urządzeniach mobilnych, a dokładniej na telefonach komórkowych nie koniecznie dostarczonych z Linuxem.

Głównym obiektem moich badań jest telefon Sony Ericsson Xperia X1, nazywany (głównie na zachodzie) też HTC Kovsky bądź HTC Venus. Telefon ten, dostarczany z Windows Mobile 6.1, wyposażony jest w procesor Qualcomm 7200A taktowany zegarem 528 Mhz. Procesor ten obsługuje zestaw instrukcji ARMv6.

W sieci znaleźć można kilka stron mówiących o podobnej tematyce, jednak X1 na zachodzie nie jest tak popularne jak HTC Raphael, HTC Kaiser czy HTC Diamond. Ostatnie publiczne „badania” nad uruchomieniem linuxa na X1 zostały zaprzestane kilka miesięcy temu. Od jakiegoś czasu pracuje nad patchem do kernela dla X1. Kontynuuje też research który został zapoczątkowany na forum XDA. Niedługa na XDA zaczną też się pojawiać moje aktualizacje.

Cała praca (analiza sprzętowa urządzenia itp.) ma na celu uruchomienie w pełni funkcjonalnego Androida na telefonach z ww. procesorem.

Na tą chwilę mogę pochwalić się kernelem, który poprawnie obsługuje:

  • czytnik kart SD
  • klawiatura
  • zgłaszanie eventa w momencie otworzenia klawiatury
  • obsługa klawiszy z frontowego panelu (z wyłączeniem joysticka optycznego)
  • touchpad

Całość do testów/zabawy dostarczam z dystrybucją Angstrom skompilowaną specjalnie dla tego procesora ARM. Tutaj znajdziecie wersję mojej publicznej paczki z Linuxem dla X1: aiv-x1-pack-02.zip

W archiwum znajduje się:

  • haret-x1.exe – loader linuxa, który zastępuję Windows Mobile w pamięci. Dzięki takiemu rozwiązaniu po restarcie telefonu nie zauważycie żadnych zmian – normalnie uruchomi się Windows.
  • initrd-aiv-04.gz – obraz initrd z systemem Angstrom
  • zImage-aiv-x1-31-2006 – kernel który HaRET umieści w pamięci (31 oznacza moją wersję kernela, a 2006 numer mtype – wyjaśnienie poniżej)
  • default.txt – skrypt uruchamiający procedury HaRET’a

Rozpakowane archiwum umieść na swoim telefonie w dowolnym miejscu – byle by wszystkie ww. pliki były w jednym katalogu. Uruchom haret-x1.exe i naciśnij „Run”. Pojawi Ci się leader linuxa, który po chwili zamieni ekran Windows w czarną konsolę z komunikatami kernela (ekran podczas łądowania będzie do góry nogami). Po pomyślnym załadowaniu Angstroma zobaczysz piękne „x1 login:”. Login: root, bez hasła.

Domyślnie Twój telefon posiada interfejs sieciowy usb0 z ustawionym ip 192.168.0.206/24. Jeżeli podłączysz telefon pod linuxa via usb (pod Windowsem nie działa) to zostanie on wykryty jako interfejs sieciowy i pojawi Ci się usb0 w systemie. Konfigurując interfejs na przykład tak: 192.168.0.202/24 będziesz mógł podłączyć się do swojego telefonu via SSH.

W pliku default.txt znajdziesz:

set mtype 2006
set kernel zImage-aiv-x1-31-2006
set initrd initrd-aiv-04.gz
set ramsize 0x6000000
set ramaddr 0x10000000
set cmdline "root=/dev/ram0 init=/init console=tty0 mem=94M msmts_calib=0xc5.0x399.0x367.0x4d fbcon=rotate:3"
# boot_delay=<M>
# msmvkeyb_toggle=<off|hide>
boot

Opis:
#1 – ustawienie typu maszyny dla haret’a i kernela. Dzięki tej zmiennej kernel wie na jakim telefonie jest uruchamiany
#2 – plik kernela
#3 – plik obrazu initrd
#4-5 ustawienia dotyczące rozmiaru pamięci
#6 – linijka przekazywana jest bezpośrednio do kernela:
- fbcon=rotate:3 obrót ekranu po załadowaniu framebuffera
- msmts_calib parametry kalibracyjne touchscreen’a
- pozostałe ustawienia dotyczą źródła bootowania bądź definicji rozmiaru pamięci
Możesz dodać do niej parametry, które są zakomentowane:
- boot_delay pozwala wprowadzić pewnie opóźnienie w wyświetlaniu każdej linii kernela na ekranie
- msmvkeyb_toggle odpowiada za wyłączenie, ukrycie klawiatury ekranowej

Z aktualnych problemów, które możesz napotkać:
- bootowanie staje na opcji „Calibrating delay loop…” – jeżeli poczekasz dłużej linux się załąduje
- bootowanie staje na msmfb_probe() … – musisz ponownie uruchomić telefon (reset rysikiem albo wyjęcie baterii)

W przyszłych publikacjach będę opisywał postępy i udostępniał nowe wersje paczek (niedługo pewnie z Androidem). Znajdzie się tez miejsce na bardziej techniczne informacje o samej strukturze systemu, urządzeniach telefonu itp. Za jakiś czas udostępnię też moje repozytorium git’a z kernele dla X1.

Rozwiązanie to jest całkowicie bezpiecznie dla Twojego telefonu. HaRET podmienia Windowsa w pamięci RAM, która po restarcie telefonu jest czyszczona. Oczywiście, jak to ma zawsze miejsce, nie ponoszę żadnej odpowiedzialności za jakiekolwiek błędy, straty itp.

Na koniec kilka zdjęć z działającego linuxa:

3 odpowiedzi na “Linux/Android na telefonie komórkowym Xperia X1”
  1. przemo191 pisze:

    to jesli wrzuce twoja werje na tel to bede mogl przywrocic windowsa bo nie zabardzo rozumiem tego haret-x1.exe – leader linuxa, który zastępuję Windows Mobile w pamięci. Dzięki takiemu rozwiązaniu po restarcie telefonu nie zauważycie żadnych zmian – normalnie uruchomi się Windows

  2. maly_wodz pisze:

    No, no, gratuluje! :)

  3. Mariusz Dalewski pisze:

    @przemo191 zaktualizowałem artykuł o jedno zdanie na końcu. HaRET podmienia Windowsa w pamięci RAM, która po restarcie jest czyszczona. Technologia ta nie wprowadza żadnych zmian w Twoim telefonie (chyba żre z poziomu Linuxa zapiszesz sobie jakiś plik na karcie pamięci :) to wtedy będziesz miał zmianę).

  4.