Как собрать ядро ​​MediaTek для Android из исходного кода



Попробуйте наш инструмент устранения неполадок

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



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



Требования:

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

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



  • Python
  • 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 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-devb32n libc6-devb32n libc6-devb32n libc6-devb32n libc6-devb32n libc5-devb32n libc6-devb32n libc5-devb32n libc5-devb32n libc6-devb32n libc5-devb32n libc6-devb32n libc6-devb32n libc6-devb32n libc5-devb32n libc5-devb32n libc5-devb32n libc6-devb32n libc5-devb32n libc5-devb32n libc3 libc6-devb322 x11proto-core-dev libx11-dev: i386 libreadline6-dev: i386 lib32z-dev libgl1-mesa-glx: i386 libgl1-mesa-dev g ++ - Mullyib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libreadline6-devread libline6-devread libline -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 libashdwg tools-dev libsdl1.2-dev libesfushr tools. 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

Теперь перейдите в 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 на stingray / wingray (Xoom)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”22b8 ″, ATTR {idProduct} ==” 70a9 ″, MODE = ”0600 ″, OWNER =” ”
# протокол fastboot на stingray / 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 на панде (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 на панде (PandaBoard)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d00f ”, MODE =” 0600 ″, OWNER = ””
# протокол usbboot на панде (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 на manta (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
Итак, теперь мы готовы настроить среду сборки. В терминале введите:

экспорт 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. помните, что это средство находится в том же каталоге, что и исходный код ядра.
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 / платформа .config
сделать menuconfig

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

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

арка / рука / boot / zImage Готов

3 минуты на чтение