استخدام إعدادات الضبط التالية كأساس لنواة Android
التكوين. يتم تنظيم الإعدادات في .cfg
ملف للحساب android-base
،
android-base-ARCH
،
android-recommended
:
- تتيح خيارات
android-base
تفعيل ميزات Android الأساسية. على النحو المحدد بواسطة جميع الأجهزة. - تفعيل خيارات
android-base-ARCH
الأساسية ميزات Android ويجب إعدادها على النحو المحدد بواسطة جميع أجهزة الهندسة المعمارية ARCH. لا تحتوي كل البُنى الأساسية على ملف مقابل من الخيارات المطلوبة الخاصة بالهندسة. إذا لم يكن للهندسة المعمارية الخاصة بك أي ملف، فلن يحتوي على إعدادات kernel إضافية خاصة بالبنية متطلبات Android. android-recommended
تعمل هذه الخيارات على تفعيل ميزات Android المتقدمة الميزات واختيارية للأجهزة.
توجد ملفات الضبط هذه في
kernel/configs
مستودع. استخدام مجموعة ملفات التهيئة التي تتوافق مع إصدار
النواة التي تستخدمها.
لمعرفة تفاصيل حول الضوابط التي تم اتخاذها لتقوية النواة على الأجهزة، راجِع النظام أمان النواة (kernel). للحصول على تفاصيل حول الإعدادات المطلوبة، يمكنك الاطّلاع على مستند تعريف التوافق مع Android (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
ملف أو تجميع نواة جديدة بميزات Android
مفعّلة.
متطلبات إضافية لتهيئة النواة
في بعض الحالات، يمكن لمسؤول صيانة النظام الأساسي الاختيار من بين نواة متعددة من الميزات لتلبية الاعتمادية على Android. ولا يمكن لهذه التبعيات وأعبر عنه في ملفات تجزئة تهيئة النواة (الموضحة أعلاه) لأن لا يدعم تنسيق هذه الملفات التعبيرات المنطقية. في Android 9 مستوى أعلى، ومجموعة أدوات اختبار التوافق (CTS)، تحقّق حزمة اختبار المورّد (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 من Android والإصدارات الأحدث.
تفعيل خيارات وضع مضيف USB
بالنسبة إلى الصوت في وضع مضيف USB، فعِّل الخيارات التالية:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
بالنسبة إلى وضع مضيف USB MIDI، فعِّل الخيار التالي:
CONFIG_SND_USB_MIDI=y
Seccomp BPF مع TSYNC
فلتر حزم الحوسبة الآمنة (Seccomp BPF) هو نظام أمان نواة تقنية تتيح إنشاء أوضاع الحماية التي تحدد السياق في والتي قد تؤدي فيها العملية إلى استدعاءات النظام. مزامنة سلاسل المحادثات (TSYNC) تتيح استخدام Seccomp BPF من البرامج متعددة السلاسل. هذا النمط تقتصر القدرة على البُنى الأساسية التي تسمح بوحدات Seccomp الرئيسية (ARM، ARM64 وx86 وx86_64).
البرنامج الخفي لقفل Android المباشر
يشتمل Android 10 على البرنامج الخفي لقفل Android Live
(llkd
)، وهي مُصمَّمة لاكتشاف حالات التعطُّل في النواة والحدّ منها.
للحصول على تفاصيل عن استخدام "llkd
"، يمكنك الرجوع إلى
البرنامج الخفي لقفل Android Live-lock
vDSO32 على ARM64
يُعد الكائن المشترك الديناميكي الافتراضي (vDSO) بديلاً لاستدعاءات النظام التي،
عند استخدامها وضبطها بشكل صحيح، يمكن أن تقلل تكاليف الدورة. جهاز Android
10 يدعم vDSO32 على نواة 64 بت (نظام التشغيل Android)
يدعم vDSO64 بالفعل على نواة 64 بت وvDSO32 على نواة 32 بت). استخدام
يوفّر vDSO32 (CONFIG_VDSO_COMPAT
) على بنية ARM64
زيادة بنسبة 0.4 في المائة في عمر البطارية وتحسينات أخرى في الأداء.
يعمل مجتمع Linux بنشاط على
توحيد vDSOs
على مستوى البُنى الأساسية. يمكنك إعداد vDSO في نواة Linux من خلال تفعيل
vDSO32 مع CONFIG_COMPAT
CONFIG_CROSS_COMPILE_COMPAT_VDSO
مع ثلاثي محول التجميع في Arm32.
احتفظ فريق Android Kernel بنسخة احتياطية من الإصدارات القديمة من سلسلة تصحيح vDSO.
في أجهزة Pixel، وبالتالي يمكنك الاطّلاع على أمثلة في إصدارات Pixel kernel
(مسار واحد (LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
)،
مرجع واحد (CROSS_COMPILE_ARM32
)
CONFIG_CROSS_COMPILE_ARM32
.
إعدادات ذاكرة وصول عشوائي منخفضة
ضبط النواة kernel وactivityManager لتقليل عمليات الاسترداد المباشرة
تحدث عملية الاسترداد المباشرة عندما تحاول العملية أو النواة تخصيص صفحة
من الذاكرة (إما بشكل مباشر أو بسبب خطأ في صفحة جديدة) كما أن النواة لديها
تستخدم جميع الذاكرة الخالية المتاحة. يتطلب هذا من النواة حظر التخصيص
أثناء تحرير الصفحة. وهذا بدوره غالبًا ما يتطلب إدخال/إخراج القرص لإخراج
نسخة غير صالحة من الصفحة أو الانتظار إلى أن يوقف lowmemorykiller
الدفع. وقد ينتج عن ذلك زيادة عمليات الإدخال والإخراج في أي سلسلة محادثات، بما في ذلك مؤشر ترابط واجهة المستخدم.
لتجنب الاسترداد المباشر، تحتوي النواة على علامات مائية تؤدي إلى
kswapd
أو استرداد الخلفية. هذه سلسلة رسائل تحاول
وإخلاء صفحات بحيث يمكن النجاح سريعًا في المرة التالية التي يتم فيها تخصيص سلسلة محادثات حقيقية.
يُعد الحد التلقائي لبدء عملية الاسترداد في الخلفية منخفضًا إلى حد ما، حول 2 ميغابايت على جهاز بحجم 2 غيغابايت و636 كيلوبايت على جهاز بحجم 512 ميغابايت. تشير رسالة الأشكال البيانية لا يسترد kernel سوى بضعة ميغابايت من الذاكرة في عملية استرداد الخلفية. يعني ذلك فأي عملية تخصص بسرعة أكبر من بضعة ميغابايت ستنتقل بسرعة ذات الصلة بعملية الاسترداد المباشرة.
تتم إضافة دعم ضبط النواة في فرع Android-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 increases 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 increases 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 causes 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 keeps 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 causes 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 keeps 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>