system和vendor分区挂载解析(Android O)

2023-11-12

首先我们知道init进程在运行时会调用自身,所以init进程分为stage1和stage2两个阶段,而分区挂载操作也分为两个阶段:

stage1挂载操作是利用device tree中的配置项来读取配置挂载的;stage2挂载操作则是我们常见的利用fstab配置文件来挂载的。

在Android O之后的版本中,我们知道很多ko被从kernel中提取出来,移动到system分区和vendor分区中保存。那么系统启动在服务加载之前首先需要把内核驱动模块全部加载起来才可以,所以我们的system分区和vendor分区必须要先挂载起来。

A/B system

我们知道使能了A/B system的系统,它的rootfs是集成到system.img中的,而kernel的运行必须要依赖rootfs,所以我们需要在很早就要把rootfs挂载起来,实际上UEFI在启动kernel的时候会通过cmdline传入参数告知rootfs所在分区,这样kernel就能够在一启动就可以挂载rootfs,也就是我们的system分区。熟悉嵌入式的应该知道cmdline中有root参数,比如CONFIG_CMDLINE=”root=/dev/mtdblock2…”

而对于vendor分区,由于其中包含很多厂商自己的ko,所以需要在init的stage1进行挂载,那么就需要在devicetree中进行挂载配置,init进程会去解析dtb中的相关信息并挂载对应的分区。

  • rootfs在system.img中,实际上system会被挂载到/目录上

  • system分区挂载信息有uefi通过cmdline传递给kernel,由kernel挂载

  • vendor分区挂载信息在dts中配置,并且有init stage1解析并挂载

Non A/B system

对于非A/B system的系统来说,rootfs是在boot.img中的,而决定rootfs在哪个分区,在android编译系统中有如下宏来决定的

BOARD_BUILD_SYSTEM_ROOT_IMAGE=false

如上所示,这样配置的系统,将会吧ramdisk编译到boot.img中。这样uefi启动时只需要传入boot.img中的ramdisk作为rootfs即可启动kernel。而对于其他非root分区的挂载则有init进程来完成。既然是init来完成,那么就涉及到stage1和stage2两个阶段了。

对于system/vendor这两个分区来说,由于其中包含有很多ko以及selinux配置,所以必须要在stage1完成挂载,然后才能进行后续的服务启动。所以system/vendor的挂载配置需要在devicetree中进行配置。

  • rootfs在boot.img中

  • system分区挂载信息在dts中配置,并且有init stage1解析并挂载

  • vendor分区挂载信息在dts中配置,并且有init stage1解析并挂载

devicetree分区配置

一般来说,我们理解的devicetree中的配置都是给kernel使用的,但是这里需要我们特别注意的是,devicetree中的分区配置并不是给kernel使用的,而是后续由init进程读取挂载分区的。

fstab中的问题

device/qcom/sdm660/fstab_AB_variant.qcom:

 #<src>                                               <mnt_point>        <type>  <mnt_flags and options>                            <fs_mgr_flags>
 /dev/block/bootdevice/by-name/system                    /                  ext4    ro,barrier=1,discard                           wait,slotselect,avb

由前文我们知道,在A/B system中,system挂载到根分区,是由UEFI传入分区配置来挂载的,在non A/B system中,system挂载在/system是由devicetree来配置完成的,无论是否采用A/B system,都不可能在fstab中挂载system分区。那么如上的配置项目为什么还存在与fstab中呢?实际上,在init/fs_mgr的实现中,它会检测并且过滤/目录的挂载,所以上述配置中的第一行实际上是没有起作用的。

备注:使能了A/B system的系统,rootfs都必须要放到system.img中,不管是哪个android版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

system和vendor分区挂载解析(Android O) 的相关文章

  • python 学习笔记06: dict(字典)类型的操作

    usr bin env python3 coding utf 8 Created on Mon Mar 25 22 04 09 2019 author sungang 今天学习python中用数据类型 dict 字典 学习一个类型 最好的办
  • LeetCode 136.只出现一次的数字

    题目描述 给定一个非空整数数组 除了某个元素只出现一次以外 其余每个元素均出现两次 找出那个只出现了一次的元素 说明 你的算法应该具有线性时间复杂度 你可以不使用额外空间来实现吗 示例 1 输入 2 2 1 输出 1 示例 2 输入 4 1
  • 杀毒软件会从哪些方面对计算机进行保护作用(360杀毒软件)

    360杀毒软件介绍 360杀毒软件介绍 360杀毒是360安全中心出品的一款免费的云安全杀毒软件 它创新性地整合了五大领先查杀引擎 包括国际知名的BitDefender病毒查杀引擎 Avira 小红伞 病毒查杀引擎 360云查杀引擎 360
  • 《因果科学周刊》第5期:OOD 泛化

    为了帮助大家更好地了解因果科学的最新科研进展和资讯 我们因果科学社区团队本周整理了第5期 因果科学周刊 推送近期因果科学值得关注的论文和资讯信息 本期的主题是 OOD 泛化 另外在 近期社区活动 专栏 我们将介绍清华副教授崔鹏在 NeurI
  • 借助人工智能,产品文章直接生成字幕视频

    const name 产品文章生成视频 console log name 拍视频不是我的强项 但我发现现在只需要通过AI就可以直接把产品文字变成短视频 省去了剪辑的烦恼 我们来看看文本生成的视频效果预览 为了方便在页面上展示 下面显示的视频
  • 编写程序,输出100以内能够整除7,但不能整除5的数。要求每一行输出6项数据。

    from math import n 0 for i in range 1 101 if i 7 0 and i 5 0 print gt 2d format i end n n 1 if n 6 0 print
  • 反射与注解(详细)

    文章目录 一 注解Annotation 1 什么是注解 2 内置注解 3 元注解 4 自定义注解 二 反射机制 1 静态vs动态语言 动态语言 静态语言 2 java反射机制概述 3 java反射机制研究及应用 反射机制提供的功能 优点 缺
  • 如何判断1024!末尾有多少个0

    分析 方法一 暴力法 简单的方法就是就算出1024 的值 然后判断末尾有多少个0 但是这种方法有两个非常大的缺点 第一算法效率非常低下 第二 当这个数字比较大的时候直接计算阶乘可能会导致数据溢出 从而导致计算结果出现偏差 因此 下面给出另外
  • mysql 按时间降序排序、时间为空的排在前面

    SELECT FROM t task info ORDER BY IF ISNULL end at 0 1 end at ASC
  • web安全--文件上传漏洞实例操作

    1 进入owasp靶机测试环境 进入dvwa login登录名和密码都为admin2 2 进入DVWA Security选择安全级别 首先选择低安全级别 3 进入upload 可以选择右下角的view resource 查看后端源码可以上传
  • SpringBoot入门学习—— 三、项目属性配置

    三 项目属性配置 第一种 application properties 访问http 127 0 0 1 8081 girl hello 第二种 application yml 填写属性需要空格 idea中颜色会变 访问网址 http 12
  • 打不开github

    https blog csdn net qq 41176055 article details 128496628
  • BearPi-HM Micro 鸿蒙应用开发体验

    这是在去年小熊派开发的一款开发板 核心STM32MP157 我之前也花了一些时间来学习开发了一个应用 包含南向各种外设驱动的开发和北向hap APP的开发 最终实现了自己的构想 之前没有时间记录 今天简单记录总结 南向开发功能如下 板载陀螺
  • k8s笔记24--安装metrics-server及错误处理

    k8s笔记24 安装metrics server及错误处理 1 介绍 2 安装 3 常见错误 第一次错误 持续 Failed probe 第二次错误 bad status code 403 Forbidden 4 说明 1 介绍 最近一个同
  • 机器学习课程笔记(一)导论

    符号与名词定义 有监督学习的输入被称作input variables features attributes 有监督学习的输出被称作output variables targets 输入 输出被称作training example inst

随机推荐

  • postgresql常用命令

    环境 Ubuntu 16 04 LTS 数据库版本 9 6 6 注意 PostgreSQL中的不同类型的权限有SELECT INSERT UPDATE DELETE TRUNCATE REFERENCES TRIGGER CREATE CO
  • 一文带你全面深入了解TreeMap

    概述 TreeMap是Map家族中的一员 也是用来存放key value键值对的 平时在工作中使用的可能并不多 它最大的特点是遍历时是有顺序的 根据key的排序规则来 那么它具体是如何使用 又是怎么实现的呢 本文基于jdk8做一个讲解 Tr
  • 3、选择判断语句、循环语句

    选择判断 单分支选择判断 if 语法 if 条件语句 执行语句 可以有多条执行语句 简体 if 条件语句 单条执行语句 如果条件语句后面没有大括号 则条件语句所控制的执行语句只能有一条 双分支选择判断 if else 语法 if 条件语句
  • 文件(file)和流(stream)的联系和区别

    文件 File 和流 Stream 是既有区别又有联系的两个概念 文件是计算机管理数据的基本单位 同时也是应用程序保存和读取数据的一个重要场所 存储介质 文件是指在各种存储介质上 如硬盘 可移动磁盘 CD等 永久存储的数据的有序集合 它是进
  • 2023蓝桥杯c/c++省赛B组题目(最全版):

    目录 A 日期统计 B 01 串的熵 C 冶炼金属 D 飞机降落 E 接龙数列 F 岛屿个数 G 子串简写 H 整数删除 I 景区导游 J 砍树 A 日期统计 B 01 串的熵 用Excel做比较方便 让我看看有谁 哈哈哈哈哈 答案当然就是
  • 力扣算法——简单题 回文数(Java解法)

    题目描述 判断一个整数是否是回文数 回文数是指正序 从左向右 和倒序 从右向左 读都是一样的整数 例如 121 13431 是回文数返回true 不是则返回false 解题思路 首先可以排除负数 比如 2332 从左向右读 为 2332 从
  • 一. SpringCloud Alibaba Sentinel 基础使用示例

    目录 一 基础解释 Sentinel 下载启动 二 Sentinel 使用示例 创建被 Sentinel 监管的服务 一 基础解释 github sentinel 中文版 SpringCloud Alibaba Sentinel 分布式系统
  • SQL Server(数据管理之增删查改)

    一 代码单词 二 先系统敲一个表 好了后代码全选 点击执行 当下面弹出命令已完成 就表示表建好了 三 在表中增加数据 增加方法 选中增加代码 执行 这里报错是因为sid 学生学号 在创建表的时候设置了自增 identity 所有不能给sid
  • 程序员如何利用chatGPT提高开发效率

    对于编程人员来说了解 ChatGPT 是很有帮助的 因为它是一个自然语言处理模型 可以用于处理各种文本任务 例如生成代码注释 代码自动补全 错误检测和纠正 问题回答等等 通过利用 ChatGPT 程序员可以更快速地生成代码 更准确地理解和回
  • 7-45 海选高大中锋

    HDU篮球队需要一个高大中锋 只要个子高 不会打球没关系 请你从n个候选人找出个子最高的 输入格式 第1行包含一个整数n 表示人数 第2行包含n个实数 表示n个人的身高 输出格式 包含一个实数 表示最高的人的身高 小数点保留2位 输入样例
  • Unity3D接入Android第三方SDK流程

    目录 一 SDK调用Unity3D 二 Unity3D调用SDK 1 在Unity中新建一个脚本 调用MySDkPlatform中的方法 四 打包 1 方式一 SDK打成plugins给Unity unity版 2 方式二 Unity导出安
  • 锁定文件失败 打不开磁盘“E:\HP02\HP01-cl1.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未能启动虚拟机

    解决办法 将框内文件删除
  • Entity Framework Core系列教程-5-第一个应用程序

    第一个EF Core控制台应用程序 在这里 您将逐步学习如何将Entity Framework Core与Code First方法结合使用 为了演示这一点 我们将使用Visual Studio 2019创建一个 NET Core Conso
  • iMX6ULL学习(二)

    文章目录 Makefile机制规则 一 通配符 二 PHONY假想目标 三 即时变量和延迟变量 四 make函数 foreach VAR LIST TEXT filter out PATTERN TEXT filter out patter
  • 如何根据利用企业微信机器人群自动推送消息

    如何根据利用企业微信机器人群自动推送消息 1 自动推送文字 消息 艾特所有人或指定人等等 import request 发起https requests请求 url 此处填入自己创建的企业微信机器人的url def bot txt url
  • Unix 时间戳(stm32实现解析与转换)

    1 什么是Unix时间戳 Unix时间戳是从1970年1月1日 UTC GMT的午夜 开始所经过的秒数 不考虑闰秒 1 Unix时间戳 英文为Unix epoch Unix time POSIX time 或 Unix timestamp
  • 轻松理解HTTP协议

    一起深入了解http和https协议吧 了解http协议 1 http是什么 2 认识URL 2 1URL 2 2urlencode和urldecode 3 http传输格式 3 1http请求 3 2http响应 4 http请求方法 4
  • ftp将网站发布到服务器,ftp工具将网站上传到服务器

    ftp工具将网站上传到服务器 内容精选 换一换 支持将华为云服务器上的音视频文件通过内网方式上传到与服务器在同一区域的视频点播服务中 但您需要先将服务器当前使用的DNS切换为华为云的内网DNS 具体请参见怎样切换内网DNS 然后使用视频点播
  • 二分查找法和顺序查找法

    二分查找1 二分查找 Binary Search 二分查找又称折半查找 它是一种效率较高的查找方法 二分查找要求 线性表是有序表 即表中结点按关键字有序 并且要用向量作为表的存储结构 不妨设有序表是递增有序的 2 二分查找的基本思想 二分查
  • system和vendor分区挂载解析(Android O)

    首先我们知道init进程在运行时会调用自身 所以init进程分为stage1和stage2两个阶段 而分区挂载操作也分为两个阶段 stage1挂载操作是利用device tree中的配置项来读取配置挂载的 stage2挂载操作则是我们常见的