استخدِم إعدادات الضبط التالية كأساس لإعداد نواة Android. يتم تنظيم الإعدادات في ملفات .cfg
لكل من android-base
وandroid-base-ARCH
وandroid-recommended
:
- تعمل خيارات
android-base
على تفعيل ميزات Android الأساسية، ويجب ضبطها على النحو المحدّد من خلال جميع الأجهزة. - تفعِّل خيارات
android-base-ARCH
ميزات Android الأساسية ويجب ضبطها على النحو المحدَّد من قِبل جميع الأجهزة التي تعمل بالبنية ARCH. لا تتضمّن بعض التصاميم المعمارية ملفًا مقابلًا للخيارات المطلوبة الخاصة بالتصميم. إذا لم تتضمّن البنية ملفًا، يعني ذلك أنّها لا تتضمن متطلبات إضافية لإعدادات kernel الخاصة بالبنية على Android. android-recommended
. تفعِّل هذه الخيارات ميزات Android المتقدّمة وهي اختيارية للأجهزة.
تتوفّر ملفات الإعداد هذه في مستودع
kernel/configs
. استخدِم مجموعة ملفات الإعداد التي تتوافق مع إصدار
النواة الذي تستخدمه.
للحصول على تفاصيل حول عناصر التحكّم التي تم اتّخاذها لتعزيز النواة على أجهزتك، يمكنك الاطّلاع على مقالة أمان النظام والنواة. للاطّلاع على تفاصيل عن الإعدادات المطلوبة، يُرجى الاطّلاع على مستند تعريف التوافق مع Android (CDD).
إنشاء إعدادات النواة
بالنسبة إلى الأجهزة التي تستخدم تنسيق defconfig
البسيط، استخدِم النص البرمجي
merge_config.sh
في شجرة kernel لتفعيل الخيارات التالية:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
يؤدي ذلك إلى إنشاء ملف .config
يمكنك استخدامه لحفظ ملف
defconfig
جديد أو تجميع نواة جديدة مع ميزات Android
مفعَّلة.
متطلبات إضافية لتهيئة النواة
في بعض الحالات، يمكن لمشرف النظام الأساسي الاختيار من بين ميزات متعدّدة للقشرة لتلبية شرط الاعتماد على Android. لا يمكن التعبير عن هذه التبعيات في ملفات أجزاء إعدادات النواة (الموضّحة أعلاه) لأنّ تنسيق هذه الملفات لا يتيح استخدام التعبيرات المنطقية. في الإصدار 9 من نظام Android والإصدارات الأحدث، يتحقّق مجموعة أدوات اختبار التوافق (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-lock daemon
(llkd
)، وهو مصمّم لرصد حالات التوقف المفاجئ لنظام التشغيل والحدّ منها.
لمعرفة تفاصيل عن استخدام llkd
، يُرجى الرجوع إلى
الخادم الدائم لقفل الشاشة في Android.
vDSO32 على ARM64
العنصر الافتراضي المشترَك الديناميكي (vDSO) هو بديل لطلبات النظام التي يمكن أن تقلِّل تكاليف الدورات عند استخدامها وضبطها بشكلٍ صحيح. يضيف نظام Android
10 ميزة استخدام vDSO32 مع نواة 64 بت (يتوافق نظام Android
حاليًا مع vDSO64 مع نواة 64 بت وvDSO32 مع نواة 32 بت). ويؤدي استخدام
vDSO32 (CONFIG_VDSO_COMPAT
) على بنية ARM64 إلى
زيادة عمر البطارية بنسبة 0.4 في المئة إلى جانب تحسينات أخرى في الأداء.
يعمل منتدى Linux بنشاط على
توحيد وحدات vDSO
على جميع الأنظمة الأساسية. يمكنك إعداد vDSO في نواة Linux من خلال تفعيل
vDSO32 مع CONFIG_COMPAT
وCONFIG_CROSS_COMPILE_COMPAT_VDSO
باستخدام الإصدار الثلاثي من أداة التحويل البرمجي Arm32.
نقل فريق نواة Android الإصدارات القديمة من سلسلة تصحيحات vDSO
إلى أجهزة Pixel، لذا يمكنك العثور على أمثلة في إصدارات نواة Pixel
(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
المسار،
CROSS_COMPILE_ARM32
المرجع،
CONFIG_CROSS_COMPILE_ARM32
الإعداد).
إعدادات ذاكرة الوصول العشوائي (RAM) المنخفضة
ضبط kernel وActivityManager لتقليل عمليات الاسترداد المباشر
تحدث عملية الاسترداد المباشر عندما تحاول العملية أو النواة تخصيص صفحة من الذاكرة (إما بشكل مباشر أو بسبب خطأ في صفحة جديدة) وتستخدم النواة كل الذاكرة الخالية المتوفرة. وهو ما يتطلب من النواة حظر التخصيص
بينما تُفرغ هذه الصفحة. ويتطلّب ذلك بدوره غالبًا عمليات إدخال/إخراج القرص لتفريغ ملف
غير مسموح بوصوله إلى الذاكرة في صفحة أو الانتظار إلى أن يوقف lowmemorykiller
عملية
. ويمكن أن يؤدي ذلك إلى زيادة عمليات الإدخال/الإخراج في أي سلسلة محادثات، بما في ذلك سلسلة محادثات واجهة المستخدم.
لتجنب عملية الاسترداد المباشرة، تحتوي النواة على علامات مائية تؤدي إلى تشغيل
kswapd
أو استرداد الخلفية. هذا خيط يحاول
إخلاء الصفحات حتى يتمكّن الخيط الحقيقي من تخصيصها في المرة القادمة بسرعة.
إنّ الحدّ الأدنى التلقائي لبدء عملية استرداد الذاكرة في الخلفية منخفض جدًا، ويتراوح بين حوالى 2 ميغابايت على جهاز بسعة 2 غيغابايت و636 كيلوبايت على جهاز بسعة 512 ميغابايت. لا تسترد النواة سوى بضعة ميغابايت من الذاكرة في عملية استرداد الخلفية. وهذا يعني أنّه سيصل أيّ عملية تُخصّص بسرعة أكثر من بضعة ميغابايت إلى مرحلة استرداد الذاكرة المباشرة بسرعة.
تمت إضافة الدعم لتوفُّر kernel في فرع نواة Android-3.4 كما يلي:
patch 92189d47f66c67e5fd92eafaa287e153197a454f ("إضافة المزيد من وحدات البايت المجانية"). من خلال اختيار هذا الإصلاح لتطبيقه على نواة الجهاز، يمكن لتطبيق
ActivityManager
أن يطلب من النواة محاولة إبقاء ثلاثة وحدات تخزين مؤقتة بملء الشاشة بسعة 32 بت لكل بكسل خالية من الذاكرة.
يمكن ضبط هذه الحدود باستخدام 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>