super分区作用(Android Q动态分区super.img相关说明 解包super.img)

:暂无数据 2026-08-21 23:40:12 0

super分区作用(Android Q动态分区super.img相关说明 解包super.img)

本篇文章给大家谈谈super分区作用,以及Android Q动态分区super.img相关说明 解包super.img对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

Android Q动态分区super.img相关说明 解包super.img

Android 10上刷机使用了super.img,差分包多了dynamic_partitions_op_list,大致查询了下是新增了动态分区,从编译到生成差分包都做了一些修改,本次先整理大致分析,对这个更新点有初步的认识
一、编译方面

1.super.img的生成

通过编译的log可以看到,super.img的生成
make

build/make/core/Makefile

# If BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT is set, super.img is built from images in the

# $(PRODUCT_OUT) directory, and is built to $(PRODUCT_OUT)/super.img. Also, it will

# be built for non-dist builds. This is useful for devices that uses super.img directly, e.g.

# virtual devices.

ifeq (true,$(BOARD_BUILD_SUPER_IMAGE_BY_DEFAULT))

$(INSTALLED_SUPERIMAGE_TARGET): $(INSTALLED_SUPERIMAGE_DEPENDENCIES)

$(call pretty,"Target super fs image for debug: $@")

$(call build-superimage-target,$(INSTALLED_SUPERIMAGE_TARGET),\

$(call intermediates-dir-for,PACKAGING,superimage_debug)/misc_info.txt)

编译log

Target super fs image for debug: out/target/product/k61v1_64_bsp/super.img

2020-01-06 16:14:22 - build_super_image.py - INFO    : Building super image from info dict...

2020-01-06 16:14:22 - sparse_img.py - INFO    : Total of 370303 4096-byte output blocks in 21 input chunks.

2020-01-06 16:14:22 - sparse_img.py - INFO    : Total of 383438 4096-byte output blocks in 19 input chunks.

2020-01-06 16:14:22 - sparse_img.py - INFO    : Total of 83534 4096-byte output blocks in 11 input chunks.

2020-01-06 16:14:22 - common.py - INFO    :   Running: "lpmake --metadata-size 65536 --super-name super --metadata-slots 2 --device super:4294967296 --group main:4292870144 --partition product:readonly:1516761088:main --image product=out/target/product/k61v1_64_bsp/product.img --partition system:readonly:1570562048:main --image system=out/target/product/k61v1_64_bsp/system.img --partition vendor:readonly:342155264:main --image vendor=out/target/product/k61v1_64_bsp/vendor.img --sparse --output out/target/product/k61v1_64_bsp/super.img"

2020-01-06 16:15:34 - common.py - INFO    : lpmake I 01-06 16:14:22   697   697 builder.cpp:937] Partition product will resize from 0 bytes to 1516761088 bytes

lpmake I 01-06 16:14:22   697   697 builder.cpp:937] Partition system will resize from 0 bytes to 1570562048 bytes

lpmake I 01-06 16:14:22   697   697 builder.cpp:937] Partition vendor will resize from 0 bytes to 342155264 bytes

2020-01-06 16:15:34 - build_super_image.py - INFO    : Done writing image out/target/product/k61v1_64_bsp/super.img

make otapackage

build/make/core/Makefile

ifeq (true,$(PRODUCT_BUILD_SUPER_PARTITION))

ifneq ($(BOARD_SUPER_PARTITION_SIZE),)

ifneq (true,$(PRODUCT_RETROFIT_DYNAMIC_PARTITIONS))

$(call build-superimage-target,$(INSTALLED_SUPERIMAGE_TARGET),\

$(call intermediates-dir-for,PACKAGING,superimage_debug)/misc_info.txt)

endif

endif

endif

build/make/core/Makefile

# Build super.img by using $(INSTALLED_*IMAGE_TARGET) to $(1)

# $(1): built image path

# $(2): misc_info.txt path; its contents should match expectation of build_super_image.py

define build-superimage-target

mkdir -p $(dir $(2))

rm -rf $(2)

$(call dump-super-image-info,$(2))

$(foreach p,$(BOARD_SUPER_PARTITION_PARTITION_LIST), \

echo "$(p)_image=$(INSTALLED_$(call to-upper,$(p))IMAGE_TARGET)" 》》 $(2);)

mkdir -p $(dir $(1))

PATH=$(dir $(LPMAKE)):$$PATH \

$(BUILD_SUPER_IMAGE) -v $(2) $(1)

endef

编译log

2020-01-06 10:53:23 - build_super_image.py - INFO    : Building super image from info dict...

2020-01-06 10:53:23 - sparse_img.py - INFO    : Total of 370303 4096-byte output blocks in 21 input chunks.

2020-01-06 10:53:23 - sparse_img.py - INFO    : Total of 385033 4096-byte output blocks in 19 input chunks.

2020-01-06 10:53:23 - sparse_img.py - INFO    : Total of 83534 4096-byte output blocks in 11 input chunks.

2020-01-06 10:53:23 - common.py - INFO    :   Running: "lpmake --metadata-size 65536 --super-name super --metadata-slots 2 --device super:4294967296 --group main:4292870144 --partition product:readonly:1516761088:main --image product=out/target/product/k61v1_64_bsp/product.img --partition system:readonly:1577095168:main --image system=out/target/product/k61v1_64_bsp/system.img --partition vendor:readonly:342155264:main --image vendor=out/target/product/k61v1_64_bsp/vendor.img --sparse --output out/target/product/k61v1_64_bsp/super.img"

2020-01-06 10:54:27 - common.py - INFO    : lpmake I 01-06 10:53:23  4178  4178 builder.cpp:937] Partition product will resize from 0 bytes to 1516761088 bytes

lpmake I 01-06 10:53:23  4178  4178 builder.cpp:937] Partition system will resize from 0 bytes to 1577095168 bytes

lpmake I 01-06 10:53:23  4178  4178 builder.cpp:937] Partition vendor will resize from 0 bytes to 342155264 bytes

2020-01-06 10:54:27 - build_super_image.py - INFO    : Done writing image out/target/product/k61v1_64_bsp/super.img

Package OTA: out/target/product/k61v1_64_bsp/full_k61v1_64_bsp-ota-mp1V6.zip

可以看出super.img的生成是使用build_super_image.py,传入了参数信息文件misc_info.txt

out/target/product/k61v1_64_bsp/obj/PACKAGING/superimage_debug_intermediates

use_dynamic_partitions=true

lpmake=lpmake

build_super_partition=true

super_metadata_device=super

super_block_devices=super

super_super_device_size=4294967296

dynamic_partition_list= product system vendor

super_partition_groups=main

super_main_group_size=4292870144

super_main_partition_list=product system vendor

super_image_in_update_package=true

product_image=out/target/product/k61v1_64_bsp/product.img

system_image=out/target/product/k61v1_64_bsp/system.img

vendor_image=out/target/product/k61v1_64_bsp/vendor.img

通过这里的参数可以了解到大概的信息

lpmake=lpmake

编译super.img可执行文件 目录host

dynamic_partition_list= product system vendor

super包含了product system vendor三个分区
那在super.img是怎么放的呢,解开看看就知道了

2.super.img的解包

super的解包需要工具lpunpack,但是默认没有编译,源码目录位于:system/extras/partition_tools/

直接 make lpunpack 之后会生成out/host/linux-86/lpunpack

首先我编译出super.img 首先确认是什么格式的 根据其他问题刷机的格式,我觉得这个是sparse格式

执行 file super.img 后还真是,所以。。。

第一步格式转换,转化为ext4

simg2img super.img super_ext4.img

第二步

创建目录super_ext4/ 存放解包后的文件

第三步

执行解包 out/host/linux-86/lpunpack       super_ext4.img   super_ext4/

解包后在super_ext4/存放着是哪个完整的system.img vendor.img product.img 是ext4格式的,也可以通过mount挂载为文件目录

simg2imgsuper.img super_ext4.img

mkdir super_ext4

./lpunpack super_ext4.img super_ext4/

mkdir super_ext4/system/

./ext2rd super_ext4/system.img ./:super_ext4/system/

二、差分方面

1、整包

这里首先对于dynamic_partitions_op_list的生成进行确认
build/make/toos/releasetools/common.py

def _Compute(self):

self._op_list = list()

def append(line):

self._op_list.append(line)

def comment(line):

self._op_list.append("# %s" % line)

if self._remove_all_before_apply:

comment(’Remove all existing dynamic partitions and groups before ’

’applying full OTA’)

append(’remove_all_groups’)

for p, u in self._partition_updates.items():

if u.src_group and not u.tgt_group:

append(’remove %s’ % p)

for p, u in self._partition_updates.items():

if u.src_group and u.tgt_group and u.src_group != u.tgt_group:

comment(’Move partition %s from %s to default’ % (p, u.src_group))

append(’move %s default’ % p)

for p, u in self._partition_updates.items():

if u.src_size and u.tgt_size and u.src_size 》 u.tgt_size:

comment(’Shrink partition %s from %d to %d’ %

(p, u.src_size, u.tgt_size))

append(’resize %s %s’ % (p, u.tgt_size))

for g, u in self._group_updates.items():

if u.src_size is not None and u.tgt_size is None:

append(’remove_group %s’ % g)

if (u.src_size is not None and u.tgt_size is not None and

u.src_size 》 u.tgt_size):

comment(’Shrink group %s from %d to %d’ % (g, u.src_size, u.tgt_size))

append(’resize_group %s %d’ % (g, u.tgt_size))

for g, u in self._group_updates.items():

if u.src_size is None and u.tgt_size is not None:

comment(’Add group %s with maximum size %d’ % (g, u.tgt_size))

append(’add_group %s %d’ % (g, u.tgt_size))

if (u.src_size is not None and u.tgt_size is not None and

u.src_size 《 u.tgt_size):

comment(’Grow group %s from %d to %d’ % (g, u.src_size, u.tgt_size))

append(’resize_group %s %d’ % (g, u.tgt_size))

for p, u in self._partition_updates.items():

if u.tgt_group and not u.src_group:

comment(’Add partition %s to group %s’ % (p, u.tgt_group))

append(’add %s %s’ % (p, u.tgt_group))

for p, u in self._partition_updates.items():

if u.tgt_size and u.src_size 《 u.tgt_size:

comment(’Grow partition %s from %d to %d’ % (p, u.src_size, u.tgt_size))

append(’resize %s %d’ % (p, u.tgt_size))

for p, u in self._partition_updates.items():

if u.src_group and u.tgt_group and u.src_group != u.tgt_group:

comment(’Move partition %s from default to %s’ %

(p, u.tgt_group))

append(’move %s %s’ % (p, u.tgt_group))

对比整包中的dynamic_partitions_op_list
# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Remove all existing dynamic partitions and groups before applying full OTA

remove_all_groups

# Add group main with maximum size 4292870144

add_group main 4292870144

# Add partition product to group main

add product main

# Add partition vendor to group main

add vendor main

# Add partition system to group main

add system main

# Grow partition product from 0 to 1516761088

resize product 1516761088

# Grow partition vendor from 0 to 342155264

resize vendor 342155264

# Grow partition system from 0 to 1158651904

resize system 1158651904

可以看出执行该文件在整包中的大致顺序:

1、移除所有的组,清空super

2、添加组

3、添加system product vendor组

4、添加分区并给到大小
那么通过整包中的语句,我们可以大致推出差分包执行流程,我做了几个包进行了验证

2、差分包

更新较少,只修改版本号

dynamic_partitions_op_list为空
新增大文件 对system分区重新划分大小

# Grow partition system from 1158651904 to 1577095168

resize system 1577095168
去除大文件 对system分区重新划分大小

# Shrink partition system from 1577095168 to 1158651904

resize system 1158651904
其实还有其他情况,既然整包可以删除添加组,那么差分包也可以进行这样的处理,不过目前对于我们常见的应该时这三种

大致相关就是这些,先对动态分区OTA有个了解,后面再进行详细整理

为Llinux系统添加交换分区的方法

swap空间感觉上就是linux的虚拟内存么,当内存不够的时候通过一定的技术手段把当物理内存不够大的时候 把物理内存里的一些很长时间不用的东西暂时存放在这段空间里 然后空出来一些内存供程序使用。

添加的方法很简单

首先需要superuser身份(命令前加sudo 或者 sudo su -)

首先 sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。

在这里我们创建了一个1G大小的空文件(bs表示每次写1024bit, 总共写1048576次)

然后我们吧这个文件设置为交换文件

sudo mkswap /swapfile

这里是mkswap命令的参数,需要的可以加上

-c 建立交换区前,先检查是否有损坏的区块。

-f 在SPARC电脑上建立交换区时,要加上此参数。

-v0 建立旧式交换区,此为预设值。

-v1 建立新式交换区。

然后

sudo swapon /swapfile

开启交换分区即可。

这事使用

sudo swapon -s 来查看,如果出现

/swapfile file10485720-1

说明设置成功。

安卓手机root权限获取的工作原理是什么

首先明白几点

1. su是一个elf可执行文件,superUser是用来和su配合的root授权管理软件。

2. 要执行su(其他程序获取root权限默认执行su)必须将su放在系统环境变量里,bin和xbin目录,其他地方你需要加全路径

3. bin和xbin目录在system分区,默认只读,所以要写入su必须重新挂在该分区为可写

知道这些再说如何root

1. 通过漏洞将自己进程提权到root权限,具体做法要去了解漏洞利用原理

2. 进程获取root权限后重新挂载system分区可读写

3. 然后将su拷贝到bin目录或者xbin目录,由于su的所有者提权进程已经是root进程,所以su也具有root属性。然后设置su文件755属性,即所有者可读可写可执行,所在组和其他用户可读可执行,同时为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限,所以需要设置s标志位,即其他评论提到的chmod 4755 su,superuser拷贝system目录并安装,放在system目录下作为系统应用,防用户删除

4. 这样其他程序调用su以后,先要经过superuser同意,用户点同意后,由于su拥有者为root所以其进程也拥有root权限,相应的它执行的命令也都是有root权限, 详细的做法可去github搜su源码阅读,最后执行的一句`execv(ctx-》to.shell, ctx-》to.argv + argc);`通过验证后将su进程直接替换成需要执行的命令

如果你还想了解更多这方面的信息,记得收藏关注本站。

super分区作用(Android Q动态分区super.img相关说明 解包super.img)

本文编辑:admin

更多文章:


全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

大家好,关于全球新冠肺炎疫情背景下航运发展很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决

2026年9月7日 17:10

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

大家好,关于matlab求解带字母参数方程组很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数的知识点,相信应该可以解决大家的一些困惑和问题,

2026年9月7日 16:30

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

本篇文章给大家谈谈oracle中的循环语句,以及下面哪个不是oracle程序设计中的循环语句 a for对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月7日 15:30

多表查询怎么做(Excel技巧:如何多表同步筛选)

多表查询怎么做(Excel技巧:如何多表同步筛选)

各位老铁们好,相信很多人对多表查询怎么做都不是特别的了解,因此呢,今天就来为大家分享下关于多表查询怎么做以及Excel技巧:如何多表同步筛选的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 15:10

服装店网站网页设计(服装网站建设目标设计要看甲方)

服装店网站网页设计(服装网站建设目标设计要看甲方)

“服装店网站网页设计”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看服装店网站网页设计(服装网站建设目标设计要看甲方)!

2026年9月7日 14:10

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

大家好,电脑里2个系统怎么删除一个相信很多的网友都不是很明白,包括电脑开机显示有两个系统,如何删除一个也是一样,不过没有关系,接下来就来为大家分享关于电脑里2个系统怎么删除一个和电脑开机显示有两个系统,如何删除一个的一些知识点,大家可以关注

2026年9月7日 12:20

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

大家好,今天小编来为大家解答以下的问题,关于苹果手机代码大全,恢复更新固件iOS未知错误代码解决大全这个很多人还不知道,现在让我们一起来看看吧!

2026年9月7日 10:20

scrollthrough意思(“scroll”是什么意思)

scrollthrough意思(“scroll”是什么意思)

今天给各位分享“scroll”是什么意思的知识,其中也会对“scroll”是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月7日 08:00

怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)

怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)

本篇文章给大家谈谈怎么激活keygen,以及注册机如何激活cad2008一个简单激活cad2008的方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站

2026年9月7日 06:30

vba编写excel插件(excel vba中能否动态创建控件)

vba编写excel插件(excel vba中能否动态创建控件)

其实vba编写excel插件的问题并不复杂,但是又很多的朋友都不太了解excel vba中能否动态创建控件,因此呢,今天小编就来为大家分享vba编写excel插件的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年9月7日 04:40

最近更新

oppo1+9r(oppo oneplus9r后盖怎么打开)
2026-09-07 18:10:01 浏览:0
人头马xo酒(人头马xo酒一瓶多少钱)
2026-09-07 17:30:03 浏览:0
热门文章

dessert(dessert是什么意思)
2026-05-03 12:45:03 浏览:7
标签列表