Android14 init.rc中on boot阶段操作4

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=true
    write /proc/sys/vm/dirty_expire_centisecs 200
    write /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=n2^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 与核心服务,迈向开机完成
相关推荐
fatiaozhang95277 小时前
中国移动中兴云电脑W132D-RK3528-2+32G-刷机固件包(非原机制作)
android·xml·电脑·电视盒子·刷机固件·机顶盒刷机
Android出海9 小时前
Google Play账户与App突遭封禁?紧急应对与快速重构上架策略
android·网络·重构·新媒体运营·产品运营·内容运营
恋猫de小郭9 小时前
Flutter 官方 LLM 动态 UI 库 flutter_genui 发布,让 App UI 自己生成 UI
android·前端·flutter
锅拌饭9 小时前
saveEnabled导致的Fragment大量泄露
android
叽哥9 小时前
Kotlin学习第 3 课:Kotlin 流程控制:掌握逻辑分支与循环的艺术
android·java·kotlin
CYRUS_STUDIO9 小时前
别让 so 裸奔!移植 OLLVM 到 NDK 并集成到 Android Studio
android·android studio·llvm
尚久龙10 小时前
安卓学习 之 图片控件和图片按钮
android·java·学习·手机·android studio·安卓
东风西巷10 小时前
Don‘t Sleep:保持电脑唤醒,确保任务不间断
android·电脑·软件需求
tangweiguo0305198710 小时前
FlutterActivity vs FlutterFragmentActivity:全面对比与最佳实践
android·flutter