Hoe MediaTek Android Kernal te bouwen vanuit de bron



Probeer Ons Instrument Voor Het Oplossen Van Problemen

Veel Android-gebruikers vinden het leuk om aangepaste kernels te installeren, die een reeks prestatieverhogende en batterijlevensduur kunnen bieden. Maar als u een kernel die u bevalt niet kunt vinden, of als er geen beschikbaar is voor uw apparaat, moet u soms gewoon uw eigen kernel bouwen. Deze gids zal zich concentreren op het bouwen van een kernel vanaf de bron voor Mediatek-apparaten.



Wees gewaarschuwd dat deze handleiding niet voor nieuwkomers is, maar bedoeld voor mensen die verstand hebben van het aanpassen van Android ROM's, werken in Linux-terminals en over het algemeen een beetje praktische kennis over wat we doen.



Vereisten:

  1. Een Linux-besturingssysteem
  2. Een beetje basiskennis van C en hoe te werken met Makefiles
  3. Android NDK

Om te beginnen moet je de volgende pakketten voor Linux downloaden:



  • Python
  • GNU Make
  • JDK
  • Gaan

sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev: i386 x11proto-core-dev libx11-dev: i386 libreadline6-dev: i386 libgl1-mesa-glx: i386 libgl1-mesa-dev g ++ - multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev: i386 git-core lzop ccache gnupg flex bison gperf build-essential zip curl zlib1g-dev zlib1g-dev: i386 libcurs1-dev lib32 lib32 dev: i386 libcurs1-dev lib32 x11proto-core-dev libx11-dev: i386 libreadline6-dev: i386 lib32z-dev libgl1-mesa-glx: i386 libgl1-mesa-dev g ++ - multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libread6 libread6 libread6 libread6 libread6 libread6 -gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev: i386 libreadline6: i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev-dev-tools libsdibcrs libghc-bzlib-dev lib32bz2-dev-dev tools libsdibcrs1.2-dev-dev-tools libsdibcrs1. 8-dev python gcc g ++ cpp gcc-4.8 g ++ - 4.8 && sudo ln -s / usr / lib / i386-linux-gnu / mesa / li bGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Ga nu naar etc / udev / rules.d / 51-android.rules:

# adb-protocol over passie (Nexus One)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e12 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot-protocol op passie (Nexus One)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”0bb4 ″, ATTR {idProduct} ==” 0fff ”, MODE =” 0600 ″, OWNER = ””
# adb-protocol op crespo / crespo4g (Nexus S)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e22 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot-protocol op crespo / crespo4g (Nexus S)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e20 ″, MODE = ”0600 ″, OWNER =” ”
# adb-protocol op pijlstaartrog / wingray (Xoom)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”22b8 ″, ATTR {idProduct} ==” 70a9 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot-protocol op stingray / wingray (Xoom)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 708c ”, MODE =” 0600 ″, OWNER = ””
# adb-protocol op maguro / toro (Galaxy Nexus)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”04e8 ″, ATTR {idProduct} ==” 6860 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot-protocol op maguro / toro (Galaxy Nexus)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e30 ″, MODE = ”0600 ″, OWNER =” ”
# adb-protocol op panda (PandaBoard)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d101 ″, MODE = ”0600 ″, OWNER =” ”
# adb-protocol op panda (PandaBoard ES)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” d002 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot-protocol op panda (PandaBoard)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d022 ″, MODE = ”0600 ″, OWNER =” ”
# usbboot-protocol op panda (PandaBoard)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d00f ”, MODE =” 0600 ″, OWNER = ””
# usbboot-protocol op panda (PandaBoard ES)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d010 ″, MODE = ”0600 ″, OWNER =” ”
# adb-protocol op tandbaars / tilapia (Nexus 7)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e42 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot-protocol op tandbaars / tilapia (Nexus 7)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e40 ″, MODE = ”0600 ″, OWNER =” ”
# adb-protocol op manta (Nexus 10)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4ee2 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot-protocol op manta (Nexus 10)
SUBSYSTEEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4ee0 ″, MODE = ”0600 ″, OWNER =” ”



En in bash.rc:

export USE_CCACHE = 1
Nu eindelijk:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Dus nu zijn we klaar om de buildomgeving op te zetten. Typ in de terminal:

export TARGET_BUILD_VARIANT = gebruiker TARGET_PRODUCT = apparaatnaam MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
Dit is wat deze opdrachten gaan doen:

BUILD_VARIANT: specificeert waarvoor de kernel zal worden gebouwd.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: vertelt Linux welke apparaatspecifieke bestanden moeten worden gebruikt.
MTK_ROOT_CUSTOM: specificeert de map van de mediatek / custom map. onthoud dat dit mide zich ook in dezelfde map bevindt als de kernelsource.
PATH: stelt de uitvoerbare bestanden van uw toolchain in op uw pad.
CROSS_COMPILE: Een cross-compiler is een compiler die uitvoerbare code kan maken voor een ander platform dan het platform waarop de compiler draait. De toolchain faciliteert deze functie
ARCH = arm, ARM is een familie van instructiesetarchitecturen voor computerprocessors gebaseerd op een gereduceerde instructie set computing (RISC) architectuur ontwikkeld door het Britse bedrijf ARM Holdings. ARM wordt ook gebruikt in Android.

Dus als we ‘export ARCH = arm’ in de terminal typen, vertellen we Linux in feite dat we bouwen voor de ARM-architectuur.

Dus nu zijn we klaar om te beginnen met het configureren van de kernel. Je moet uiterst voorzichtig zijn, want de kernel is in feite de controller voor je telefoon. Volg dus gewoon zorgvuldig.


Waarschijnlijk vind je de basisconfiguratie in de kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
We kunnen deze basisconfiguratie gebruiken en het bouwen met verschillende vereisten, bijvoorbeeld SELinux-machtigingen ingeschakeld of uitgeschakeld. Je kunt altijd een basisconfiguratie helemaal opnieuw bouwen, maar ik raad het echt niet aan.

Dus laten we nu in de Linux-terminal typen:

cd kernel_source
cp mediatek / config / devicename / autoconfig / kconfig / platform .config
maak menuconfig

Dit gaat een grafische interface creëren waarmee je features aan de kernel kunt toevoegen. U kunt bijvoorbeeld het I / O-schema, de CPU-gouverneurs, de GPU-frequentie, enz. Aanpassen.
Als je eenmaal de gewenste instellingen hebt aangepast, ben je klaar om de kernel te compileren. Dus typ in de Linux-terminal:
maak zImage

En het zou iets moeten teruggeven als:

arch / arm / boot / zImage Ready

3 minuten gelezen