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

发布于:2025-09-09 ⋅ 阅读:(16) ⋅ 点赞:(0)

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=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_ratehispeed_freqboost 等)。
  • 实现 动态性能调节(如触控加速、应用启动加速)

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,设主机名 提供基本网络能力
内存管理 overcommitmin_free_order 优化内存分配与碎片
ZRAM 开放 writeback 权限 支持智能内存压缩
F2FS 调优 cp_intervaldiscard_maxra_mul 提升性能、降低功耗、减少卡顿
硬件控制 chown CPU、LED、Vibrator、TCP 允许系统服务动态调节硬件
诊断分区 挂载 diag,创建目录 支持厂商调试与故障诊断
网络优化 tcp_def_init_rwnd=60 加速应用首次加载
服务启动 class_start halcore 启动 HAL 与核心服务,迈向开机完成


网站公告

今日签到

点亮在社区的每一天
去签到