תצורת ליבה

השתמש בהגדרות התצורה הבאות כבסיס לתצורת ליבת אנדרואיד. ההגדרות מאורגנות בקובצי .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>