安卓机型固件系统分区的基础组成 手机启动规律初步常识 各分区的基本含义与说明
此贴为基本常识。感兴趣的友友可以了解手机的启动顺序和各模式的基本操作与意义。另外了解手机系统分区各文件夹的含义
分区说明对应贴:安卓机型固件中分区对应说明
手机开机基本启动顺序
当我们按下手机开机键的时候。基本的启动顺序为
注意:该结构图并不反映手机的实际分区顺序和位置,只是一个逻辑结构图。当按下电源键手机上电启动后,首先从bootloader分区中一个固定的地址开始执行指令,bootloader分区分成两个部分,分别叫做primarybootloader和secondarystagebootloader。Primarybootloader主要执行硬件检测,确保硬件能正常工作后将secondarystagebootloader拷贝到内存(RAM)开始执行。Secondarystagebootloader会进行一些硬件初始化工作,获取内存大小信息等,然后根据用户的按键进入到某种启动模式。比如说大家所熟知的通过电源键和其它一些按键的组合,可以进入到recovery,fastboot或者选择启动模式的启动界面等。我们在论坛上看到的bootloader通常指的就是secondarystagebootloader。不过我们不需要关心太多的细节,可以简单的理解为bootloader就是一段启动代码,根据用户按键有选择的进入某种启动模式。
fastboot模式:
fastboot是android定义的一种简单的刷机协议,用户可以通过fastboot命令行工具来进行刷机。比如说fastbootflashbootboot.img这个命令就是把boot.img的内容刷写到boot分区中。一般的手机厂商不直接提供fastboot模式刷机,而是为了显示他们的牛B之处,总是会提供自己专有的刷机工具和刷机方法。比如说三星的Odin,摩托的RSD,华为的粉屏等等。但是其本质实际上是相同的,都是将软件直接flash到各个分区中。目前的机型在fast模式刷机前加了一个bl锁的机制。没有解锁bl的情况下是无法fast模式刷机的.
recovery模式:
当进入recovery模式时,secondarystagebootloader从recovery分区开始启动,recovery分区是一个独立的Linux系统,当recovery分区上的Linux内核启动完毕后,开始执行第一个程序init(init程序是Linux系统所有程序的老祖宗)。init会启动一个叫做recovery的程序(recovery模式的名称也由此而来)。通过recovery程序,用户可以执行清除数据,安装刷机包等操作。一般的手机厂商都提供一个简单的recovery程序,而大名鼎鼎的CWMRecovery就是一个加入了很多增强功能的recovery程序,要想用上CWMRecovery前提是recovery分区可以被刷写。大家在论坛上看到的解锁bootloader,通常指的就是解锁recovery或fastboot,允许刷写recovery分区,这样大家就可以用上喜爱的第三方Recovery了。手机除了普通的CPU芯片以外,
MODEM基带分区
还有MODEM处理器芯片。该芯片的功能就是实现手机必需的通信功能,大家通常所的刷基带分区就是刷写modem分区。目前的机型有些刷机后进不去系统就与基带分区有关。
正常启动当我们只是按下电源键开机时,会进入正常启动模式。手机会从boot分区开始启动。Boot分区的格式是固定的,首先是一个头部,然后是Linux内核,最后是用作根文件系统的ramdisk。当Linux内核启动完毕后,就开始执行根文件系统中的init程序,init程序会读取启动脚本文件(init.rc和init.xxxx.rc)。
System分区基本架构
从上到下依次为:
核心应用层:这一层就是大家平常所接触的各种各样的系统自带应用,比如联系人,电话,音乐等。应用层往下就是开发人员所接触的。
框架层:这一层是Android系统的核心,它提供了整个Android系统运作的机制,像窗口管理,程序安装包管理,开发人员所接触的Activity,Service,broadcast等等。
JNI层:JNI层是Java程序和底层操作系统通信的一个机制,它使得Java代码可以调用C/C++代码来访问底层操作系统的API。
Dalvik虚拟机:Android开发使用Java语言,应用程序的Java代码会被编译成dalvik虚拟机字节码,这些字节码由dalvik虚拟机解释执行。
本地库:本地库一般是由C/C++语言所开发,直接编译成相应CPU的机器码,这其中包含标准C库,用以绘制图形的skia库,浏览器核心引擎webkit等。
从这张软件结构图来看,除了内核是放在boot分区外,其它层的代码都是在system分区中。下面结合这张图来介绍system分区的主要目录内容:
system/app:app目录下存放的是核心应用,也就是大家熟知的系统APP,这些系统自带的程序是不能简单的卸载的,要通过一些特殊的方式才能删除。如果是做rom固件。还要考虑去各种验证才可以顺利开机。
system/lib:lib目录下存放的是组成JNI层,Dalvik虚拟机,本地库,HAL层和厂家适配层的所有动态链接库(.so文件)。
system/framework:该目录下存放的是框架层的JAR包,其中对MIUI移植来说有3个最重要的JAR包(framework.jar,android.policy.jar,services.jar)。
system/fonts:该目录下存放的是系统缺省的字体文件。
system/media:该目录下存放的是系统所使用的各种媒体文件,比如说开机音乐,动画,壁纸文件等。不同的手机该目录的组织方式可能不一样。如何修改这些文件请参考网上对应机型形形色色的教程,这里不再赘叙。
system/bin:该目录下存放的是一些可执行文件,基本上是由C/C++编写的。其中有一个重要的命令叫app_process.
system/xbin:该目录下存放的是一些扩展的可执行文件,既该目录可以为空。大家常用的busybox就放在该目录下。Busybox所建立的各种符号链接命令都是放在该目录。system/build.prop:build.prop和上节说得根文件系统中的default.prop文件格式一样,都称为属性配置文件。它们都定义了一些属性值,代码可以读取或者修改这些属性值。属性值有一些命名规范:ro开头的表示只读属性,即这些属性的值代码是无法修改的。persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留。其它的属性一般以所属的类别开头,这些属性是可读可写的,但是对它们的修改重启之后不会保留。
system/etc:该目录存放一些配置文件,和属性配置文件不一样,这下面的配置文件可能稍微没那么的有规律。一般来说,一些脚本程序,还有大家所熟悉GPS配置文件(gps.conf)和APN配置文件(apns-conf.xml)放在这个目录。像HTC将相机特效所使用的一些文件也放在这个目录下。
data和和和和cache 简单的介绍一下data和cache分区。当我们开机进入桌面程序后,一般来说我们都会下载安装一些APP,这些APP都安装在data/app目录下。所有的Android程序生成的数据基本上都保存在data/data目录下。wipedata实质上就是格式化data分区,这样我们安装的所有APP和程序数据都丢失了。cache分区从名字上来看是用来缓存一些文件的,比如说一些音乐下载的临时文件,或者下载管理下载的内容基本上放在这个分区。
分区文件组成---smali目录
smali目录存放的是反编译后的Java代码,文件名以smali结尾,故称作smali文件。这些代码比一般的Java代码可读性差太多了,但是和传统的x86或者其他体系结构下的汇编文件那又是好读多了。虽然有工具可以直接把这些反汇编成java代码,但是好不了太多,我们还是直接读取修改smali文件。
文件中的以#开头的文字表示注释,以.开头的叫做annotations,其中的.line表示对应的源代码的行号,这个对调试很重要。.metho和.endmethod表示一个方法定义的开始和结束。Smali文件中的这些指令的功能请参照http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html,有过Java编程基础的很容易理解这些指令。
以上只是有些常见的机型分区名称和基本的含义。最新的机型中对有些分区做了调整。但变化不是太大。
关注我 了解安卓常识和一些故障的简单解决方法
相关文章:
安卓机型固件系统分区的基础组成 手机启动规律初步常识 各分区的基本含义与说明
此贴为基本常识。感兴趣的友友可以了解手机的启动顺序和各模式的基本操作与意义。另外了解手机系统分区各文件夹的含义 分区说明对应贴:安卓机型固件中分区对应说明 手机开机基本启动顺序 当我们按下手机开机键的时候。基本的启动顺序为 注意:该结构图…...
php如何把数组元素反转-array_reverse使用要点
在PHP中,你可以使用array_reverse()函数来反转数组的元素顺序。该函数会返回一个新的数组,其中的元素顺序与原始数组相反。 以下是使用array_reverse()函数反转数组的示例代码: <?php $originalArray array(a, b, c, d); $reversedArr…...
【CV学习笔记】tensorrtx-yolov5 逐行代码解析
1、前言 TensorRTx(下文简称为trtx)是一个十分流行的利用API来搭建网络结构实现trt加速的开源库,作者提到为什么不用ONNX parser的方式来进行trt加速,而用最底层的API来搭建trt加速的方式有如下原因: Flexible 很容易修改模型的任意一层,删…...
微信管理系统可以解决什么问题?
微信作为一款社交通讯软件,已经成为人们日常生活中不可缺少的工具。不仅个人,很多企业都用微信来联系客户、维护客户和营销,这自然而然就会有很多微信账号、手机也多,那管理起来就会带来很多的不便,而微信管理系统正好…...
mysql事务测试
mysql的事务处理主要有两种方法1、用begin,rollback,commit来实现 begin; -- 开始一个事务 rollback; -- 事务回滚 commit; -- 事务提交 2、直接用set来改变mysql的自动提交模式 mysql默认是自动提交的,也就是你提交一个sql,它就直接执行!我…...
Spring面试题14:Spring中什么是Spring Beans? 包含哪些?Spring容器提供几种方式配置元数据?Spring中怎样定义类的作用域?
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring中什么是Spring Beans? 包含哪些? 在Spring中,Spring Beans是指由Spring容器管理的对象。Spring Beans包含以下内容: 类定义(Class De…...
Tomcat部署、优化、以及操作练习
一.Tomcat的基本介绍 1.1.Tomcat是什么? Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,T…...
服务器假死日志按时间统计排查
文章目录 场景解决方案排查过程根据cost时间来筛选 场景 服务器假死,进程还在,但是已经接不到请求了。因此有客户报事,发现服务假死了。 解决方案 这种假死问题一般不太好排查,常规来说有几种可能。 1、慢sql导致卡死。 2、大数…...
CSS——grid网格布局的基本使用
网格布局在实现页面自适应,大屏可视化中常常使用,在这篇博客里,记录一下网格布局的基本使用。 参考文档:网格布局_菜鸟教程 文章目录 1. 体会grid的自适应性2. grid-template-arr配置网格行列3. 网格单位fr与repeat()简写属性值4…...
【python】使用Nuitka打包python项目-demo示例
文章目录 写在前面参考准备工作Quick Start参数说明使用打包程序输出目录结构日志2023.09.20 写在前面 本文的demo示例的代码/数据可从笔者的GitCode获取: HelloWorld 参考 Nuitka官网: https://github.com/Nuitka/NuitkaNuitka使用: https://daobook.github.io/nuitka-doc/…...
Java多线程篇(5)——cas和atomic原子类
文章目录 CASAtomic 原子类一般原子类针对aba问题 —— AtomicStampedReference针对大量自旋问题 —— LongAdder CAS 原理大致如下: 在java的 Unsafe 类里封装了一些 cas 的api。以 compareAndSetInt 为例,来看看其底层实现。 可以发现,最…...
数据结构---栈和队列
栈(Stack) 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈࿱…...
2023-9-23 合并果子
题目链接:合并果子 #include <iostream> #include <algorithm> #include <queue>using namespace std;int main() {int n;cin >> n;priority_queue<int, vector<int>, greater<int>> heap;for(int i 0; i < n; i){in…...
基于QT和UDP实现一个实时RTP数据包的接收,并将数据包转化成文件
简单介绍:代码写的比较详细,需要留意的地方看结尾介绍 头文件 #ifndef RTPRECEIVER_H #define RTPRECEIVER_H#include <QDialog> #include <QUdpSocket> #include <QFile> #include <QTextStream> #include <httpclient.h&g…...
云原生安全性:保护现代应用免受威胁
文章目录 引言云原生安全性的挑战云原生安全性的关键实践1. 安全的镜像构建2. 网络策略3. 漏洞扫描和漏洞管理4. 认证和授权5. 日志和监控 云原生安全工具结论 🎉欢迎来到云计算技术应用专栏~云原生安全性:保护现代应用免受威胁 ☆* o(≧▽≦)o *☆嗨~我…...
R语言绘图-3-Circular-barplot图
0. 参考: https://r-graph-gallery.com/web-circular-barplot-with-R-and-ggplot2.html 1. 说明: 利用 ggplot 绘制 环状的条形图 (circular barplot),并且每个条带按照数值大小进行排列。 2 绘图代码: 注意:绘图代码中的字体…...
解决Keil5下载没有对应芯片Flash的问题
问题描述 例如芯片是STM32F103ZET6,但是选项中并没有对应型号的芯片导致下载失败。 解决方法 1、寻找芯片安装包的具体位置,芯片安装包路径在软件安装过程中会有(如图1所示)。如果没有记录可以双击一下芯片安装包会直接提示。…...
深拷贝与浅拷贝(对象的引用)
可以用赋值 1.对象的引用 代码: <!-- 1.对象的引用 --><script>const info{name:"lucy",age:20}const objinfo;info.name"sam"console.log(obj.name) //sam</script>图解: 等于号的赋值,对象info…...
重新认识架构—不只是软件设计
前言 什么是架构? 通常情况下,人们对架构的认知仅限于在软件工程中的定义:架构主要指软件系统的结构设计,比如常见的SOLID准则、DDD架构。一个良好的软件架构可以帮助团队更有效地进行软件开发,降低维护成本࿰…...
我的创业笔记:困境与思索
现在是2023年9月22日傍晚,我一个人走在广州的珠江边,静静地思索着当前个人创业面临的困境,不由自主地想将这些想法记录下来。 故事需要从两个月前说起。2023年7月31号,我从金山办公离职后,就满心欢喜地开启了自己的个…...
minio文件上传
1.代码 大佬仓库:https://gitee.com/Gary2016/minio-upload?_fromgitee_search 关于这个代码的讲解:来自b站 2.准备minio 参考:[1]、[2] 2.1 下载 官网:https://min.io/download#/windows 2.2 启动 ①准备一个data文件夹…...
IDEA .iml文件及.idea文件夹详解
.iml文件 idea 对module 配置信息之意, infomation of module。每个模块都有一个iml文件。 IDEA中的.iml文件是项目标识文件,缺少了这个文件,IDEA就无法识别项目。跟Eclipse的.project文件性质是一样的。并且这些文件不同的设备上的内容也会…...
使用Python做一个微信机器人
介绍 简介 该程序将微信的内部功能提取出来,然后在程序里加载Python,接着将这些功能导出成库函数,就可以在Python里使用这些函数 程序启动的时候会执行py_code目录下的main.py,类似于你在命令行使用python main.py。 现在会以…...
云计算战略:选择适合你业务的云平台
文章目录 云计算的概述选择云平台的关键因素1. 业务需求2. 预算3. 性能要求4. 数据隐私和合规性 示例:选择适合的云平台业务需求预算性能要求数据隐私和合规性 代码示例:使用云平台服务结论 🎉欢迎来到云计算技术应用专栏~云计算战略…...
Python:打印目录下每层的文件总数
代码如下: import osclass FileCount(object):def __init__(self,root_path: str):self.root_path root_pathself._count Noneself._file_count Noneself.children []def get_count(self):if self._count is None:self._count 0self._file_count 0for child_…...
LVS-NAT模式
LVS负载均衡群集 群集的定义 Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。 群集的作用 对于企业服务的的性能提升一般…...
【神印王座】龙皓晨竟然上了头版头条!内容违背,新闻真实性原则
Hello,小伙伴们,我是小郑继续为大家深度解析神印王座国漫。 大家有没有发现,当龙皓晨他们从驱魔关回到圣城时,有这么一幕,一个卖报小孩边走边说:驱魔关大捷,少年英雄龙皓晨操控守护与怜悯之神印王座&#x…...
C++之类和函数权限访问总结(二百二十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
手动部署 OceanBase 集群
手动部署一个 OB 单副本集群,包括一个 OBProxy 节点 部署环境 服务器信息 IP地址 192.168.0.26 网卡名 ifcfg-enp1s0 OS Kylin Linux Advanced Server release V10 CPU 8C 内存 32G 磁盘1 本地盘 /data/1 磁盘2 本地盘 /data/log1 机器和角色划分 …...
【操作系统笔记十二】Linux常用基础命令
Linux 常用快捷键 Tab 命令或路径等的补全键,特别常用的快捷键Ctrl insert 复制命令行内容(常用可提高效率)Shift insert 粘贴命令行内容(常用可提高效率)Ctrl C 中断当前任务(退出)Ctrl Z…...
鞍山建设工程信息网站/网站seo外链
分类:Output id:AutoDoc 描述:这个step,是为一个或者多个转换或者job提供描述性的文档。 这个step呢,可以作为一种手段,自动化的产生文档,用来描述转换或者job的目标; 或者用来供大家…...
河南网站建设/怎样在百度上宣传自己的产品
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid2845 思路:对于一行来说,相邻的数不可同时取,容易得到状态转移方程:sum[i] max (sum[i-2]sum[i], sum[i-1]),其中sum[i]表示一行前i个数时的最大和&a…...
服饰东莞网站建设/站长seo综合查询
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。1、…...
网站后台怎么做/百度风云排行榜
青少年软件编程(图形化)等级考试试卷(二级) 一、单选题(共25题,共50分) 1. 一个骰子,从3个不同角度看过去的点数如图所示,请问5的对面是什么点数?( )...
如何做购物券网站/中国公关公司前十名
继承 1.继承的概念 继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。 继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和…...
网站设计兼职/在线客服系统
https://events.static.linuxfound.org/sites/events/files/slides/lemoal-nvme-polling-vault-2017-final_0.pdf...