Paano Bumuo ng MediaTek Android Kernal mula sa Pinagmulan



Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema

Maraming mga gumagamit ng Android ang nasisiyahan sa pag-install ng mga naka-customize na kernel, na maaaring mag-alok ng isang saklaw ng pagganap at buhay ng baterya na nagpapahusay ng mga pag-aayos. Ngunit kung hindi ka makahanap ng isang kernel na gusto mo, o wala ay magagamit para sa iyong aparato, minsan kailangan mo lang bumuo ng iyong sarili. Magtutuon ang gabay na ito sa kung paano bumuo ng isang kernel mula sa mapagkukunan para sa mga Mediatek na aparato.



Mangyaring babalaan ang gabay na ito ay hindi para sa mga baguhan, inilaan ito para sa mga taong may pag-unawa sa pagpapasadya ng mga Android ROM, nagtatrabaho sa mga terminal ng Linux, at sa pangkalahatang kaunting kaalaman sa pagtatrabaho tungkol sa ginagawa namin.



Mga Kinakailangan:

  1. Isang operating system ng Linux
  2. Ang ilang pangunahing kaalaman sa C at kung paano magtrabaho kasama ang Mga Makefile
  3. Android NDK

Upang magsimula, kakailanganin mong i-download ang mga sumusunod na package para sa Linux:



  • Sawa
  • GNU Gumawa
  • JDK
  • Punta ka na

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 lib32bz lib32zz lib32zz lib32zz lib32z 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 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 lib32line6 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 squashfs -ol 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

Pumunta ngayon sa etc / udev / rules.d / 51-android.rules:

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



At sa bash.rc:

i-export ang USE_CCACHE = 1
Ngayon sa wakas:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Kaya't handa na kaming i-set up ang kapaligiran sa pagbuo. Sa terminal, uri:

i-export ang TARGET_BUILD_VARIANT = gumagamit TARGET_PRODUCT = devicename MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
Narito kung ano ang gagawin ng mga utos na ito:

BUILD_VARIANT: tumutukoy kung ano ang itatayo para sa kernel.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: Sinasabi sa Linux kung aling mga tukoy na file ang gagamitin.
MTK_ROOT_CUSTOM: tumutukoy sa direktoryo ng mediatek / pasadyang folder. tandaan ang mide na ito ay nasa parehong direktoryo ng mapagkukunan ng kernel din.
PATH: itinakda ang iyong mga executable ng toolchain sa iyong landas.
CROSS_COMPILE: Ang isang cross compiler ay isang tagatala na may kakayahang lumikha ng maipapatupad na code para sa isang platform maliban sa isa kung saan tumatakbo ang tagatala. Pinapadali ng toolchain ang pagpapaandar na ito
Ang ARCH = braso, ang ARM ay isang pamilya ng mga itinuro na arkitektura para sa mga processor ng computer batay sa isang nabawas na arkitektura ng computing (RISC) na arkitekturang binuo ng kumpanya ng British na ARM Holdings. Ginagamit din ang ARM sa Android.

Kaya't kapag nag-type kami ng 'export ARCH = arm' sa terminal, karaniwang sinasabi namin sa Linux na nagtatayo kami para sa arkitekturang ARM.

Kaya't handa na kaming simulang i-configure ang kernel. Kailangan mong maging napaka-ingat, dahil ang kernel ay karaniwang ang Controller para sa iyong telepono. Kaya't sundin lamang nang mabuti.


Malamang makikita mo ang base config sa kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
Maaari naming gamitin ang base config na ito at buuin ito ng iba't ibang mga kinakailangan, halimbawa ang mga pahintulot sa SELinux ay pinagana o hindi pinagana. Maaari mong palaging bumuo ng isang base config mula sa simula, ngunit hindi ko talaga ito inirerekumenda.

Kaya't mag-type tayo sa Linux terminal:

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

Lilikha ito ng isang graphic na interface na magbibigay-daan sa iyo upang magdagdag ng mga tampok sa kernel. Halimbawa, maaari mong sabunutan ang Iskedyul ng I / O, Mga Gobernador ng CPU, Frequency ng GPU, atbp.
Kapag na-tweak mo ang iyong nais na mga setting, handa ka nang mag-ipon ng kernel. Kaya mag-type sa terminal ng Linux:
gumawa ng zImage

At dapat itong ibalik ang isang bagay tulad ng:

arko / braso / boot / zImage Handa

Basahin ang 3 minuto