השתמש בהגדרות התצורה הבאות כבסיס לתצורת ליבת אנדרואיד. ההגדרות מאורגנות בקובצי .cfg
עבור android-base
, android-base- ARCH
ו- android-recommended
:
- אפשרויות
android-base
מאפשרות תכונות ליבה של אנדרואיד ויש להגדיר אותן כפי שצוין על ידי כל המכשירים. -
android-base- ARCH
מאפשרות תכונות ליבה של Android ויש להגדיר אותן כפי שצוין על ידי כל מכשירי הארכיטקטורה ARCH . לא לכל הארכיטקטורות יש קובץ מתאים של אפשרויות נדרשות ספציפיות לארכיטקטורה. אם לארכיטקטורה שלך אין קובץ, אין לו דרישות נוספות של תצורת ליבה ספציפית לארכיטקטורה עבור אנדרואיד. -
android-recommended
. אפשרויות אלה מאפשרות תכונות אנדרואיד מתקדמות והן אופציונליות עבור מכשירים.
קבצי תצורה אלו ממוקמים ב- kernel/configs
repo. השתמש בערכת קבצי התצורה התואמת לגרסת הליבה שבה אתה משתמש.
לפרטים על בקרות שכבר בוצעו כדי לחזק את הליבה במכשירים שלך, ראה אבטחת מערכת וקרנל . לפרטים על הגדרות נדרשות, עיין במסמך הגדרת תאימות אנדרואיד (CDD) .
צור תצורת ליבה
עבור מכשירים בעלי פורמט defconfig
מינימליסטי, השתמש בסקריפט merge_config.sh
בעץ הליבה כדי לאפשר אפשרויות:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
זה יוצר קובץ .config
שבו אתה יכול להשתמש כדי לשמור קובץ defconfig
חדש או להדר ליבה חדשה עם תכונות אנדרואיד מופעלות.
דרישות תצורת ליבה נוספות
במקרים מסוימים, מנהל הפלטפורמה יכול לבחור מבין תכונות ליבה מרובות כדי לספק תלות באנדרואיד. תלות כזו לא יכולה לבוא לידי ביטוי בקבצי fragment config של הליבה (מתואר לעיל) מכיוון שהפורמט של קבצים אלה אינו תומך בביטויים לוגיים. באנדרואיד 9 ואילך, חבילת בדיקת התאימות (CTS) ו- Vendor Test Suite (VTS) מאמתות שהדרישות הבאות מתקיימות:
-
CONFIG_OF=y
אוCONFIG_ACPI=y
- לגרעיני 4.4 ו-4.9 יש
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
או שיש להם גםCONFIG_MEMCG=y
וגםCONFIG_MEMCG_SWAP=y
-
CONFIG_DEBUG_RODATA=y
אוCONFIG_STRICT_KERNEL_RWX=y
-
CONFIG_DEBUG_SET_MODULE_RONX=y
אוCONFIG_STRICT_MODULE_RWX=y
- עבור ARM64 בלבד:
CONFIG_ARM64_SW_TTBR0_PAN=y
אוCONFIG_ARM64_PAN=y
בנוסף, יש להגדיר את האפשרות CONFIG_INET_UDP_DIAG
ל- y
עבור ליבות 4.9 באנדרואיד 9 ומעלה.
אפשר אפשרויות מצב מארח USB
עבור אודיו במצב מארח USB, הפעל את האפשרויות הבאות:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
עבור MIDI במצב מארח USB, הפעל את האפשרות הבאה:
CONFIG_SND_USB_MIDI=y
Secomp BPF עם TSYNC
Secure Computing Berkeley Packet Filter (Seccomp BPF) היא טכנולוגיית אבטחת ליבה המאפשרת יצירת ארגזי חול המגדירים את ההקשר שבו תהליך עשוי לבצע קריאות מערכת. תכונת סנכרון השרשורים (TSYNC) מאפשרת שימוש ב-Seccomp BPF מתוכנות מרובות הליכים. יכולת זו מוגבלת לארכיטקטורות שיש להן תמיכה ב-Seccomp במעלה הזרם (ARM, ARM64, x86 ו-x86_64).
אנדרואיד חי-נעל דאמון
אנדרואיד 10 כולל את Android Live-Lock Daemon ( llkd
), שנועד לתפוס ולהפחית מבוי סתום של ליבה. לפרטים על השימוש ב- llkd
, עיין ב- Android Live-Lock Daemon .
vDSO32 ב-ARM64
אובייקט וירטואלי דינמי משותף (vDSO) הוא חלופה לקריאות מערכת, שכאשר נעשה בהן שימוש ותצורה נכונה, יכולה להפחית את עלויות המחזור. אנדרואיד 10 מוסיפה תמיכה עבור vDSO32 על ליבות 64 סיביות (אנדרואיד כבר תומך ב-vDSO64 על ליבות 64 סיביות ו-vDSO32 על ליבות 32 סיביות). שימוש ב-vDSO32 ( CONFIG_VDSO_COMPAT
) בארכיטקטורת ARM64 מספק עלייה של 0.4 אחוז בחיי הסוללה ושיפורי ביצועים אחרים.
קהילת לינוקס עובדת באופן פעיל על איחוד vDSOs בין ארכיטקטורות . אתה יכול להגדיר vDSO בליבת הלינוקס שלך על ידי הפעלת vDSO32 עם CONFIG_COMPAT
ו- CONFIG_CROSS_COMPILE_COMPAT_VDSO
עם טריפלט המהדר arm32. צוות Android Kernel העביר גירסאות ישנות יותר של סדרת התיקון vDSO למכשירי Pixel, כך שתוכל למצוא דוגמאות ב-Pixel builds ( LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
נתיב, CROSS_COMPILE_ARM32
הפניה ו- CONFIG_CROSS_COMPILE_ARM32
).
תצורת RAM נמוכה
כוונן את הקרנל/ActivityManager כדי להפחית תביעה ישירה
החזרה ישירה מתרחשת כאשר תהליך או הליבה מנסים להקצות עמוד זיכרון (בין אם ישירות או עקב תקלה בדף חדש) והקרנל השתמש בכל הזיכרון הפנוי הפנוי. זה מחייב את הליבה לחסום את ההקצאה בזמן שהיא משחררת עמוד. זה בתורו מצריך לעתים קרובות קלט/פלט של דיסק כדי לשטוף דף מלוכלך מגובה קבצים או להמתין עד lowmemorykiller
יעצור תהליך. זה יכול לגרום ל-I/O נוסף בכל שרשור, כולל שרשור ממשק משתמש.
כדי להימנע מהחזרה ישירה, לקרנל יש סימני מים המפעילים kswapd
או החזרת רקע. זהו שרשור שמנסה לפנות דפים כך שבפעם הבאה שרשור אמיתי מקצה, זה יכול להצליח במהירות.
סף ברירת המחדל להפעלת תביעת רקע נמוך למדי, בסביבות 2 MB במכשיר 2 GB ו-636 KB במכשיר 512 MB. הליבה תובעת רק כמה מגה-בייט של זיכרון בתביעה חוזרת ברקע. המשמעות היא שכל תהליך שמקצה במהירות יותר מכמה מגה-בתים יפגע במהירות בתביעה ישירה.
תמיכה בכוונון ליבה מתווספת בענף הקרנל של אנדרואיד-3.4 כתיקון 92189d47f66c67e5fd92eafaa287e153197a454f ("הוסף קילובייט נוסף חינמי לכוונון"). בחירת תיקון זה לליבה של מכשיר מאפשרת ל- ActivityManager
לומר לקרנל לנסות לשמור שלושה מאגרי זיכרון פנויים במסך מלא של 32 bpp.
ניתן להגדיר את הספים הללו באמצעות המסגרת config.xml
.
<!-- Device configuration setting the /proc/sys/vm/extra_free_kbytes tunable in the kernel (if it exists). A high value will increase the amount of memory that the kernel tries to keep free, reducing allocation time and causing the lowmemorykiller to kill earlier. A low value allows more memory to be used by processes but may cause more allocations to block waiting on disk I/O or lowmemorykiller. Overrides the default value chosen by ActivityManager based on screen size. 0 prevents keeping any extra memory over what the kernel keeps by default. -1 keeps the default. --> <integer name="config_extraFreeKbytesAbsolute">-1</integer>
<!-- Device configuration adjusting the /proc/sys/vm/extra_free_kbytes tunable in the kernel (if it exists). 0 uses the default value chosen by ActivityManager. A positive value will increase the amount of memory that the kernel tries to keep free, reducing allocation time and causing the lowmemorykiller to kill earlier. A negative value allows more memory to be used by processes but may cause more allocations to block waiting on disk I/O or lowmemorykiller. Directly added to the default value chosen by ActivityManager based on screen size. --> <integer name="config_extraFreeKbytesAdjust">0</integer>
כוונן את LowMemoryKiller
ActivityManager
מגדיר את הספים של LowMemoryKiller
כך שיתאימו לציפיות שלו מערך העבודה של דפים מגובים בקבצים (עמודי מטמון) הנדרשים להפעלת התהליכים בכל דלי ברמת עדיפות. אם למכשיר יש דרישות גבוהות לסט העבודה, למשל אם ממשק המשתמש של הספק דורש יותר זיכרון או אם נוספו שירותים נוספים, ניתן להגדיל את הספים.
ניתן להקטין את הספים אם שמור יותר מדי זיכרון לדפים מגובי קבצים, כך שתהליכי רקע נהרגים הרבה לפני שהדיסק נגיף בגלל שהמטמון קטן מדי.
<!-- Device configuration setting the minfree tunable in the lowmemorykiller in the kernel. A high value will cause the lowmemorykiller to fire earlier, keeping more memory in the file cache and preventing I/O thrashing, but allowing fewer processes to stay in memory. A low value will keep more processes in memory but may cause thrashing if set too low. Overrides the default value chosen by ActivityManager based on screen size and total memory for the largest lowmemorykiller bucket, and scaled proportionally to the smaller buckets. -1 keeps the default. --> <integer name="config_lowMemoryKillerMinFreeKbytesAbsolute">-1</integer>
<!-- Device configuration adjusting the minfree tunable in the lowmemorykiller in the kernel. A high value will cause the lowmemorykiller to fire earlier, keeping more memory in the file cache and preventing I/O thrashing, but allowing fewer processes to stay in memory. A low value will keep more processes in memory but may cause thrashing if set too low. Directly added to the default value chosen by ActivityManager based on screen size and total memory for the largest lowmemorykiller bucket, and scaled proportionally to the smaller buckets. 0 keeps the default. --> <integer name="config_lowMemoryKillerMinFreeKbytesAdjust">0</integer>