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 与核心服务,迈向开机完成
相关推荐
從南走到北9 小时前
JAVA国际版同城跑腿源码快递代取帮买帮送同城服务源码支持Android+IOS+H5
android·java·ios·微信小程序
2501_9159184110 小时前
如何解析iOS崩溃日志:从获取到符号化分析
android·ios·小程序·https·uni-app·iphone·webview
Entropless11 小时前
OkHttp 深度解析(一) : 从一次完整请求看 OkHttp 整体架构
android·okhttp
v***913011 小时前
Spring+Quartz实现定时任务的配置方法
android·前端·后端
wilsend11 小时前
Android Studio 2024版新建java项目和配置环境下载加速
android
兰琛12 小时前
Android Compose展示PDF文件
android·pdf
走在路上的菜鸟12 小时前
Android学Dart学习笔记第四节 基本类型
android·笔记·学习
百锦再13 小时前
第21章 构建命令行工具
android·java·图像处理·python·计算机视觉·rust·django
skyhh14 小时前
Android Studio 最新版汉化
android·ide·android studio
路人甲ing..14 小时前
Android Studio 快速的制作一个可以在 手机上跑的app
android·java·linux·智能手机·android studio