尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Framework Init
Kernel 完成初始化之后会挂载并解包initramfs(ramdisk)作为临时根文件系统Kernel_init 执行 /init/init 的init_first_stage以下是 ramdisk/init 的构建规则LOCAL_MODULE : init_first_stage LOCAL_MODULE_STEM : init ... LOCAL_MODULE_PATH : $(TARGET_RAMDISK_OUT)FirstStageMainFirstStageMain ├─ 1. 初始化最小环境挂载早期必须的伪文件系统 /dev, /proc, /sys, /sys/fs/selinux ├─ 2. 处理设备节点、设备事件 mknod: /dev/kmsg, random, urandom, ptms, null... ├─ 3. 准备挂载早期目录并启用 kernel logmount: /mnt, /mnt/vendor, product | InitKernelLogging ├─ 4. 解析启动模式加载内核模块LoadKernelModules 会根据 /lib/modules、 recovery 加载模块 | 这个步骤可以为了之后的块设备、dm、fs 提供模块依赖。 └─ 5. 最关键的一步 执行 DoFirstStageMountDoFirstStageMount (AOSP14)DoFirstStageMount的本质就是uevented、SELinux、SecondStage、Zygote、System_Server都还没起来之前由 First Stage Init 自己读 fstab创建设备节点建立dynamic-partition/snapshot/dm-verity设备并把 /system, /vendor, /product, /metadata 等 early 分区挂好保证/system/bin/initandselinue_setup能够完整执行。DoFirstStageMount ├─ FirstStageMount::Create 创建 FirstStageMount 对象 | ├─ ReadFstabFromDt/ReadDefaultFstab: 优先从设备树读取若 DT 中不存在则走 default。正因此 fstab 中明确要求挂载的分区如 /system,/vendor,/product 会被first stage处理 | └─ 创建 FirstStageMountVBootV2: 根据 avb flag / DT vbmeta 选择 VBootV2 | ├─ DoCreateDevices 挂载前的准备 | ├─ InitDevices: 收集 First Stage Mount 所需的物理分区、super分区、vbmeta分区然后创建/dev/block节点。初始化device-mappersuper物理设备及first stage所需物理分区。 | ├─ 优先挂载 /metadata: 必须早于动态分区 snapshot | ├─ CreateLogicalPartitions: 创建逻辑分区,若 fstab 中有 logical flag即视为启用dynamic partitions会判断创建logical snapshot分区。 | ├─ DoFirstStageMount | ├─ MountPartions: 核心挂载流程 | | ├─ TrySwitchSystemAsBoot: 处理/system特殊性 | | | ├─ UseDsuIfPresent: 若当前需要boot GSU/GKI会把fstab转换到DSU镜像。 | | | ├─ PreloadAvbKeys: 在切root之前预读ramdisk上的AVB key因为在切到/system时原来的ramdisk可能会不可见。 | | | └─ 查找/system fstab entry: 若fstab中有/system则先挂载/system再SwitchRoot(/system) | | └─ MountPartition (other first_stage_mount 条目) | | ├─/system前面已处理跳过 | | ├─overlay: 延后处理 | | └─emmc: emmc是raw partition条目不需要实际的mountemmc是用AVB链式验证的时候探测的。 Android 11: DoFirstStageMount ├─ InitDevices └─ MountPartitions ├─ metadata ├─ logical partitions └─ normal mounts对比 AOSP14 平台Android 11 版本把DoCreateDevices的职责直接内联到了MountPartitions()的前半部分。编译产物对于 RK3568 AOSP11 平台first_stage_init.cpp实际上编译进的是init_first_stage并且BOARD_BOOT_HEADER_VERSION : 2 BOARD_USES_AB_IMAGE : false BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE : false ... BOARD_MKBOOTIMG_ARGS --second $(TARGET_PREBUILT_RESOURCE)其中BOARD_BOOT_HEADER_VERSION: 2表示使用 Android Boot Image Header v2 格式# Are we building a vendor boot image BUILDING_VENDOR_BOOT_IMAGE : ifdef BOARD_BOOT_HEADER_VERSION ifneq ($(call math_gt_or_eq,$(BOARD_BOOT_HEADER_VERSION),3),) ifneq ($(TARGET_NO_VENDOR_BOOT),true) BUILDING_VENDOR_BOOT_IMAGE : true endif endif endif明确配置BOARD_BOOT_HEADER_VERSION ≥ 3的时候才会设置BUILDING_VENDOR_BOOT_IMAGE为 true即配置为 2 的时候不会生成vendor_boot.img。Header 小于 3 的时候ramdisk放在boot.img大于等于 3 的时候进入vendor_boot镜像构建逻辑。
RELATED

相关推荐

大模型和普通程序到底哪不一样?从 if-else 到参数拟合

大模型和普通程序到底哪不一样?从 if-else 到参数拟合

大模型和普通程序到底哪不一样?从 if-else 到参数拟合计算器永远算对、AI 修图偶尔抽风——都是软件,底层逻辑却天差地别。本文用一张六维对比表 一段可运行 softmax demo,讲清"确定性程序"和"概率性模型"的本质区别。适…

📅 2026/9/16 6:42:14
GTSAM新IMU Factor深度解析:预积分原理与VIO工程实践

GTSAM新IMU Factor深度解析:预积分原理与VIO工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/16 6:42:14
Hermes数字员工:Python原生Agent的安装、启动与首句对话实战

Hermes数字员工:Python原生Agent的安装、启动与首句对话实战

1. 项目概述:这不是一个“玩具”,而是一次真实数字员工的临门一脚Hermes 数字员工系列,不是又一个披着AI外衣的聊天框。它背后是 DeepSeek 团队在 Agent 架构、工具调用、多步推理和自主任务编排上持续打磨的成果。我第一次在本地跑通 Hermes…

📅 2026/9/16 6:37:14
MORE NEWS

更多资讯

📰

STM32燃气安防系统工程级设计与抗干扰实践

1. 这不是“又一个STM32项目”,而是一套可直接上电验证的安防工程原型你搜“STM32 智能安防”出来的结果,十有八九是带LED闪烁、蜂鸣器响两声、串口打印“Gas detected!”的Demo——它连传感器都没接稳,更别说在真实环境里扛住电磁干扰、电源…

📰

Pentagi:AI驱动的渗透测试代理架构解析

1. “Pentagi”不是工具名,而是渗透测试AI代理架构的代号级命名你搜“pentagi”,页面上全是Docker、Neo4j、安装教程、报错提示——没有官网、没有GitHub仓库、没有文档首页。这不是偶然,而是典型的技术概念在传播过程中被误当作产品名的缩略…

📰

Direct-LiNGAM算法:从观测数据中反推因果方向的确定性方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

AI辅助STM32开发:零基础搭建第一个工程并点亮LED

开头很多刚入行或者自学的朋友,第一次接触STM32的时候都卡在同一个地方:工程不知道该怎么建,代码不知道从哪下笔,遇到一个编译报错能查一下午。我最近刚好帮一个零基础的师弟从零搭了第一个STM32工程,从安装Keil、配置…

📰

STM32C5+LSM6DSV16X:SPI轮询读取陀螺仪数据详解

前阵子把一颗LSM6DSV16X接到了STM32C5的板子上,想快速验证陀螺仪能不能正常出数。折腾一圈下来发现,这套组合跟网上大多数教程用的老平台不太一样,寄存器表更新过,CubeMX配置也有几个容易忽略的细节。这篇文章是这个系列的第一篇&…

📰

微信API高可用实践:CompletableFuture异步优化

1. 项目背景与核心挑战微信生态在企业级应用和个人开发者中占据着重要地位,但官方API的稳定性问题一直是开发者面临的痛点。特别是在个人微信自动化场景中,接口超时、网络抖动和频率限制等问题频繁出现,直接影响业务连续性。传统同步阻塞式的…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬