Cum se construiește MediaTek Android Kernal din sursă



Încercați Instrumentul Nostru Pentru Eliminarea Problemelor

Mulți utilizatori de Android se bucură de instalarea nucleelor ​​personalizate, care pot oferi o serie de modificări de performanță și de durată a bateriei. Dar dacă nu găsiți un nucleu care vă place sau niciunul nu este disponibil pentru dispozitivul dvs., uneori trebuie doar să vă construiți propriul. Acest ghid se va concentra asupra modului de a construi un nucleu din sursă pentru dispozitivele Mediatek.



Vă rugăm să fiți avertizat că acest ghid nu este destinat începătorilor, este destinat persoanelor care înțeleg personalizarea ROM-urilor Android, care lucrează în terminale Linux și, în general, un pic de cunoștințe practice despre ceea ce facem.



Cerințe:

  1. Un sistem de operare Linux
  2. Câteva cunoștințe de bază despre C și cum să lucrați cu Makefiles
  3. Android NDK

Pentru început, va trebui să descărcați următoarele pachete pentru Linux:



  • Piton
  • GNU Make
  • JDK
  • Merge

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 libc6-dev lib32ncurses5 lib32z1 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 libreadline6-dev libreadline6 lib32 -gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev: i386 libreadline6: i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesd0-dev squxfs-libr squx 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

Acum accesați etc / udev / rules.d / 51-android.rules:

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



Și în bash.rc:

export USE_CCACHE = 1
Acum, în sfârșit:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Deci, acum suntem gata să configurăm mediul de construire. În terminal, tastați:

export TARGET_BUILD_VARIANT = utilizator TARGET_PRODUCT = nume de dispozitiv MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
Iată ce vor face aceste comenzi:

BUILD_VARIANT: specifică pentru ce kernel va fi construit.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: îi spune Linux ce fișiere specifice dispozitivului să utilizeze.
MTK_ROOT_CUSTOM: specifică directorul folderului mediatek / personalizat. amintiți-vă că această mide se află și în același director cu sursa kernelului.
PATH: setează executabilele lanțului de instrumente pe calea ta.
CROSS_COMPILE: Un compilator încrucișat este un compilator capabil să creeze cod executabil pentru o altă platformă decât cea pe care rulează compilatorul. Lanțul de instrumente facilitează această funcție
ARCH = arm, ARM este o familie de arhitecturi de seturi de instrucțiuni pentru procesoare de calculator bazate pe o arhitectură de calcul de set de instrucțiuni reduse (RISC) dezvoltată de compania britanică ARM Holdings. ARM este folosit și în Android.

Deci, atunci când tastăm „export ARCH = arm” în terminal, practic îi spunem Linux că construim pentru arhitectura ARM.

Așa că acum suntem gata să începem să configurăm nucleul. Trebuie să fii extrem de atent, deoarece nucleul este practic controlerul telefonului tău. Deci, urmează cu atenție.


Cel mai probabil veți găsi configul de bază în kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
Putem folosi această configurare de bază și o putem construi cu cerințe diferite, de exemplu permisiuni SELinux activate sau dezactivate. Puteți întotdeauna să construiți o configurare de bază de la zero, dar chiar nu o recomand.

Deci, acum să introducem terminalul Linux:

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

Aceasta va crea o interfață grafică care vă va permite să adăugați caracteristici la nucleu. De exemplu, puteți modifica programul I / O, guvernanții CPU, frecvența GPU etc.
După ce ați modificat setările dorite, sunteți gata să compilați nucleul. Deci, introduceți terminalul Linux:
face zImage

Și ar trebui să returneze ceva de genul:

arch / arm / boot / zImage Ready

3 minute citite