Kaip sukurti „MediaTek Android Kernal“ iš šaltinio



Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas

Daugeliui „Android“ vartotojų patinka diegti pritaikytus branduolius, kurie gali pasiūlyti daugybę našumo ir akumuliatoriaus naudojimo trukmės patobulinimų. Bet jei nerandate patinkančio branduolio arba jo nėra jūsų įrenginyje, kartais tiesiog turite sukurti savo. Šis vadovas bus sutelktas į tai, kaip sukurti branduolį iš „Mediatek“ įrenginių šaltinio.



Įspėjame, kad šis vadovas nėra skirtas naujokams, jis skirtas žmonėms, turintiems supratimą apie „Android ROM“ pritaikymą, dirbantiems „Linux“ terminaluose ir turintiems šiek tiek darbo žinių apie tai, ką darome.



Reikalavimai:

  1. „Linux“ operacinė sistema
  2. Kai kurios pagrindinės C žinios ir kaip dirbti su „Makefiles“
  3. „Android NDK“

Norėdami pradėti, turėsite atsisiųsti šiuos „Linux“ paketus:



  • „Python“
  • GNU gamintojas
  • JDK
  • Eik

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 bizonas gperf build-essential zip curl 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 libreadline -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 lib libwddk-dev libashws 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

Dabar eikite į etc / udev / rules.d / 51-android.rules:

# adb aistros protokolas („Nexus One“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e12 ″, MODE = ”0600 ″, SAVININKAS =” ”
# aistros greito įkrovimo protokolas („Nexus One“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”0bb4 ″, ATTR {idProduct} ==” 0fff ”, MODE =” 0600 ″, SAVININKAS = ””
# adb protokolas „crespo“ / „crespo4g“ („Nexus S“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e22 ″, MODE = ”0600 ″, SAVININKAS =” ”
# „fastboot“ protokolas „crespo“ / „crespo4g“ („Nexus S“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e20 ″, MODE = ”0600 ″, SAVININKAS =” ”
# adb protokolas dėl stingray / wingray („Xoom“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”22b8 ″, ATTR {idProduct} ==” 70a9 ″, MODE = ”0600 ″, SAVININKAS =” ”
# „fastboot“ protokolas dėl „stingray“ / „wingray“ („Xoom“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 708c ”, MODE =” 0600 ″, SAVININKAS = ””
# adb protokolas ant „maguro“ / „toro“ („Galaxy Nexus“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”04e8 ″, ATTR {idProduct} ==” 6860 ″, MODE = ”0600 ″, SAVININKAS =” ”
# greito įkrovimo protokolas ant „maguro“ / „toro“ („Galaxy Nexus“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e30 ″, MODE = ”0600 ″, SAVININKAS =” ”
# adb protokolas ant pandos („PandaBoard“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d101 ″, MODE = ”0600 ″, SAVININKAS =” ”
# adb protokolas ant pandos („PandaBoard ES“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” d002 ″, MODE = ”0600 ″, SAVININKAS =” ”
# „fastboot“ protokolas ant pandos („PandaBoard“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d022 ″, MODE = ”0600 ″, SAVININKAS =” ”
# „usbboot“ protokolas ant pandos („PandaBoard“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d00f ”, MODE =” 0600 ″, SAVININKAS = ””
# „usbboot“ protokolas ant pandos („PandaBoard ES“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”0451 ″, ATTR {idProduct} ==” d010 ″, MODE = ”0600 ″, SAVININKAS =” ”
# adb protokolas ant grupuotojo / tilapijos („Nexus 7“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e42 ″, MODE = ”0600 ″, SAVININKAS =” ”
# greito paleidimo protokolas ant grupuotojo / tilapijos („Nexus 7“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4e40 ″, MODE = ”0600 ″, SAVININKAS =” ”
# adb protokolas mantoje („Nexus 10“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4ee2 ″, MODE = ”0600 ″, SAVININKAS =” ”
# greito įkrovimo protokolas „Manta“ („Nexus 10“)
POSISTEMIS == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” 4ee0 ″, MODE = ”0600 ″, SAVININKAS =” ”



Ir „bash.rc“:

eksportuoti USE_CCACHE = 1
Dabar pagaliau:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Taigi dabar mes esame pasirengę sukurti kūrimo aplinką. Terminale įveskite:

eksportuoti TARGET_BUILD_VARIANT = vartotojas TARGET_PRODUCT = devicename MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
Štai ką darys šios komandos:

BUILD_VARIANT: nurodo, kam bus sukurtas branduolys.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: nurodo „Linux“, kuriuos įrenginio failus naudoti.
MTK_ROOT_CUSTOM: nurodo „mediatek“ / „custom“ aplanko katalogą. nepamirškite, kad šis failas taip pat yra tame pačiame kataloge kaip ir branduolio šaltinis.
PATH: nustato jūsų įrankių grandinės vykdomuosius savo kelyje.
CROSS_COMPILE: kryžminis kompiliatorius yra kompiliatorius, galintis sukurti vykdomąjį kodą kitai platformai nei ta, kurioje veikia kompiliatorius. Įrankių grandinė palengvina šią funkciją
ARCH = arm, ARM yra kompiuterių procesorių komandų rinkinių architektūrų šeima, pagrįsta sumažintos instrukcijų rinkinio skaičiavimo (RISC) architektūra, kurią sukūrė Didžiosios Britanijos bendrovė ARM Holdings. ARM taip pat naudojamas „Android“.

Taigi įvesdami į terminalą „eksportuoti ARCH = arm“, iš esmės „Linux“ sakome, kad kuriame ARM architektūrą.

Taigi dabar mes esame pasirengę pradėti konfigūruoti branduolį. Turite būti labai atsargūs, nes branduolys iš esmės yra jūsų telefono valdiklis. Taigi tiesiog atidžiai sekite.


Bazinę konfigūraciją greičiausiai rasite kernel_source / mediatek / config / devicename / autoconfig / kconfig / platformoje.
Mes galime naudoti šią bazinę konfigūraciją ir sukurti ją taikydami skirtingus reikalavimus, pavyzdžiui, įgalinę arba išjungę SELinux teises. Jūs visada galėtumėte tiesiog sukurti pagrindinę konfigūraciją nuo nulio, bet aš tikrai nerekomenduoju.

Taigi dabar įveskite „Linux“ terminalą:

CD branduolio_šaltinis
cp mediatek / config / devicename / autoconfig / kconfig / platform .config
padaryti menukonfig

Tai sukurs grafinę sąsają, kuri leis jums pridėti funkcijas prie branduolio. Pvz., Galite pakoreguoti įvesties / išvesties tvarkaraštį, procesoriaus valdiklius, GPU dažnį ir kt.
Patobulinę norimus nustatymus, būsite pasirengę kompiliuoti branduolį. Taigi įveskite „Linux“ terminalą:
padaryti zImage

Ir tai turėtų grąžinti kažką panašaus:

arch / arm / boot / zPaveikslėlis paruoštas

3 minutes perskaityta