כיצד לבנות את MediaTek Android Kernal מהמקור



נסה את הכלי שלנו לביטול בעיות

משתמשי אנדרואיד רבים נהנים מהתקנת גרעינים מותאמים אישית, אשר יכולים להציע מגוון ביצועים ושיפור חיי הסוללה. אבל אם אתה לא מוצא גרעין שאתה אוהב, או שאף אחד לא זמין למכשיר שלך, לפעמים אתה פשוט צריך לבנות משלך. מדריך זה יתמקד כיצד לבנות גרעין ממקור למכשירי מדיאטק.



אנא שימו לב כי מדריך זה אינו מיועד למתחילים, הוא מיועד לאנשים עם הבנה של התאמה אישית של מכשירי ROM של Android, עבודה במסופי לינוקס, ובסך הכל מעט ידע בעבודה על מה שאנחנו עושים.



דרישות:

  1. מערכת הפעלה לינוקס
  2. כמה ידע בסיסי ב- C וכיצד לעבוד עם Makefiles
  3. אנדרואיד NDK

כדי להתחיל, תצטרך להוריד את החבילות הבאות עבור לינוקס:



  • פִּיתוֹן
  • 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-dev lib32nces5 libbzn32 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 libesd0-dev squashx. 8-dev פיתון 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 # על סטינגריי / כנף (Xoom)
SUBSYSTEM == 'usb', ATTR {idVendor} == '22b8 ″, ATTR {idProduct} ==' 70a9 ″, MODE = '0600 ″, OWNER =' '
# פרוטוקול fastboot על סטינגריי / כנף (Xoom)
SUBSYSTEM == 'usb', ATTR {idVendor} == '18d1 ″, ATTR {idProduct} ==' 708c ', MODE =' 0600 ″, OWNER = ''
פרוטוקול ADB אחד על מגורו / טורו (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 ב- grouper / tilapia (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: אומר לינוקס באילו קבצים ספציפיים להתקנים להשתמש.
MTK_ROOT_CUSTOM: מציין את הספרייה של תיקיית mediatek / custom. זכור שהמייד הזה יהיה באותה מדריך כמו גם מקור הליבה.
PATH: מגדיר את הפעלות שרשרת הכלים שלך לנתיב שלך.
CROSS_COMPILE: מהדר צולב הוא מהדר המסוגל ליצור קוד הפעלה עבור פלטפורמה אחרת מזו שעליה פועל המהדר. שרשרת הכלים מקלה על פונקציה זו
ARCH = arm, ARM היא משפחה של ארכיטקטורות מערכי הוראות למעבדי מחשב המבוססת על ארכיטקטורת מחשוב מערכי הוראות מופחתת (RISC) שפותחה על ידי חברת ARM Holdings הבריטית. ARM משמש גם באנדרואיד.

לכן כאשר אנו מקלידים 'יצוא ARCH = זרוע' למסוף, אנו בעצם אומרים לינוקס שאנחנו בונים לארכיטקטורה של ARM.

אז עכשיו אנחנו מוכנים להתחיל להגדיר את הגרעין. עליכם להיות זהירים ביותר מכיוון שהליבה היא בעצם הבקר של הטלפון שלכם. אז פשוט עקבו בזהירות.


סביר להניח שתמצא את תצורת הבסיס ב kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
אנו יכולים להשתמש בתצורת בסיס זו ולבנות אותה עם דרישות שונות, למשל הרשאות SELinux מופעלות או מושבתות. תמיד היית יכול לבנות תצורת בסיס מאפס, אבל אני ממש לא ממליץ עליה.

אז בואו נקליד למסוף לינוקס:

cd kernel_source
cp mediatek / config / devicename / autoconfig / kconfig / platform .config
לעשות menuconfig

זה הולך ליצור ממשק גרפי שיאפשר לך להוסיף תכונות לליבה. לדוגמא, ניתן לשנות את לוח הזמנים של קלט / פלט, מושלי מעבד, תדר GPU וכו '.
לאחר ששינית את ההגדרות הרצויות, אתה מוכן להרכיב את הגרעין. אז הקלד למסוף לינוקס:
לעשות zImage

וזה אמור להחזיר משהו כמו:

קשת / זרוע / אתחול / z תמונה מוכנה

3 דקות קריאה