当前位置: 首页 > news >正文

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实战经验篇-系列文章汇总

相关文章:

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

系列文章转如下链接&#xff1a; Android Display Graphics系列文章-汇总 Android实战经验篇-系列文章汇总 本文主要包括部分&#xff1a; 一、Android分区说明 1.1 系统分区查看 1.2 分区表修改 1.3 验证新分区 二、源码修改 2.1 generate_extra_images 2.2 fstab 2…...

深入学习 Python 量化编程

深入学习 Python 量化编程 第一章&#xff1a;Python 基础与量化编程环境搭建 1.1 安装必要的库 首先&#xff0c;你需要安装一些在量化编程中常用的 Python 库。可以通过以下命令安装这些库&#xff1a; pip install numpy pandas matplotlib yfinance backtrader scikit-…...

机器学习笔记——特征工程

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本笔记介绍机器学习中常见的特征工程方法、正则化方法和简要介绍强化学习。 文章目录 特征工程&#xff08;Fzeature Engineering&#xff09;1. 特征提取&#xff…...

4种革新性AI Agent工作流设计模式全解析

文章目录 导读&#xff1a;AI Agent的四种关键设计模式如下&#xff1a;1. 反思2. 工具使用3. 规划4. 多Agent协作 总结内容简介&#xff1a; 导读&#xff1a; AI Agent是指能够在特定环境中自主执行任务的人工智能系统&#xff0c;不仅接收任务&#xff0c;还自主制定和执行…...

【入门级】计算机网络学习

网络安全&#xff1a;前端开发者必知&#xff1a;Web安全威胁——XSS与CSRF攻击及其防范-CSDN博客 三次握手四次挥手&#xff1a;前端网络—三次握手四次挥手_前端三次握手-CSDN博客 http协议和https协议的区别&#xff1a;前端网络—http协议和https协议的区别-CSDN博客 网…...

安装 Jenkins 后无法访问用户名或密码且忘记这些凭证怎么办?

Jenkins 是一款功能强大的自动化服务器&#xff0c;在持续集成与交付&#xff08;CI/CD&#xff09;领域应用广泛。不过&#xff0c;用户在使用过程中&#xff0c;尤其是首次接触该系统或系统重启后&#xff0c;常常会遇到登录方面的问题。要是 Jenkins 突然要求输入用户名和密…...

day08_Kafka

文章目录 day08_Kafka课程笔记一、今日课程内容一、消息队列&#xff08;了解&#xff09;**为什么消息队列就像是“数据的快递员”&#xff1f;****实际意义**1、产生背景2、消息队列介绍2.1 常见的消息队列产品2.2 应用场景2.3 消息队列中两种消息模型 二、Kafka的基本介绍1、…...

安装conda 环境

conda create -n my_unet5 python3.8 &#xff08;必须设置3.8版本&#xff09; conda activate my_unet5...

【dockerros2】ROS2节点通信:docker容器之间/docker容器与宿主机之间

&#x1f300; 一个中大型ROS项目常需要各个人员分别完成特定的功能&#xff0c;而后再组合部署&#xff0c;而各人员完成的功能常常依赖于一定的环境&#xff0c;而我们很难确保这些环境之间不会相互冲突&#xff0c;特别是涉及深度学习环境时。这就给团队项目的部署落地带来了…...

使用外网访问在群晖中搭建思源docker

还是要折腾&#xff0c;之前发现用公网IP可以访问就没有折腾&#xff0c;今天ip变了&#xff0c;用不了了&#xff0c;一搜&#xff0c;发现有方法可以用域名访问&#xff0c;哎&#xff0c;太好了&#xff01; 原文&#xff1a;分享我在 群晖 docker 部署 思源笔记 步骤 - 链…...

深度学习中的EMA技术:原理、实现与实验分析

深度学习中的EMA技术&#xff1a;原理、实现与实验分析 1. 引言 指数移动平均(Exponential Moving Average, EMA)是深度学习中一种重要的模型参数平滑技术。本文将通过理论分析和实验结果&#xff0c;深入探讨EMA的实现和效果。 深度学习中的EMA技术&#xff1a;原理、实现与…...

win32汇编环境,窗口程序中对按钮控件常用操作的示例

;运行效果 ;win32汇编环境&#xff0c;窗口程序中对按钮控件常用操作的示例 ;常用的操作&#xff0c;例如创建按钮控件&#xff0c;使其无效&#xff0c;改变文本&#xff0c;得到文本等。 ;将代码复制进radasm软件里&#xff0c;直接就可以编译运行。重点部分加备注。 ;>&g…...

CentOS 7.9 通过 yum 安装 Docker

文章目录 前言一、删除已安装的 Docker二、网络设置三、设置 yum 源&#xff0c;并安装依赖四、设置 Docker 仓库五、安装及使用 Docker六、镜像仓库总结 前言 CentOS 7.9 过了维护期&#xff0c;Docker 官方文档没有了相关的安装文档。记录一下&#xff0c;备用&#xff01; …...

【开源免费】基于Vue和SpringBoot的英语知识应用网站(附论文)

本文项目编号 T 138 &#xff0c;文末自助获取源码 \color{red}{T138&#xff0c;文末自助获取源码} T138&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

工具推荐:PDFgear——免费且强大的PDF编辑工具 v2.1.12

PDFgear——免费且强大的PDF编辑工具 v2.1.12 软件简介 PDFgear 是一款 完全免费的 PDF 软件&#xff0c;支持 阅读、编辑、转换、合并 以及 跨设备签署 PDF 文件&#xff0c;无需注册即可使用。它提供了丰富的 PDF 处理功能&#xff0c;极大提升了 PDF 文件管理的便捷性和效…...

Web渗透测试之XSS跨站脚本 防御[WAF]绕过手法

目录 XSS防御绕过汇总 参考这篇文章绕过 XSS payload XSS防御绕过汇总 服务端知道有网络攻击或者xss攻 Html...

MMDetection框架下的常见目标检测与分割模型综述与实践指南

目录 综述与实践指南 SSD (Single Shot MultiBox Detector) 基本配置和使用代码 RetinaNet 基本配置和使用代码 Faster R-CNN 基本配置和使用代码 Mask R-CNN 基本配置和使用代码 Cascade R-CNN 基本配置和使用代码 总结 综述与实践指南 MMDetection是一个基于Py…...

怎么实现Redis的高可用?

大家好&#xff0c;我是锋哥。今天分享关于【怎么实现Redis的高可用&#xff1f;】面试题。希望对大家有帮助&#xff1b; 怎么实现Redis的高可用&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 为了实现 Redis 的高可用性&#xff0c;我们需要保证在发…...

OpenCV实现Kuwahara滤波

Kuwahara滤波是一种非线性的平滑滤波技术&#xff0c;其基本原理在于通过计算图像模板中邻域内的均值和方差&#xff0c;选择图像灰度值较为均匀的区域的均值来替代模板中心像素的灰度值。以下是Kuwahara滤波的详细原理说明&#xff1a; 一、基本思想 Kuwahara滤波的基本思想…...

WINFORM - DevExpress -> DevExpress总结[安装、案例]

安装devexpress软件 路径尽量不换&#xff0c;后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件&#xff1a; ToolboxCreator.exe/ini:toolboxcreator…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...