核心設定

使用下列配置設定做為 Android 核心的基礎 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定系統已將「android-base」的設定整理成 .cfg 個檔案。 android-base-ARCHandroid-recommended:

  • android-base 選項可啟用 Android 核心功能,以及 都應根據所有裝置指定設定。
  • android-base-ARCH 選項可啟用核心指標 Android 功能,且應依照 架構 ARCH並非所有架構都有對應的檔案 架構專屬必要選項如果您的架構 則沒有額外的架構專屬核心設定 Android 的需求條件。
  • android-recommended。這些選項可用來啟用進階 Android 這些功能對裝置而言是選用項目。

這些設定檔位於 kernel/configs 使用與 執行指令碼

如要進一步瞭解強化核心已採用的控管措施 裝置,請參閱系統和 核心安全性如要進一步瞭解必要設定,請參閱 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 和 Compatibility Test Suite (CTS) 供應商測試套件 (VTS) 驗證 滿足下列需求:

  • CONFIG_OF=yCONFIG_ACPI=y
  • 4.4 和 4.9 核心有 CONFIG_ANDROID_LOW_MEMORY_KILLER=y 或同時包含 CONFIG_MEMCG=yCONFIG_MEMCG_SWAP=y
  • CONFIG_DEBUG_RODATA=yCONFIG_STRICT_KERNEL_RWX=y
  • CONFIG_DEBUG_SET_MODULE_RONX=yCONFIG_STRICT_MODULE_RWX=y
  • 僅適用於 ARM64:CONFIG_ARM64_SW_TTBR0_PAN=yCONFIG_ARM64_PAN=y

此外,CONFIG_INET_UDP_DIAG 選項必須設為 Android 9 以上版本中的 4.9 核心為 y

啟用 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

使用 TSYNC 的 Seccomp BPF

安全運算 Berkeley 封包篩選器 (Seccomp BPF) 是核心安全性 這項技術可以協助建立能定義情境的沙盒 處理程序可能會發出系統呼叫執行緒同步處理 (TSYNC) 功能啟用多執行緒程式的 Seccomp BPF。這個 只有支援 Seccomp 上游 (ARM) 的架構 ARM64、x86 和 x86_64)。

Android 即時鎖定 Daemon

Android 10 包含 Android 即時鎖定 Daemon (llkd),用於擷取及減少核心死結。 如要進一步瞭解如何使用 llkd,請參閱 Android 即時鎖定 Daemon

ARM64 上的 vDSO32

虛擬動態共用物件 (vDSO) 是系統呼叫的替代選項, 只要正確使用並經過設定,週期成本就能降低。Android 版 10 開始在 64 位元核心 (Android) 上支援 vDSO32 已經在 64 位元核心上支援 vDSO64,以及在 32 位元核心上支援 vDSO32)。使用 ARM64 架構上的 vDSO32 (CONFIG_VDSO_COMPAT) 可提供 電池續航時間增加 0.4%,其他效能提升。

Linux 社群目前積極參與 統一 vDSO 跨架構如要在 Linux kernel 中設定 vDSO,請啟用 包含 CONFIG_COMPAT 和 vDSO32 的 vDSO32 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 設定偏低

調整核心和 ActivityManager 以減少直接收回

當程序或核心嘗試分配頁面時,會發生直接重新取得 (直接或因新頁面錯誤而造成),核心 已使用所有可用的可用記憶體。這需要核心封鎖分配作業 則會釋放網頁因此通常需要透過磁碟 I/O 清除 支援的檔案有問題,或等待 lowmemorykiller 停止 上傳資料集之後,您可以運用 AutoML 自動完成部分資料準備工作這可能會導致任何執行緒 (包括 UI 執行緒) 中出現額外的 I/O。

為了避免直接回收,核心會有會觸發浮水印 kswapd 或背景收回。這個執行緒會嘗試 釋出頁面,因此下次實際分配的執行緒分配時,速度就會更快。

觸發背景重新聲明的預設門檻很低,約 裝置大小為 2 MB,512 MB 裝置則為 636 KB。 核心只會在背景回收一些 MB 的記憶體。也就是說 任何快速配置超過數 MB 的處理程序都會 按下「直接放棄」

Android-3.4 核心分支版本新增了對核心可微調項目的支援,如 修補程式 92189d47f66c67e5fd92eafaa287e153197a454f ("新增其他免費 KB 可微調」)。從裝置的核心選擇這個修補程式 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>

調整低記憶體清除工具

ActivityManager 會設定 LowMemoryKiller 符合其預期 依個別優先順序執行程序所需的檔案提供支援網頁 (快取網頁) 級別值區如果裝置有高度需求而用於工作組,例如 如果供應商 UI 需要更多記憶體,或如果已新增更多服務,則 執行個體門檻可能會提高

如果預留過多記憶體,可降低這個門檻 以便讓背景處理程序在很久之前就終止 會發生磁碟輾轉現象。

<!-- 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>