Logo pl.nowadaytechnol.com

Jak Zbudować Niestandardowe Jądro Androida

Spisu treści:

Jak Zbudować Niestandardowe Jądro Androida
Jak Zbudować Niestandardowe Jądro Androida

Wideo: Jak Zbudować Niestandardowe Jądro Androida

Wideo: Jak Zbudować Niestandardowe Jądro Androida
Wideo: Jak stworzyć swój własny system operacyjny? 2024, Marsz
Anonim

Jeśli kiedykolwiek zastanawiałeś się, „jak zbudować jądro Androida”, ten przewodnik jest dla Ciebie. Budowanie własnego jądra może być satysfakcjonującym doświadczeniem, ponieważ da ci większy stopień kontroli nad urządzeniem z Androidem, od procesora, pamięci RAM, GPU, po baterię.

Jest to bardzo praktyczny proces, który wymaga wielu poleceń kompilacji i konsoli, ale jeśli znasz Linuksa (lub dobrze postępujesz zgodnie ze wskazówkami), nie powinno to stanowić problemu.

Należy pamiętać, że ten przewodnik dotyczy urządzeń innych niż Mediatek. Appual’s ma przewodnik kompilacji jądra dla konkretnego sojusznika dla urządzeń z Androidem opartych na Mediatek tutaj: Jak zbudować jądro Androida Mediatek ze źródła

Inne interesujące artykuły Appual to:

  • Jak zbudować niestandardową pamięć ROM z projektu Android Open Source | Pt. 2
  • Jak ręcznie motywować interfejs systemu Android

Jeśli budujesz zwyczaj kernel, wystarczy sklonować jądro z Gita za pomocą poleceń podanych poniżej. Ale jeśli kompilujesz podstawowe jądro, musisz wiedzieć, skąd wziąć oryginalne jądro ze źródła (z różnych powodów).

Oryginalne źródła jądra dla różnych marek:

  • Google
  • LG
  • Samsung
  • HTC
  • OnePlus
  • Motorola
  • Sony

Aby pobrać jądro, użyj git clone lub pobierz plik tarball i rozpakuj go.

Oto polecenie git:

git clone -b

-LUB-

tar -xvf

Na przykład byłoby to polecenie pobrania najnowszego jądra Nexusa 6P Nougat 3.10 od Google: git clone -b android-msm-angler-3.10-nougat-mr2 https://android.googlesource.com/kernel/msm/ angle

Powinno to sklonować repozytorium jądra / msm do folderu angler i automatycznie pobrać plik android-msm-angler-3.10-nougat-mr2.

Ponieważ większość urządzeń z Androidem jest oparta na architekturze ARM, będziemy musieli użyć kompilatora, który będzie ukierunkowany na urządzenia ARM - oznacza to, że kompilator hosta / natywny nie będzie działać, chyba że kompilujesz na innym urządzeniu ARM. Masz tutaj kilka opcji. Możesz samemu skompilować, jeśli wiesz jak, używając czegoś takiego jak Crosstool-NG. Alternatywnie możesz pobrać wstępnie skompilowany kompilator - taki jak ten, który Google zapewnia dla Arm 32-bit i Arm64.

Przed pobraniem gotowego kompilatora musisz znać dokładną architekturę swojego urządzenia, więc użyj aplikacji takiej jak CPU-Z, aby to ustalić.

Innym popularnym łańcuchem narzędzi byłby UberTC - ale w przypadku każdego jądra wyższego niż 4.9 trzeba będzie je załatać, a kompilacja najpierw z łańcuchem narzędzi Google jest najlepszą praktyką.

W każdym razie, gdy już zdecydujesz się na łańcuch narzędzi, musisz go sklonować. git clon

Teraz wskaż Makefile swojemu kompilatorowi, uruchamiając go z folderu toolchain.

eksportuj CROSS_COMPILE = $ (pwd) / bin / -

Przykład:

eksportuj CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-

Teraz powiedz Makefile o architekturze twojego urządzenia.

eksport ARCH = && eksport SUBARCH =

Przykład:

export ARCH = arm64 && export SUBARCH = arm64

Znajdź właściwy defconfig, przechodząc do folderu arch // configs w źródle jądra (np. Arch / arm64 / configs).

Następnie znajdź właściwy plik konfiguracyjny programisty dla budowanego jądra. Zwykle powinien mieć postać _defconfig lub _defconfig. Defconfig poinstruuje kompilator, jakie opcje należy uwzględnić w jądrze.

Można również znaleźć ogólne konfiguracje Qualcomm, zwykle będzie to coś w rodzaju (msm-perf_defconfig, msmcortex-perf_defconfig).

Budowanie jądra

Kod:

czyścić uczynić mrproper Marka make -j $ (nproc –all

Gdy te polecenia się powiodą, na końcu powinien znajdować się plik Image, Image-dtb, Image.gz lub Image.gz-dtb.

Jeśli te polecenia nie powiodły się, może być konieczne określenie katalogu wyjściowego podczas tworzenia nowego jądra opartego na CAF, na przykład:

mkdir -p out spraw, aby O = na zewnątrz było czyste make O = out mrproper zrobić O = out zrobić O = out -j $ (nproc –all

Jeśli nadal nie chce działać, coś jest zepsute - sprawdź swoje nagłówki lub powiedz o tym programistom jądra.

Jeśli jądro zostało pomyślnie skompilowane, musisz je teraz sflashować. Można to zrobić na dwa różne sposoby - możesz rozpakować i przepakować bootimage za pomocą Android Image Kitchen lub AnyKernel2.

Mogą też występować pewne niuanse związane z określonymi urządzeniami - w takim przypadku musisz poprosić o pomoc programistów urządzeń.

Flashowanie jądra w Android Image Kitchen

Pobierz aplikację Android Image Kitchen

Wyodrębnij obraz rozruchowy swojego urządzenia z Androidem z najnowszego dostępnego obrazu (w standardowej lub niestandardowej pamięci ROM).

Teraz rozpakuj obraz, używając tego kodu: unpackimg.sh.im

Następnie znajdź plik zImage i zastąp go skompilowanym obrazem jądra - zmień jego nazwę na taką, jaka była w obrazie rozruchowym.

Teraz uruchom ten kod, aby przepakować obraz: repackimg.s

Teraz możesz sflashować nowy obraz rozruchowy za pomocą fastboot, TWRP itp.

Flashowanie jądra w AnyKernel2

Pobierz najnowszy AnyKernel2

Zastosuj tę poprawkę, aby wyczyścić wszystkie pliki demonstracyjne. wget https://github.com/nathanchance/AnyKernel2/commit/addb6ea860aab14f0ef684f6956d17418f95f29a.diff patch -p1 <addb6ea860aab14f0ef684f6956d17418f95f29a.diff rm addb6ea860aab14f0ef684f6956d17418f95f29a.dif

Teraz umieść obraz jądra w katalogu głównym pliku i otwórz anykernel.sh, aby zmodyfikować te wartości:

  • strunowy: nazwa twojego jądra
  • Nazwa#: Lista wszystkich nazw kodowych urządzenia (z /system/build.prop: ro.product.device, ro.build.product)
  • blok: Ścieżka obrazu rozruchowego w pliku fstab. Fstab można otworzyć z katalogu głównego urządzenia i będzie wyglądać mniej więcej tak:

Pierwsza kolumna to wartość, na którą chcesz ustawić blok.

Teraz ponownie spakuj jądro i sflashuj je w AnyKernel2: zip -r9 kernel.zip * -x README.md kernel.zi

Ostrzegamy, że wiele jąder z CAF zawiera skrypt Pythona, który wyzwoli –Werror, co w zasadzie powoduje, że twoja kompilacja generuje błędy przy najmniejszych rzeczach. Tak więc w przypadku wyższych wersji GCC (które zawierają więcej ostrzeżeń), zazwyczaj będziesz musiał wprowadzić zmiany w pliku Makefile:

diff --git a / Makefile b / Makefile indeks 1aaa760f255f..bfccd5594630 100644 --- a / Makefile +++ b / Makefile @@ -326,7 +326,7 @@ include $ (srctree) /scripts/Kbuild.include AS = $ (CROSS_COMPILE) jako LD = $ (CROSS_COMPILE) ld -REAL_CC = $ (CROSS_COMPILE) gcc + CC = $ (CROSS_COMPILE) gcc CPP = $ (CC) -E AR = $ (CROSS_COMPILE) ar NM = $ (CROSS_COMPILE) nm @@ -340,10 +340,6 @@ DEPMOD = / sbin / depmod PERL = perl CHECK = rzadki

- # Użyj opakowania dla kompilatora. To opakowanie wyszukuje nowe pliki - # ostrzeżenia i powoduje zatrzymanie kompilacji po ich napotkaniu. -CC = $ (srctree) /scripts/gcc-wrapper.py $ (REAL_CC) - FLAGI KONTROLNE: = -D_linux_ -Dlinux -D_STDC_ -Dunix -D_unix_ / -Wbitwise -Wno-return-void $ (CF) CFLAGS_MODULE =

Używanie wyższego łańcucha narzędzi GCC (5.x, 6.x, 7.x lub nawet 8.x) będzie wymagało nuke'owego skryptu opakowującego GCC jak powyżej i użycia zunifikowanego pliku nagłówkowego GCC (wybierz następujące, jeśli masz dołączone / linux /compiler-gcc#.h):

3.4 / 3.10: 3.18

Nawet jeśli pojawia się dużo ostrzeżeń, nie trzeba ich naprawiać (zazwyczaj).

Twoje jądro jest zbudowane i gotowe do pracy!

Zalecana: