Android实战经验篇-增加系统分区

系列文章转如下链接:

Android Display Graphics系列文章-汇总

Android实战经验篇-系列文章汇总

本文主要包括部分:

一、Android分区说明

1.1 系统分区查看

1.2 分区表修改

1.3 验证新分区

二、源码修改

2.1 generate_extra_images

2.2 fstab

2.3 file_contexts等

Android 系统上添加新的可挂载分区,包括如何修改分区表和 Android 源码及如何验证新分区。本操作经验在Android13、Android14上已验证。

一、Android分区说明

1.1 系统分区查看

从设备端看,一般用df -h 可以查看各分区的情况, 使用mount查看各分区的挂载情况。

例如以下是基线代码原始分区情况

lahaina:/ # df -h
Filesystem       Size Used Avail Use% Mounted on
tmpfs            3.5G 1.7M  3.5G   1% /dev
tmpfs            3.5G    0  3.5G   0% /mnt
/dev/block/sda9   11M 196K   11M   2% /metadata
/dev/block/dm-2  0.9G 998M  3.0M 100% /
/dev/block/dm-5  3.1G 309M  2.8G  10% /mnt/scratch
overlay          3.1G 309M  2.8G  10% /system
overlay          3.1G 309M  2.8G  10% /system_ext
overlay          3.1G 309M  2.8G  10% /product
overlay          3.1G 309M  2.8G  10% /vendor
overlay          3.1G 309M  2.8G  10% /odm
tmpfs            3.5G  12K  3.5G   1% /apex
tmpfs            3.5G 488K  3.5G   1% /linkerconfig
/dev/block/sdf8   27M 1.7M   25M   7% /mnt/vendor/persist
/dev/block/sdg1  220M 163M   57M  75% /vendor/firmware_mnt
/dev/block/sdg5   59M  31M   28M  52% /vendor/dsp
/dev/block/sdf9   64M 2.6M   61M   5% /vendor/bt_firmware
/dev/block/sdg17  30M    0   30M   0% /mnt/vendor/qmcs
/dev/block/dm-6  101G 7.6G   94G   8% /data
tmpfs            3.5G    0  3.5G   0% /data_mirror
/dev/fuse        101G 7.6G   94G   8% /mnt/user/0/emulated

1.2 分区表修改

Qcom的分区表一般位于解包工具的common/config/目录下,例如partition_ext_ddm.xml 位于对应版本的工具包的common/config/ufs 路径下。

如果新增一个4194304KB(4096MB)的new分区,需要在partition_ext_ddm.xml中修改如下。Xml中分区表的配置

<!-- This is LUN 0 - HLOS LUN" -->
<physical_partition><partition label="misc" size_in_kb="1024" type="82ACC91F-357C-4A68-9C8F-689E1B1A23A1" bootable="false" readonly="false" filename="" /><partition label="new" size_in_kb="4194304" type="88036CD5-03D5-42BB-8ED1-37E5A88BAA45" bootable="false" readonly="false" filename="new.img" /><partition label="metadata" size_in_kb="16384" type=" 988A98C9-2910-4123-AAEC-1CF6B1BC28F9" bootable="false" readonly="false" filename="metadata.img" sparse="true"/><partition label="vbmeta_system_a" size_in_kb="64" type="1344859D-3A6A-4C14-A316-9E696B3A5400" bootable="false" readonly="true" filename="vbmeta_system.img"/><partition label="vbmeta_system_b" size_in_kb="64" type="FE3AB853-5B66-4D4A-BF85-8D90AF1C2C4A" bootable="false" readonly="true" filename="vbmeta_system.img"/><partition label="teedata" size_in_kb="16384" type="4A5DE742-745E-4FDD-BFD8-B6A7AC638772" bootable="false" readonly="false" filename="" /><partition label="super" size_in_kb="3276800" type="89A12DE1-5E41-4CB3-8B4C-B1441EB5DA38" bootable="false" readonly="false" filename="super.img" sparse="true"/>
</physical_partition>

分区表参数描述

参数

描述

label

标签,表示分区名称。

size_in_kb

分区大小,单位:KB

type

分区类型。每个分区对应的值不同,用户设置时可自行修改,修改时长

度与其他分区保持一致且有别于其他分区 type 值即可。

bootable

分区是否可启动。建议将其设置为 false。

false:不可启动

true:可启动

readonly

分区的可读写性,取值如下:

false:可读写分区

true:只读分区

filename

镜像文件。用于设置在使用 QFIL 工具下载时是否需要下载该镜像文件。

若不需要下载,设置为空即可。

sparse

打包过程中是否拆分分区镜像。

true:拆分

false:不拆分

说明:这里把new分区添加到了misc 和metadata之间,在super之前,可以避免后续因为super变动影响到这个分区。

1.3 验证新分区

Windows 下执行如下 ADB 命令验证分区是否添加成功:

adb shell 
su 
ls -al dev/block/by-name/ | grep new

若出现如下图所示 new 分区,表示分区添加成功:

lahaina:/ # ls -al dev/block/by-name/ | grep new
lrwxrwxrwx 1 root root   15 1970-01-03 07:22 new -> /dev/block/sda9

执行如下命令验证已添加分区是否正常挂载:

adb shell 
su 
mount | grep new 

若命令 mount 后显示有内容,则表示分区挂载成功。从该命令行回显的内容中可以看到,新分区 new 挂载在/mnt/vendor/new 目录下

lahaina:/ # mount | grep new
/dev/block/sda9 on /mnt/vendor/new type ext4 (rw,seclabel,nosuid,nodev,noatime)

执行如下命令检查新分区是否具有所需操作权限:

adb shell //执行 adb 命令进入设备 
su    //获取 su 权限 
cd mnt/vendor/new //进入挂载路径 
touch new.txt    //创建 new 文件(表示具有创建文件的权限) 
mkdir new   //创建 new 文件夹(表示具有创建文件夹的权限) 
ls -al     //查看 new 文件和 new 文件夹是否创建成功 
rm -rf *   //删除此目录下的所有内容(表示具有删除权限) 
ls -al      //查看是否删除成功

二、源码修改

2.1 generate_extra_images

修改target_ap/device/qcom/common/generate_extra_images.mk文件,在编译时生成new.img

+++ b/UM.9.14/device/qcom/common/generate_extra_images.mk
@@ -99,6 +99,36 @@ metadataimage: $(INSTALLED_METADATAIMAGE_TARGET)endif+ifneq ($(strip $(BOARD_NEWIMAGE_PARTITION_SIZE)),)
+
+TARGET_OUT_NEW := $(PRODUCT_OUT)/new
+
+INSTALLED_NEWIMAGE_TARGET := $(PRODUCT_OUT)/new.img
+
+define build-newimage-target
+    $(call pretty,"Target new fs image: $(INSTALLED_NEWIMAGE_TARGET)")
+    @mkdir -p $(TARGET_OUT_NEW)
+    $(hide)PATH=$(HOST_OUT_EXECUTABLES):$${PATH} $(MKEXTUSERIMG) $(TARGET_OUT_NEW) $@ ext4 new $(BOARD_NEWIMAGE_PARTITION_SIZE)
+    $(hide) chmod a+r $@
+    $(hide) $(call assert-max-image-size,$(INSTALLED_NEWIMAGE_TARGET),$(BOARD_NEWIMAGE_PARTITION_SIZE))
+endef
+#$(hide) $(call assert-max-image-size,$(INSTALLED_NEWIMAGE_TARGET),$(BOARD_NEWIMAGE_PARTITION_SIZE))
+#$(hide)PATH=$(HOST_OUT_EXECUTABLES):$${PATH} $(MKEXTUSERIMG) -s $(TARGET_OUT_NEW) $@ ext4 new $(BOARD_NEWIMAGE_PARTITION_SIZE)
+
+#$(INSTALLED_NEWIMAGE_TARGET): $(MKEXTUSERIMG) $(MAKE_EXT4FS)
+#	$(build-newimage-target)
+$(INSTALLED_NEWIMAGE_TARGET): $(MKEXTUSERIMG) $(MAKE_EXT4FS)
+	$(build-newimage-target)
+
+ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_NEWIMAGE_TARGET)
+ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_NEWIMAGE_TARGET)
+droidcore: $(INSTALLED_NEWIMAGE_TARGET)
+
+.PHONY: newimage
+newimage: $(INSTALLED_NEWIMAGE_TARGET)
+
+endif

2.2 fstab

修改fstab,使init在挂载分区时,可以挂载new分区,并挂载到/mnt/vendor/new路径下。

 /dev/block/bootdevice/by-name/persist                   /mnt/vendor/persist    ext4    noatime,nosuid,nodev,barrier=1                       wait
+/dev/block/bootdevice/by-name/new                       /mnt/vendor/new        ext4    noatime,nosuid,nodev,barrier=1  

2.3 file_contexts等

修改init.rc 使其创建 /mnt/vendor/new/路径并restorecon此路径。

   在target_ap/device/qcom/sepolicy_vndr/qva/vendor/lahaina/file_contexts 文件中增加设备的context;

注意:这里的/dev/block/platform/soc/4744000.sdhci  具体路径要根据自己项目来。

例如:

 /(vendor|system/vendor)/bin/qwesd                                                  u:object_r:vendor_qwesd_exec:s0
+/dev/block/platform/soc/4744000.sdhci/by-name/new                                  u:object_r:vendor_persist_block_device:s0

详细patch修改见如下链接:

Android Display Graphics系列文章-汇总

Android实战经验篇-系列文章汇总

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云下架印度云服务器节点,印度云服务器租用何去何从

近日&#xff0c;腾讯云下架印度云服务器节点的消息引起了业界的广泛关注。这一变动让许多依赖印度云服务器的用户开始担忧&#xff0c;印度云服务器租用的未来究竟在何方&#xff1f; 从印度市场本身来看&#xff0c;其云服务市场的潜力不容小觑。据 IDC 报告&#xff0c;到 2…

【RTSP】使用webrtc播放rtsp视频流

一、简介 rtsp流一般是监控、摄像机的实时视频流,现在的主流浏览器是不支持播放rtsp流文件的,所以需要借助其他方案来播放实时视频,下面介绍下我采用的webrtc方案,实测可行。 二、webrtc-streamer是什么? webrtc-streamer是一个使用简单机制通过 WebRTC 流式传输视频捕获…

多并发发短信处理(头条项目-07)

1 pipeline操作 Redis数据库 Redis 的 C/S 架构&#xff1a; 基于客户端-服务端模型以及请求/响应协议的 TCP服务。客户端向服务端发送⼀个查询请求&#xff0c;并监听Socket返回。通常是以 阻塞模式&#xff0c;等待服务端响应。服务端处理命令&#xff0c;并将结果返回给客…

【网络协议】动态路由协议

前言 本文将概述动态路由协议&#xff0c;定义其概念&#xff0c;并了解其与静态路由的区别。同时将讨论动态路由协议相较于静态路由的优势&#xff0c;学习动态路由协议的不同类别以及无类别&#xff08;classless&#xff09;和有类别&#xff08;classful&#xff09;的特性…

c#集成npoi根据excel模板导出excel

NuGet中安装npoi 创建excel模板&#xff0c;替换其中的内容生成新的excel文件。 例子中主要写了这四种情况&#xff1a; 1、替换单个单元格内容&#xff1b; 2、替换横向多个单元格&#xff1b; 3、替换表格&#xff1b; 4、单元格中插入图片&#xff1b; using System.IO; …

人工智能知识分享第十天-机器学习_聚类算法

聚类算法 1 聚类算法简介 1.1 聚类算法介绍 一种典型的无监督学习算法&#xff0c;主要用于将相似的样本自动归到一个类别中。 目的是将数据集中的对象分成多个簇&#xff08;Cluster&#xff09;&#xff0c;使得同一簇内的对象相似度较高&#xff0c;而不同簇之间的对象相…

B树及其Java实现详解

文章目录 B树及其Java实现详解一、引言二、B树的结构与性质1、节点结构2、性质 三、B树的操作1、插入操作1.1、插入过程 2、删除操作2.1、删除过程 3、搜索操作 四、B树的Java实现1、节点类实现2、B树类实现 五、使用示例六、总结 B树及其Java实现详解 一、引言 B树是一种多路…

本地缓存:Guava Cache

这里写目录标题 一、范例二、应用场景三、加载1、CacheLoader2、Callable3、显式插入 四、过期策略1、基于容量的过期策略2、基于时间的过期策略3、基于引用的过期策略 五、显示清除六、移除监听器六、清理什么时候发生七、刷新八、支持更新锁定能力 一、范例 LoadingCache<…

【高录用 | 快见刊 | 快检索】第十届社会科学与经济发展国际学术会议 (ICSSED 2025)

第十届社会科学与经济发展国际学术会议(ICSSED 2025)定于2025年2月28日-3月2日在中国上海隆重举行。会议主要围绕社会科学与经济发展等研究领域展开讨论。会议旨在为从事社会科学与经济发展研究的专家学者提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff…

[ComfyUI]接入Google的Whisk,巨物融合玩法介绍

一、介紹​ 前段时间&#xff0c;谷歌推出了一个图像生成工具whisk&#xff0c;有一个很好玩的图片融合玩法&#xff0c;分别提供三张图片,就可以任何组合来生成图片。​ ​ 最近我发现有人开发了对应的ComfyUI插件&#xff0c;对whisk做了支持&#xff0c;就来体验了下&#…

模式识别与机器学习

文章目录 考试题型零、简介1.自学内容(1)机器学习(2)机器学习和统计学中常见的流程(3)导数 vs 梯度(4)KL散度(5)凸优化问题 2.基本概念3.典型的机器学习系统4.前沿研究方向举例 一、逻辑回归1.线性回归2.逻辑回归3.随堂练习 二、贝叶斯学习基础1.贝叶斯公式2.贝叶斯决策3.分类器…

nginx负载均衡-基于端口的负载均衡(一)

注意&#xff1a; (1) 做负载均衡技术至少需要三台服务器&#xff1a;一台独立的负载均衡器&#xff0c;两台web服务器做集群 一、nginx分别代理后端web1 和 web2的三台虚拟主机 1、web1&#xff08;nginx-10.0.0.7&#xff09;配置基于端口的虚拟主机 [rootOldboy extra]# …

【ArcGIS微课1000例】0138:ArcGIS栅格数据每个像元值转为Excel文本进行统计分析、做图表

本文讲述在ArcGIS中,以globeland30数据为例,将栅格数据每个像元值转为Excel文本,便于在Excel中进行统计分析。 文章目录 一、加载globeland30数据二、栅格转点三、像元值提取至点四、Excel打开一、加载globeland30数据 打开配套实验数据包中的0138.rar中的tif格式栅格土地覆…

智能安全帽_4G/5G智能安全帽主板方案定制开发

智能安全帽是一种先进的安全防护设备&#xff0c;主要以视频和语音通话为功能&#xff0c;能够全面记录施工现场的作业情况&#xff0c;并支持管理人员与现场工作人员之间的双向语音通话。这一创新设计使得项目管理人员能够实时、有效地掌握施工过程中的安全和质量情况。 这款智…

uniApp通过xgplayer(西瓜播放器)接入视频实时监控

&#x1f680; 个人简介&#xff1a;某大型国企资深软件开发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

基于RK3568/RK3588大车360度环视影像主动安全行车辅助系统解决方案,支持ADAS/DMS

产品设计初衷 HS-P2-2D是一款针对大车盲区开发的360度全景影像 安全行车辅助系统&#xff0c;通过车身四周安装的超广角像机&#xff0c;经算法合成全景鸟瞰图&#xff0c;通过鸟瞰图&#xff0c;司机非常清楚的看清楚车辆四周情况&#xff0c;大大降低盲区引发的交通事故。 产…

树的模拟实现

一.链式前向星 所谓链式前向星&#xff0c;就是用链表的方式实现树。其中的链表是用数组模拟实现的链表。 首先我们需要创建一个足够大的数组h&#xff0c;作为所有结点的哨兵位。创建两个足够大的数组e和ne&#xff0c;一个作为数据域&#xff0c;一个作为指针域。创建一个变…

【C++入门】详解(中)

目录 &#x1f495;1.函数的重载 &#x1f495;2.引用的定义 &#x1f495;3.引用的一些常见问题 &#x1f495;4.引用——权限的放大/缩小/平移 &#x1f495;5. 不存在的空引用 &#x1f495;6.引用作为函数参数的速度之快&#xff08;代码体现&#xff09; &#x1f4…

《Opencv》图像的旋转

一、使用numpy库实现 np.rot90(img,-1) 后面的参数为-1时事顺时针旋转&#xff0c;为1时是逆时针旋转。 import cv2 import numpy as np img cv2.imread(./images/kele.png) """方法一""" # 顺时针90度 rot_1 np.rot90(img,-1) # 逆时针90度…

CES 2025|全面拥抱端侧AI,美格智能在CES发布系列创新成果

要点&#xff1a; ▶ 在AI机器人领域&#xff0c;以高算力AI模组助力发布“通天晓”人形机器人和2款全新微小型AI机器人 ▶ 在AI硬件领域&#xff0c;发布消费级AI智能体产品——AIMO&#xff0c;引领个人专属的大模型时代 ▶ 在5G通信领域&#xff0c;发布全新5GWiFi-7 CPE…