Как собрать MediaTek Android Kernal из исходного кода —

Многим пользователям Android нравится устанавливать настраиваемые ядра, которые могут предлагать ряд настроек и улучшать время автономной работы. Но если вы не можете найти ядро, которое вам нравится, или нет доступного для вашего устройства, иногда вам просто нужно создать собственное. Это руководство будет посвящено тому, как собрать ядро ​​из исходного кода для устройств Mediatek.

Пожалуйста, обратите внимание, что это руководство не для новичков, оно предназначено для людей, которые разбираются в настройке ПЗУ для Android, работают в терминалах Linux и в целом немного знают о том, что мы делаем.

Требования:

  1. Операционная система Linux
  2. Некоторые базовые знания C и как работать с Makefiles
  3. Android NDK

Для начала вам нужно скачать следующие пакеты для Linux:

  • питон
  • GNU Make
  • JDK
  • Гит

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 г ++ — многобиблиотечный mingw32 tofrodos питон-уценки libxml2-Utils xsltproc zlib1g-разработчика: i386 ГИТ-ядро lzop CCache GnuPG гибкого бизонов Gperf построить заменимых почтовый локон zlib1g-DEV zlib1g-Dev: i386 libc6-DEV lib32ncurses5 lib32z1 lib32bz2-1.0 lib32ncurses5-DEV 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-общая библиотека 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 библиотеки libsdl1.2-dev libshdx2 Python 8-dev gcc g ++ cpp gcc-4.8 g ++ — 4.8 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Теперь перейдите в etc / udev / rules.d / 51-android.rules:

# adb протокол о страсти (Nexus One)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e12 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot протокол на страсти (Nexus One)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0bb4 ″, ATTR {idProduct} ==” 0fff ”, MODE =” 0600 ″, OWNER = ””
# adb протокол на crespo / crespo4g (Nexus S)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e22 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot протокол на crespo / crespo4g (Nexus S)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e20 ″, MODE = ”0600 ″, OWNER =” ”
# adb протокол на скате / wingray (Xoom)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”22b8 ″, ATTR {idProduct} ==” 70a9 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot протокол на скате / wingray (Xoom)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 708c ”, MODE =” 0600 ″, OWNER = ””
# adb протокол на maguro / toro (Galaxy Nexus)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”04e8 ″, ATTR {idProduct} ==” 6860 ″, MODE = ”0600 ″, OWNER =” ”
# протокол fastboot на maguro / toro (Galaxy Nexus)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e30 ″, MODE = ”0600 ″, OWNER =” ”
# adb протокол по панде (PandaBoard)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d101 ″, MODE = ”0600 ″, OWNER =” ”
# adb протокол на panda (PandaBoard ES)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” d002 ″, MODE = ”0600 ″, OWNER =” ”
# fastboot протокол на панде (PandaBoard)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d022 ″, MODE = ”0600 ″, OWNER =” ”
# протокол usbboot для panda (PandaBoard)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d00f ”, MODE =” 0600 ″, OWNER = ””
# протокол usbboot для panda (PandaBoard ES)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d010 ″, MODE = ”0600 ″, OWNER =” ”
# adb протокол по группировке / тилапии (Nexus 7)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e42 ″, MODE = ”0600 ″, OWNER =” ”
# протокол fastboot на групере / тилапии (Nexus 7)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e40 ″, MODE = ”0600 ″, OWNER =” ”
# adb протокол на манте (Nexus 10)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4ee2 ″, MODE = ”0600 ″, OWNER =” ”
# протокол fastboot на manta (Nexus 10)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4ee0 ″, MODE = ”0600 ″, OWNER =” ”

И в bash.rc:

экспорт USE_CCACHE = 1
Теперь наконец:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Итак, теперь мы готовы настроить среду сборки. В терминале введите:

export TARGET_BUILD_VARIANT = пользователь TARGET_PRODUCT = имя устройства MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
Вот что собираются делать эти команды:

BUILD_VARIANT: указывает, для чего будет собираться ядро.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: сообщает Linux, какие конкретные файлы устройства использовать.
MTK_ROOT_CUSTOM: указывает каталог папки mediatek / custom. помните, что этот mide находится в том же каталоге, что и исходный код ядра.
PATH: устанавливает исполняемые файлы вашей цепочки инструментов на ваш путь.
CROSS_COMPILE: кросс-компилятор — это компилятор, способный создавать исполняемый код для платформы, отличной от той, на которой работает компилятор. Набор инструментов облегчает эту функцию
ARCH = arm, ARM — это семейство архитектур наборов команд для компьютерных процессоров, основанных на архитектуре сокращенных наборов команд (RISC), разработанной британской компанией ARM Holdings. ARM также используется в Android.

Поэтому, когда мы набираем «export ARCH = arm» в терминале, мы в основном говорим Linux, что строим для архитектуры ARM.

Итак, теперь мы готовы начать настройку ядра. Вы должны быть предельно осторожны, потому что ядро ​​в основном является контроллером для вашего телефона. Так что просто следуйте внимательно.

 


Скорее всего, вы найдете базовый конфигурационный файл в kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
Мы можем использовать эту базовую конфигурацию и создавать ее с другими требованиями, например, разрешения SELinux включены или отключены. Вы всегда можете просто создать базовую конфигурацию с нуля, но я действительно не рекомендую ее.

Итак, теперь давайте введем в терминал Linux:

cd kernel_source
cp mediatek / config / devicename / autoconfig / kconfig / platform .config
сделать menuconfig

Это создаст графический интерфейс, который позволит вам добавлять функции в ядро. Например, вы можете настроить расписание ввода-вывода, регуляторы процессора, частоту графического процессора и т. Д.
После того, как вы настроили нужные параметры, вы готовы скомпилировать ядро. Поэтому введите в терминал Linux:
сделать zImage

И это должно вернуть что-то вроде:

арка / рука / ботинок / zImage Ready

Ссылка на основную публикацию