So erstellen Sie MediaTek Android Kernal aus dem Quellcode



Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen

Viele Android-Benutzer installieren gerne angepasste Kernel, die eine Reihe von Verbesserungen bieten, die die Leistung und die Akkulaufzeit verbessern. Wenn Sie jedoch keinen Kernel finden, den Sie mögen, oder keinen für Ihr Gerät verfügbar sind, müssen Sie manchmal nur Ihren eigenen erstellen. Dieses Handbuch konzentriert sich darauf, wie Sie einen Kernel aus dem Quellcode für Mediatek-Geräte erstellen.



Bitte beachten Sie, dass dieses Handbuch nicht für Neulinge gedacht ist. Es richtet sich an Personen, die sich mit dem Anpassen von Android-ROMs, der Arbeit in Linux-Terminals und dem allgemeinen Wissen über unsere Aktivitäten auskennen.



Bedarf:

  1. Ein Linux-Betriebssystem
  2. Einige grundlegende C-Kenntnisse und die Arbeit mit Makefiles
  3. Android NDK

Zunächst müssen Sie die folgenden Pakete für Linux herunterladen:



  • Python
  • GNU machen
  • JDK
  • Gehen

sudo apt-get install git gnupg flex bison gperf build-essentielle 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 lib32n x11proto-core-dev libx11-dev: i386 libreadline6-dev: i386 lib32z-dev libgl1-mesa-glx: i386 libgl1-mesa-dev g ++ - Multilib mingw32 -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 libesdt. 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

Gehen Sie nun zu etc / udev / rules.d / 51-android.rules:

# adb Protokoll über Leidenschaft (Nexus One)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '4e12', MODE = '0600', OWNER = ''
# Fastboot-Protokoll aus Leidenschaft (Nexus One)
SUBSYSTEM == 'usb', ATTR {idVendor} == '0bb4', ATTR {idProduct} == '0fff', MODE = '0600', OWNER = ''
# adb Protokoll auf crespo / crespo4g (Nexus S)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '4e22', MODE = '0600', OWNER = ''
# Fastboot-Protokoll auf crespo / crespo4g (Nexus S)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '4e20', MODE = '0600', OWNER = ''
# adb Protokoll auf Stingray / Wingray (Xoom)
SUBSYSTEM == 'usb', ATTR {idVendor} == '22b8', ATTR {idProduct} == '70a9', MODE = '0600', OWNER = ''
# Fastboot-Protokoll auf Stingray / Wingray (Xoom)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '708c', MODE = '0600', OWNER = ''
# ADB-Protokoll auf Maguro / Toro (Galaxy Nexus)
SUBSYSTEM == 'usb', ATTR {idVendor} == '04e8', ATTR {idProduct} == '6860', MODE = '0600', OWNER = ''
# Fastboot-Protokoll auf Maguro / Toro (Galaxy Nexus)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '4e30', MODE = '0600', OWNER = ''
# adb Protokoll auf Panda (PandaBoard)
SUBSYSTEM == 'usb', ATTR {idVendor} == '0451', ATTR {idProduct} == 'd101', MODE = '0600', OWNER = ''
# ADB-Protokoll auf Panda (PandaBoard ES)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == 'd002', MODE = '0600', OWNER = ''
# Fastboot-Protokoll auf Panda (PandaBoard)
SUBSYSTEM == 'usb', ATTR {idVendor} == '0451', ATTR {idProduct} == 'd022', MODE = '0600', OWNER = ''
# usbboot Protokoll auf Panda (PandaBoard)
SUBSYSTEM == 'usb', ATTR {idVendor} == '0451', ATTR {idProduct} == 'd00f', MODE = '0600', OWNER = ''
# usbboot Protokoll auf Panda (PandaBoard ES)
SUBSYSTEM == 'usb', ATTR {idVendor} == '0451', ATTR {idProduct} == 'd010', MODE = '0600', OWNER = ''
# adb Protokoll auf Grouper / Tilapia (Nexus 7)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '4e42', MODE = '0600', OWNER = ''
# Fastboot-Protokoll auf Grouper / Tilapia (Nexus 7)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '4e40', MODE = '0600', OWNER = ''
# adb Protokoll auf Manta (Nexus 10)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '4ee2', MODE = '0600', OWNER = ''
# Fastboot-Protokoll auf Manta (Nexus 10)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1', ATTR {idProduct} == '4ee0', MODE = '0600', OWNER = ''



Und in bash.rc:

export USE_CCACHE = 1
Jetzt endlich:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Jetzt können wir die Build-Umgebung einrichten. Geben Sie im Terminal Folgendes ein:

export TARGET_BUILD_VARIANT = Benutzer TARGET_PRODUCT = Gerätename MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
Mit diesen Befehlen werden folgende Aufgaben ausgeführt:

BUILD_VARIANT: Gibt an, wofür der Kernel erstellt werden soll.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: teilt Linux mit, welche gerätespezifischen Dateien verwendet werden sollen.
MTK_ROOT_CUSTOM: Gibt das Verzeichnis des Ordners mediatek / custom an. Denken Sie daran, dass sich diese Seite ebenfalls im selben Verzeichnis wie die Kernelquelle befindet.
PFAD: Setzt die ausführbaren Dateien Ihrer Toolchain auf Ihren Pfad.
CROSS_COMPILE: Ein Cross-Compiler ist ein Compiler, der ausführbaren Code für eine andere Plattform als die Plattform erstellen kann, auf der der Compiler ausgeführt wird. Die Toolchain erleichtert diese Funktion
ARCH = arm, ARM ist eine Familie von Befehlssatzarchitekturen für Computerprozessoren, die auf einer von der britischen Firma ARM Holdings entwickelten RISC-Architektur (Reduced Instruction Set Computing) basieren. ARM wird auch in Android verwendet.

Wenn wir also 'export ARCH = arm' in das Terminal eingeben, teilen wir Linux im Grunde mit, dass wir für die ARM-Architektur erstellen.

Jetzt können wir mit der Konfiguration des Kernels beginnen. Sie müssen äußerst vorsichtig sein, da der Kernel im Grunde der Controller für Ihr Telefon ist. Also folge einfach genau.


Sie finden die Basiskonfiguration höchstwahrscheinlich in der Datei kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
Wir können diese Basiskonfiguration verwenden und sie mit unterschiedlichen Anforderungen erstellen, z. B. aktivierte oder deaktivierte SELinux-Berechtigungen. Sie können jederzeit eine Basiskonfiguration von Grund auf neu erstellen, aber ich empfehle sie wirklich nicht.

Geben wir nun das Linux-Terminal ein:

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

Dadurch wird eine grafische Oberfläche erstellt, mit der Sie dem Kernel Funktionen hinzufügen können. Sie können beispielsweise den E / A-Zeitplan, die CPU-Regler, die GPU-Frequenz usw. anpassen.
Sobald Sie die gewünschten Einstellungen vorgenommen haben, können Sie den Kernel kompilieren. Geben Sie also in das Linux-Terminal ein:
mach zImage

Und es sollte so etwas wie Folgendes zurückgeben:

arch / arm / boot / zBild bereit

3 Minuten gelesen