Jak zbudować jądro Androida na Windows 10

Appual's ma kilka świetnych przewodników na temat rozwoju Androida, takich jak Jak zbudować niestandardową pamięć ROM z Android Open Project Project - ale te przewodniki są zazwyczaj ukierunkowane na czysto środowisko kompilacji Linuksa.

W tym przewodniku pokażemy, jak zbudować jądro systemu Android w systemie Windows 10 - tak, nadal będziemy korzystać ze środowiska kompilacji systemu Linux, ale będzie to podsystem Linux w systemie Windows 10. Więc jeśli jesteś Windows 10 użytkownik zainteresowany programowaniem na Androida, uważnie postępuj zgodnie z naszym przewodnikiem.

W tym przewodniku w szczególności nauczymy się, jak zbudować jądro dla urządzeń ARM i MediaTek, dodając funkcje i podstawowe omówienie korzystania z Git.

Wymagania

  • Windows 10 x64 (z aktualizacją Fall Creator)

Konfigurowanie środowiska Linux

  1. W systemie Windows 10 wybierz Ustawienia> Aktualizacja i zabezpieczenia> Dla programistów> włącz tryb programisty.
  2. Teraz przejdź do Panelu sterowania> Programy> Włącz lub wyłącz funkcje systemu Windows> włącz Podsystem Windows dla systemu Linux.
  3. Uruchom ponownie komputer.
  4. Uruchom podsystem Linux i pozwól mu przejść przez proces pobierania. Ustaw hasło i nie zgub go.
  5. Teraz przejdź do sklepu z aplikacjami dla systemu Windows i pobierz Ubuntu.
  6. Uruchom Ubuntu na pulpicie Windows 10, a poprosi o nazwę użytkownika i hasło.
  7. W Ubuntu uruchom natywny terminal i wpisz następującą komendę: apt-get update
  8. Spowoduje to aktualizację wszystkich repozytoriów dla aplikacji i zależności.
  9. Następnie w typie terminala: sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
  10. Aby sprawdzić, czy wszystkie zależności zostały poprawnie zainstalowane, wpisz „gcc” w terminalu (bez cudzysłowów).
  11. Jeśli „gcc” jest już zainstalowany, powinieneś zobaczyć „gcc: błąd krytyczny: brak pliku wejściowego”
  12. Teraz możesz wpisać „make” w terminalu. Jeśli „make” jest już zainstalowany, powinieneś zobaczyć „make: *** nie określono celu i nie znaleziono pliku makefile. zatrzymać."
  13. Następnie wpisz „git”, a iff „git” jest już zainstalowany, powinieneś zobaczyć kilka podstawowych poleceń git.
  14. Teraz potrzebujemy łańcuchów narzędzi (istnieje kilka rodzajów, w tym GCC, Linaro i kilka niestandardowych). Niektóre urządzenia mogą wymagać różnych łańcuchów narzędzi, na przykład nie wszystkie jądra urządzeń będą się uruchamiać lub kompilować z GCC.

Dla urządzeń ARM

W tym celu będziemy używać GCC 4.7.

  1. Otwórz terminal Linux i wpisz: jądro mkdir
  2. Teraz wpisz: jądro cd
  3. (nie musi to być „jądro”, to dla uproszczenia, możesz nazwać go, jak chcesz).
  4. Teraz wpisz: git clone //android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7

Dla urządzeń ARM 64

Potrzebujesz 64-bitowego kompilatora jądra dla urządzeń ARM 64, na przykład aarch64.

Pobieranie plików źródłowych na urządzenie

Jest to trudna część, ponieważ musisz znaleźć repozytorium GitHub, które obsługuje źródło twojego jądra. Będziesz oczywiście musiał go wyszukać, najprawdopodobniej można go znaleźć na forach XDA.

Oto przykładowe źródło jądra Git.

W lewym górnym rogu powinien być widoczny „Oddział: Zakończone przez xxxx”.

Istnieją różne wersje jądra / projektu, zwykle oddzielone „Testing”, „Beta”, „Final Release” itp.

Foldery jądra są zwykle następujące:

  • / arch / arm / configs : Zawiera różne pliki konfiguracyjne dla urządzenia, takie jak gubernatory itp.
  • / output / arch / arm / boot / : To jest miejsce przechowywania zimage.
  • build.sh : skrypt, który uprości proces budowania.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 : Zazwyczaj jest to łańcuch narzędzi umieszczony w źródle jądra, dzięki czemu łatwiej go znaleźć.

Będziesz musiał pobrać źródło jądra.

Otwórz terminal Linux i upewnij się, że znajdujesz się w folderze jądra, który wcześniej utworzyłeś (jądro cd).

Następnie wpisz terminal: „git clone” URL jądra github ”-b„ nazwa gałęzi ”

Na przykład: „git clone //github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW”

Budowanie jądra

Aby to ułatwić, możesz przejść do lokalizacji w eksploratorze plików. Powinien to być / home / ID użytkownika / jądro (lub jakkolwiek nazwałeś folder jądra).

Powinieneś zobaczyć dwa foldery w środku, dla zestawu narzędzi i źródła jądra. Wejdź do folderu źródłowego jądra.

Dla urządzeń ARM

W terminalu wpisz następujące polecenia:

 #! / bin / bash export ARCH = eksport uzbrojenia CROSS_COMPILE = wyjście mkdir make -C $ (pwd) O = wyjście "nazwa defconfig i wariant w razie potrzeby" make -j4 -C $ (pwd) O = wyjście 

Oto przegląd działania tych poleceń, aby ułatwić to w przyszłości.

  • #! / bin / bash: Mówi skryptowi, aby uruchomił się w poleceniu powłoki
  • export ARCH = arm: Definiowanie typu architektury jądra (na przykład arm64 itp.)
  • export CROSS_COMPILE = : Znajdź, gdzie znajduje się łańcuch narzędzi. Musi dokładnie pasować do ścieżki, a kreska na końcu jest naprawdę obowiązkowa.
  • Dane wyjściowe mkdir: Tworzy katalog do zapisywania skompilowanego programu zimage
  • make -C $ (pwd) O = wyjście : Definiowanie defconfig dla kompilacji jądra przewodnika.
  • make -j4 -C $ (pwd) O = wyjście : Kiedy zaczyna się proces budowania, -j # mówi, jak szybko spróbować skompilować. Zazwyczaj ustawia się ten numer w zależności od procesora. Na przykład ustawienie -j32 na budżetowym procesorze prawdopodobnie spowodowałoby ogromną niestabilność.
  • cp wyjście / arch / arm / boot / Image $ (pwd) / arch / arm / boot / zImage : Służy do przenoszenia obrazu na drugą ścieżkę.

Inny przykład:

 #! / bin / bash export ARCH = eksport uzbrojenia CROSS_COMPILE = $ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi- mkdir wyjście make -C $ (pwd) O = wyjście msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = selinux_defconfig make -j4 -C $ (pwd) O = wyjście cp wyjście / arch / arm / boot / Boot / Image $ (pwd) 

Dla urządzeń ARM 64

 #! / bin / bash export ARCH = eksport arm64 CROSS_COMPILE = "ścieżka do twojego zestawu narzędzi" (musi kończyć się czymś w rodzaju „nameofarch-coś-") wyjście mkdir make -C $ (pwd) O = wyjście "nazwa defconfig i w razie potrzeby wariant "make -j4 -C $ (pwd) O = wyjście 

Dla urządzeń Mediatek (MTK)

 #! / bin / bash export CROSS_COMPILE = „ścieżka do twojego zestawu narzędzi” (musi kończyć się czymś w rodzaju „nameofarch-coś-”) eksport ARCH = uzbrojenie ARCH_MTK_PLATFORM = w razie potrzeby wprowadź „nazwę defconfig i wariantu” make -j4 

Po wykonaniu kroków niezbędnych dla architektury jądra, możesz wpisać w terminalu: sudo bash build.sh

Następnie wprowadzisz hasło użytkownika i rozpocznie się proces kompilacji.

Może to chwilę potrwać, ale zazwyczaj nie bardzo długo, kompilacja jądra nie jest jak kompilacja całego ROMu Androida. To naprawdę zależy od procesora - na przykład procesor AMD Phenom X4 3, 4 GHz z 8 GB pamięci RAM powinien zająć około 10 minut od kompilacji od początku do końca.

Po zakończeniu powinien powiadomić Cię komunikatem „Zimage is ready”.

Urządzenia ARM i ARM64

Przejdź do „/ Output / arch / arm / boot /”, aby znaleźć swój zimage.

Urządzenia Mediatek

Przejdź do „/ arch / arm / boot /”, aby znaleźć swój zimage.

Nie wszystkie kompilacje jądra będą skutkowały plikiem Zimage, czasem można go zbudować jako inne formaty obrazu.

Ważne: Jeśli zamierzasz ponownie skompilować, zaleca się wprowadzenie komend make clean i make mrproper przed ponownym rozpoczęciem procesu kompilacji.

Wykonanie rozruchu jądra

Istnieją dwie opcje do wyboru.

Możesz użyć metody anykernel (zdefiniowanej przez użytkownika XDA @ osm0sis w tym wątku XDA). Powinieneś przeczytać cały samouczek, ale podsumowanie kroków jest następujące:

  1. Umieść zImage w katalogu głównym (dtb i / lub dtbo powinny również przejść tutaj w przypadku urządzeń wymagających niestandardowych, każde wróci do oryginału, jeśli nie zostanie dołączone)
  2. Umieść wszystkie wymagane pliki ramdysku w / ramdisk i moduły w / moduły (z pełną ścieżką, jak / moduły / system / lib / moduły)
  3. Umieść wymagane pliki łatek (zazwyczaj pliki częściowe, które idą z poleceniami) w / patch
  4. Zmodyfikuj plik anykernel.sh, aby dodać nazwę jądra, lokalizację partycji rozruchowej, uprawnienia dla dołączonych plików ramdysku i użyj metod dla wszystkich wymaganych modyfikacji ramdysku (opcjonalnie umieść także pliki bannerów i / lub wersji w katalogu głównym, aby wyświetlały się one podczas flashowania)
  5. `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * symbol zastępczy`

Inną dostępną metodą jest rozpakowanie boot.img z tej samej pamięci ROM (np. CM, TouchWiz, EMUI itp.) I tej samej wersji Androida. Następnie zamieniłbyś Zimage. Ponownie jest to bardzo skomplikowany proces i powinieneś przeczytać dokładny samouczek, ale podsumowanie kroków jest następujące:

  1. Rozsunąć suwak.
  2. Użyj wiersza polecenia „rozpakuj” lub po prostu przeciągnij i upuść obraz. Spowoduje to podzielenie obrazu i rozpakowanie ramdysku do podkatalogu.
  3. Zmień ramdysk, jak chcesz.
  4. Skrypt wsadowy repackimg nie wymaga danych wejściowych i po prostu rekombinuje poprzednio podzielony zImage z nowo spakowanym zmodyfikowanym ramdyskiem przy użyciu wszystkich oryginalnych informacji o obrazie (który również został podzielony i zapisany).
  5. Skrypt wsadowy czyszczenia resetuje folder do stanu początkowego, usuwając katalogi split_img + ramdisk i wszelkie nowe spakowane pliki ramdysku lub obrazu.

Przed flashowaniem jądra należy utworzyć kopię zapasową podstawowego boot.img, a następnie flashować jądro, aby sprawdzić, czy pozwala na uruchomienie systemu Android.

Dodawanie funkcji do jądra

Dodanie funkcji do jądra to świetny sposób na urozmaicenie go. Jest wiele rzeczy, które możesz ulepszyć, takie jak sterowniki procesora, harmonogramy IO, podkręcanie procesora graficznego, ulepszenia audio itp.

Przykład dodania gubernatora znajduje się tutaj (ten gubernator ma kryptonim Intellimm).

Widzimy w pierwszych 2 polach tekstowych, że w „arch / arm / configs /” „msm8974_sec_defconfig” i „cm_msm8974_sec_defconfig” zostały zmodyfikowane.

Między wierszami 140 i 141 tego pliku dodano ten tekst: „CONFIG_CPU_FREQ_GOV_INTELLIMM = y”

(Ta linia służy do włączania Intellimm podczas kompilacji jądra)

Ta sama technika dotyczy innych pól tekstowych (co zostało dodane i usunięte oraz jego lokalizacja)

W zależności od dodanych funkcji można zmodyfikować, dodać lub usunąć więcej lub mniej plików.

Podsumowując, Commit pozwala zobaczyć wszystkie wprowadzone zmiany i wszystko inne!

Ogólne porady i wskazówki

Jak zmienić nazwę i wersję jądra:

Prosta metoda:

Edytuj ten wiersz w pliku defconfig:

 „CONFIG_LOCALVERSION =” - ”po - w defconfig 

Przykład: CONFIG_LOCALVERSION = ”- XenomTW-3.2.6 ″

Zaawansowane metody:

Przejdź do pliku Makefile w folderze głównym źródła jądra.

Dodaj te linie:

 CONFIG_LOCALVERSION = „nazwa twojego jądra” LOCALVERSION = „wersja twojego jądra” 

NIE modyfikuj wierszy Version, PatchLevel, Sublevel lub Extraversion.

Alternatywna metoda:

Przejdź do skryptów / mkcompile_h i dodaj następujące linie:

 LINUX_COMPILE_BY = „nazwa twojego zamówienia” LINUX_COMPILE_HOST = „nazwa twojego zamówienia” 

Rozwiązywanie problemów z PATH:

Jeśli napotkasz błąd „Czy Twoja ścieżka jest poprawna?”, Wypróbuj to w terminalu Linux:

 „export PATH =” pathtotoolchainlocation ”/ bin: $ PATH” 

Dostęp do folderów Ubuntu z systemu Windows 10

Twoja ścieżka do Ubuntu powinna zazwyczaj być:

C: \ NAZWA UŻYTKOWNIKA \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home

Nie należy jednak edytować plików bezpośrednio z systemu Windows, ponieważ zwykle spowoduje to złamanie uprawnień do nich - konieczne będzie zresetowanie uprawnień z poziomu terminala Linux.

Ciekawe Artykuły