Com construir MediaTek Android Kernal des de Source



Proveu El Nostre Instrument Per Eliminar Problemes

Molts usuaris d'Android gaudeixen d'instal·lar nuclis personalitzats, que poden oferir una gamma de canvis i millores de la durada de la bateria. Però si no podeu trobar un nucli que us agradi o no n’hi ha cap disponible per al vostre dispositiu, de vegades només heu de crear el vostre. Aquesta guia se centrarà en com construir un nucli des de la font per a dispositius Mediatek.



Tingueu en compte que aquesta guia no és per a principiants, està pensada per a persones amb coneixements de personalització de les ROM d'Android, que treballen en terminals Linux i, en general, tenen una mica de coneixement pràctic sobre el que estem fent.



Requisits:

  1. Un sistema operatiu Linux
  2. Alguns coneixements bàsics de C i com treballar amb Makefiles
  3. Android NDK

Per començar, haureu de descarregar els paquets següents per a Linux:



  • Python
  • GNU Make
  • JDK
  • Vaja

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 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 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

Ara aneu a etc / udev / rules.d / 51-android.rules:

Protocol # adb sobre passió (Nexus One)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e12 ″, MODE = ”0600 ″, OWNER =” ”
# protocol de fastboot a la passió (Nexus One)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0bb4 ″, ATTR {idProduct} ==” 0fff ”, MODE =” 0600 ″, OWNER = ””
Protocol # adb a crespo / crespo4g (Nexus S)
SUBSISTEMA == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e22 ″, MODE = ”0600 ″, OWNER =” ”
# protocol fastboot a crespo / crespo4g (Nexus S)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e20 ″, MODE = ”0600 ″, OWNER =” ”
Protocol # adb a stingray / wingray (Xoom)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”22b8 ″, ATTR {idProduct} ==” 70a9 ″, MODE = ”0600 ″, OWNER =” ”
# protocol fastboot a stingray / wingray (Xoom)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 708c ”, MODE =” 0600 ″, OWNER = ””
Protocol # adb sobre maguro / toro (Galaxy Nexus)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”04e8 ″, ATTR {idProduct} ==” 6860 ″, MODE = ”0600 ″, OWNER =” ”
# protocol d'arrencada ràpida sobre maguro / toro (Galaxy Nexus)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e30 ″, MODE = ”0600 ″, OWNER =” ”
Protocol # adb a panda (PandaBoard)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d101 ″, MODE = ”0600 ″, OWNER =” ”
# Adb protocol on colla (PandaBoard ES)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” d002 ″, MODE = ”0600 ″, OWNER =” ”
# protocol de fastboot a panda (PandaBoard)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d022 ″, MODE = ”0600 ″, OWNER =” ”
protocol # usbboot al panda (PandaBoard)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d00f ”, MODE =” 0600 ″, OWNER = ””
# Usbboot protocol on colla (PandaBoard ES)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d010 ″, MODE = ”0600 ″, OWNER =” ”
Protocol # adb a l'agrupador / tilapia (Nexus 7)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e42 ″, MODE = ”0600 ″, OWNER =” ”
# protocol d'arrencada ràpida a l'agrupador / tilapia (Nexus 7)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e40 ″, MODE = ”0600 ″, OWNER =” ”
Protocol # adb a manta (Nexus 10)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4ee2 ″, MODE = ”0600 ″, OWNER =” ”
# protocol fastboot a manta (Nexus 10)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4ee0 ″, MODE = ”0600 ″, OWNER =” ”



I a bash.rc:

exportació USE_CCACHE = 1
Ara per fi:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Per tant, ara estem preparats per configurar l’entorn de construcció. Al terminal, escriviu:

export TARGET_BUILD_VARIANT = usuari TARGET_PRODUCT = nom de dispositiu MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
A continuació, expliquem què faran aquestes ordres:

BUILD_VARIANT: especifica per a què es construirà el nucli.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: indica a Linux quins fitxers específics del dispositiu utilitzar.
MTK_ROOT_CUSTOM: especifica el directori de la carpeta mediatek / personalitzada. recordeu que aquest mig també es troba al mateix directori que la font del nucli.
PATH: estableix els executables de la cadena d’eines al vostre camí.
CROSS_COMPILE: un compilador creuat és un compilador capaç de crear codi executable per a una plataforma diferent de la que s’executa el compilador. La cadena d’eines facilita aquesta funció
ARCH = arm, ARM és una família d'arquitectures de conjunts d'instruccions per a processadors d'ordinadors basades en una arquitectura de computació de conjunts d'instruccions reduïda (RISC) desenvolupada per la companyia britànica ARM Holdings. ARM també s’utilitza a Android.

Per tant, quan escrivim ‘export ARCH = arm’ al terminal, bàsicament li diem a Linux que estem construint per a l’arquitectura ARM.

Per tant, ara estem preparats per començar a configurar el nucli. Cal tenir molta cura, perquè el nucli és bàsicament el controlador del vostre telèfon. Així doncs, seguiu acuradament.


Probablement trobareu la configuració base a kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
Podem utilitzar aquesta configuració base i construir-la amb diferents requisits, per exemple, els permisos SELinux activats o desactivats. Sempre podeu crear una configuració base des de zero, però realment no la recomano.

Per tant, ara escrivim al terminal Linux:

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

Això crearà una interfície gràfica que us permetrà afegir funcions al nucli. Per exemple, podeu modificar la programació d'E / S, els governadors de la CPU, la freqüència de la GPU, etc.
Quan hàgiu modificat la configuració desitjada, ja podreu compilar el nucli. Per tant, escriviu al terminal Linux:
fer zImage

I hauria de tornar alguna cosa així:

arch / arm / boot / zImage Ready

3 minuts de lectura