Ponieważ będziemy się bawić na dość niskim poziomie, zakładam pewną znajomość systemów komputerowych ogólnie (w sesie jak działają, a nie jakie gry na to są...), najlepiej, jakby to był linux - bo w końcu android to zwykły linux, no i oczywiście umiejętność logicznego myślenia. Jeśli chcemy coś zmieniać, niestety potrzebna jest podstawowa (co najmniej) znajomość skryptów shella (takie programowanie dla początkujących), no bo trzeba jakoś napisać to, co chcemy, żeby się działo. Oczywiście im więcej, tym lepiej.
Zakładam też, że mamy zrootowany telefon (oczywista oczywistość), fastboot i recovery (ja używam clockwork, ale może być jakiekolwiek, które uruchamia adb, ale o tym potem). Na później przyda się busybox i bash, żeby w miarę wygodnie się poruszać po podziemiach naszego telefonu ;]. Ściągnąć dobrze jest też android sdk, a finalnie całe źródła, bo tam jest toolchain do budowy (to potem).
Chciałbym (utopijnie), żeby zebrała się grupa ludzi (2 to już grupa 🙂) aktywnie w tym grzebiących, a nie tylko korzystających z 'kernela od quarxa' i 'paczek na recovery', która będzie tworzyć mody, a nie tylko ich używać.
W sumie jest sporo rzeczy, o których chciałbym napisać. Ale przede wszystkim chciałbym pokazać, co jest w środku tego wszystkiego, żeby chętni mogli to zrozumieć i próbować zmieniać.
#1. Jak rozbebeszyć boot.img i czym on na prawdę jest.
Boot.img to sklejony razem kernel i ramdysk. Kernel, czyli jądro systemu linux to głównie wszystkie sterowniki do sprzętu i podstawowe 'funckje życiowe'. Ramdysk (initrd=initial ram disk), to po prostu mały system plików ładowany zaraz na początku do pamięci (jak nazwa wskazuje) i używany jako główny system plików, czyli /, czyli root.
Jednym i drugim można bawić się osobno, przy czym grzebanie w ramdysku jest prostsze i od tego zaczniemy.
Potrzebny będzie linux. Alternatywnie wystarczą (chyba, postaram się sprawdzić) narzędzia linuxowe pod windowsa, nazywa się to cygwin i jest do zainstalowania tym: http://cygwin.com/setup.exe . Do poczytania na stronie. Przy instalacji 'na szybko' - trzeba zaznaczyć utils/cpio i sprawdzić, czy zaznaczone są Perl/perl.
Żeby rozłożyć boot.img na części, używamy skryptu z załącznika (znalazłem 2, używam split_bootimg.pl). Da nam to plik z jądrem i ramdysk. Ramdysk to tak na prawdę spakowane gzipem archiwum cpio. Co to jest gzip i cpio dowiadujemy się z googla...
cpio jest o tyle specyficzne, że jako parametr nie podaje się mu nazwy katalogu/plików do spakowania, a wrzuca się je na standardowe wejście (ale to kwestia przyzwyczajenia).
Żeby rozłożyć ramdysk, tworzymy sobie jakiś katalog, wchodzimy do niego i wykonujemy polecenie
zcat plik.ramdysku | cpio -id
pierwsze rozpakowuje 'zipa', drugie rozpakowuje archiwum cpio i dostajemy katalog. Możemy sobie teraz obejrzeć, pogrzebać itd. Oczywiście to, 'jak grzebać' jest ograniczone tylko naszą wiedzą i wyobraźnią i jest to temat na osobny post.
Żeby teraz z powrotem zrobić ramdysk, będąc w katalogu, który stworzyliśmy (w tym, gdzie jest init.rc), uruchamiamy komendę
find . | cpio -H newc -o | gzip -v9 > ../nowy.ramdysk.cpio.gz
pierwsze polecenie wypisuje nazwy wszystkich plików w bieżącym katalogu i poniżej, karmi tymi nazwami cpio, które tworzy z podanych plików jedno archiwum, które pakuje gzip i zapisuje do pliku w katalogu nadrzędnym. To się nazywa potok (słów ;D).
I teraz można go odpalić na telefonie 🙂
Teraz trochę obdzierania z magii, czyli co robią poszczególne klocki, którymi się bawimy 'modując'.
FASTBOOT
Fastboot - boot manager z funkcjonalnością flashowania obrazów. Tu cudów nie ma... prawie 😉 Nowego kernela/ramdysk dzięki fastbootowi możemy przetestować nie flashując. Jest to o tyle wygodne, że po reboocie mamy stary, więc jak nie wstanie, to nie problem, a nie 'zużywamy' flasha na testy. Nie trzeba też robić 'backupu nandroidem', jak przy 'wgrywaniu przez recovery'.
Żeby odpalić kernel, który mamy w postaci kernel/ramdysk, na naszym lg, piszemy (po wejściu do fastboot oczywiście).
fastboot -c 'mem=214M console=ttyMSM2,115200n8 androidboot.hardware=swift' -b 0x200000 boot plik.kernela plik.ramdysku
Jeśli nie ma którejś opcji (fastboot bez parametrów wyświetla helpa), to znajdź innego (miałem takiego, co nie miał -b). Chyba był w sdk androida (google...). Załączam te, których używam.
UWAGA!!
Przed takim testem, przed wyłączeniem telefonu wyłączamy wifi i bt (szczególnie wifi). Dlaczego? Bo wifi ładuje moduł do jądra (chyba że jest wkompilowany na stałe, a przeważnie nie jest, ale o tym potem). Ponieważ w pamięci jest inny kernel, moduł najprawdopodobniej nie będzie pasował i kończy się to zwiechą/rebootem.
No chyba, że jest to kernel, który mamy normalnie, a tylko w ramdysku grzebiemy, to wszystko jedno.
Żeby sobie przetestować, czy wszystko robimy dobrze, proponuję wziąść boot.img, którego aktualnie uzywamy (wydłubać z update.zip), rozdzielić go, rozpakować, spakować i uruchomić przez fastboot. Powinien wstać (no bo wiemy, że działa) i wtedy wiemy, że metoda jest dobra. Jak nie wtaje, to coś robimy źle (no bo pliki się nie zmieniły).
Jak nam się spodoba i zostaje, to
fastboot -c 'mem=214M console=ttyMSM2,115200n8 androidboot.hardware=swift' -b 0x200000 flash:raw boot plik.kernela plik.ramdysku
Czyli boot.img nie jest nam potrzebny. Oczywiście możemy go zrobić, jak chcemy go komuś dać, ale o tym potem. Tak oto można sobie modyfikować np. init.rc 😉
RECOVERY
I tu niespodzianka:) bo to dokładnie to samo, co boot.img 🙂 Jeśli chodzi o strukturę przynajmniej, to jest to drugi kernel i ramdysk. Różnica polega na tym, że nie ładuje reszty systemu, a tylko odpala adb i jakiś programik, który widzimy na ekranie (lub nie, jak ktoś nie ma bootlogo - bez obaw, nie jest to konieczne, jeśli się wie, co jest w środku 🙂
Można sobie rozpakować wg. instrukcji powyżej i obejrzeć init.rc 🙂
Do konsoli systemu (w tym recovery) możemy się zalogować przez usb pisząc adb shell. Dopóki nie przełączymy się na root, to za wiele nie można zepsuć, więc miłej zabawy (uwaga - w recovery mamy roota, więc można skasować absolutnie wszystko - zalecam ostrożność🙂)
Teraz pozostaje wgranie modułów, jeśli wgrywamy nowy kernel, ale to następnym razem...
PS
Polecam używać googla... zna odpowiedzi na większość pytań... no i dużo czytać...
Swojego kernela wrzucę, jak dopracuję skrypty 'okołokernelowe', bo mam ten system juz trochę 'poszyty'
Pozdrawiam
MK
Forum po zmianach, link nie działa
Forum po zmianach, link nie działa
Forum po zmianach, link nie działa