Android14 init.rc中on early-init, init, late-init, early-fs, post-fs階段詳解1
Android14 init.rc的on late-fs, post-fs-data階段主要操作詳解2
Android14 init.rc中啟動Zygote詳解3
Android14 init.rc中on boot階段操作4
1 on boot和低內存設備的啟動優化
僅在ro.config.low_ram=true
?的設備上執行(如 1GB RAM 以下),目的是優化把內存與I/O的平衡,防止臟頁堆積導致OOM。
dirty_expire_centisecs=200
:臟頁最長保留 2 秒(默認 30 秒),盡早寫回磁盤。dirty_background_ratio=5
:當臟頁占內存 5% 時,后臺開始回寫(默認 10% 或 20%)
on boot && property:ro.config.low_ram=truewrite /proc/sys/vm/dirty_expire_centisecs 200write /proc/sys/vm/dirty_background_ratio 5
2. on boot階段
2.1 基礎網絡初始化
on boot
????????ifup lo # 啟用本地回環接口 (lo)
????????hostname localhost # 設置主機名
????????domainname localdomain # 設置域名
- lo接口是進程間通信(http)的基礎。
2.2 內存管理優化
write /proc/sys/vm/overcommit_memory 1
write /proc/sys/vm/min_free_order_shift 4
overcommit_memory:控制Linux內核在分配內存時是否允許“內存過量承諾(overcommit),即是否允許進程申請的內存總量超過實際可用的物理內存+Swap。
-
overcommit_memory
的取值:值 含義 0
?(默認)啟發式過量分配(Heuristic)<br>內核根據當前內存壓力、swap 空間等估算是否允許分配。有一定風險,但平衡性能與安全。 1
總是允許過量分配(Always)<br>無論內存是否足夠,一律允許? malloc()
?成功。僅當真正訪問內存時才分配物理頁。2
禁止過量分配(Never)<br>嚴格檢查:申請內存總量不能超過? swap + RAM * overcommit_ratio
。最安全,但易導致?malloc()
?失敗。 min_free_order_shift
:控制內核在內存回收(reclaim)或直接回收(direct reclaim)?時,需要保留的最小連續空閑內存塊大小。- 內存頁按“階(order)”管理:
order=0
?是 1 頁(4KB),order=1
?是 2 頁(8KB),order=n
?是?2^n
?頁。取值4表示至少保留?2^4 = 16
?個連續頁,共?64KB?的連續物理內存。
2.3 ZRAM寫回管理
chown root system /sys/block/zram0/idle
chmod 0664 /sys/block/zram0/idle
chown root system /sys/block/zram0/writeback
chmod 0664 /sys/block/zram0/writeback
- ZRAM:將內存壓縮作為交換空間,提升低內存設備性能。
- writeback:將 ZRAM 中的數據寫回物理存儲(如 eMMC),釋放內存。
2.4 F2FS文件系統調優
- F2FS(Flash-Friendly File System)是 Android 推薦的閃存優化文件系統。
- 創建符號鏈接
mkdir /dev/sys/fs/by-name 0755 system system
symlink /sys/fs/f2fs/${dev.mnt.dev.data} /dev/sys/fs/by-name/userdata
- F2FS參數調優
write /dev/sys/fs/by-name/userdata/cp_interval 200 # 檢查點間隔 200 秒
write /dev/sys/fs/by-name/userdata/gc_urgent_sleep_time 50 # GC 緊急模式休眠 50ms
write /dev/sys/fs/by-name/userdata/iostat_period_ms 1000 # I/O 統計周期 1 秒
write /dev/sys/fs/by-name/userdata/iostat_enable 1 # 啟用 I/O 統計
write /dev/sys/fs/by-name/userdata/seq_file_ra_mul 16 # 順序讀預讀乘數 16x
-
?限制 TRIM 操作大小
write /dev/sys/block/by-name/userdata/queue/discard_max_bytes 134217728 # 128MB
write /dev/sys/block/by-name/rootdisk/queue/discard_max_bytes 134217728
- TRIM/Discard:通知 SSD 刪除無效數據,提升寫入性能。
- 限制為 128MB:避免單次 TRIM 操作過長,導致?I/O 卡頓。
2.5 硬件設備權限配置
2.5.1 CPU頻率調節
chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate
chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_slack
chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_slack
chown system system /sys/devices/system/cpu/cpufreq/interactive/boost
chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boost
- 允許?
system
?用戶調整 CPU 頻率策略(如?timer_rate
,?hispeed_freq
,?boost
?等)。 - 實現?動態性能調節(如觸控加速、應用啟動加速)
2.5.2 Vibrator
chown system system /sys/class/leds/vibrator/trigger
chown system system /sys/class/leds/vibrator/activate
chown system system /sys/class/leds/vibrator/brightness
chown system system /sys/class/leds/vibrator/duration
chown system system /sys/class/leds/vibrator/state
2.5.3 背光和LED
chown system system /sys/class/leds/keyboard-backlight/brightness
chown system system /sys/class/leds/lcd-backlight/brightness
chown system system /sys/class/leds/button-backlight/brightness
chown system system /sys/class/leds/status_blue/breath
chown system system /sys/class/leds/status_red/trigger
chown system system /sys/class/leds/status_green/trigger
chown system system /sys/class/leds/status_blue/trigger
chown system system /sys/class/leds/red/device/grpfreq
- 控制屏幕/鍵盤/狀態燈的亮度。
2.6 診斷分區(Diag)掛載
mkdir /mnt/diag
mount ext4 /dev/block/bootdevice/by-name/diag /mnt/diag noatime
chown system system /mnt/diag
chmod 0777 /mnt/diag mkdir /mnt/diag/HD001 ... HD005 0777 system system
restorecon /mnt/diag/*
diag
?分區:廠商用于存儲?調試日志、崩潰轉儲、診斷數據。noatime
:掛載時不更新文件訪問時間,減少寫入,提升性能。- 創建 HD001-HD005 目錄:可能是歷史遺留或特定診斷工具使用。
restorecon
:恢復 SELinux 安全上下文,確保安全策略生效。
2.7 啟動class為hal和core的services
class_start hal
class_start core
2.8 總結
模塊 | 關鍵操作 | 目的 |
---|---|---|
低內存優化 | 調整?dirty_* ?參數 | 防止 OOM,保障流暢性 |
網絡基礎 | 啟用?lo ,設主機名 | 提供基本網絡能力 |
內存管理 | overcommit ,?min_free_order | 優化內存分配與碎片 |
ZRAM | 開放?writeback ?權限 | 支持智能內存壓縮 |
F2FS 調優 | cp_interval ,?discard_max ,?ra_mul | 提升性能、降低功耗、減少卡頓 |
硬件控制 | chown ?CPU、LED、Vibrator、TCP | 允許系統服務動態調節硬件 |
診斷分區 | 掛載?diag ,創建目錄 | 支持廠商調試與故障診斷 |
網絡優化 | tcp_def_init_rwnd=60 | 加速應用首次加載 |
服務啟動 | class_start hal ,?core | 啟動 HAL 與核心服務,邁向開機完成 |