android R ext4 image打包脚本介绍

news2024/9/22 7:40:53

一、Android R打包指令使用介绍

(1)mkuserimg_mke2fs

#./mkuserimg_mke2fs --help
usage: mkuserimg_mke2fs [-h] [--android_sparse] [--journal_size JOURNAL_SIZE]
                        [--timestamp TIMESTAMP] [--fs_config FS_CONFIG]
                        [--product_out PRODUCT_OUT]
                        [--block_list_file BLOCK_LIST_FILE]
                        [--base_alloc_file_in BASE_ALLOC_FILE_IN]
                        [--base_alloc_file_out BASE_ALLOC_FILE_OUT]
                        [--label LABEL] [--inodes INODES]
                        [--inode_size INODE_SIZE]
                        [--reserved_percent RESERVED_PERCENT]
                        [--flash_erase_block_size FLASH_ERASE_BLOCK_SIZE]
                        [--flash_logical_block_size FLASH_LOGICAL_BLOCK_SIZE]
                        [--mke2fs_uuid MKE2FS_UUID]
                        [--mke2fs_hash_seed MKE2FS_HASH_SEED]
                        [--share_dup_blocks]
                        src_dir output_file {ext2,ext4} mount_point fs_size
                        [file_contexts]

positional arguments:
  src_dir               The source directory for user image.
  output_file           The path of the output image file.
  {ext2,ext4}           Variant of the extended filesystem.
  mount_point           The mount point for user image.
  fs_size               Size of the file system.
  file_contexts         The selinux file context.

optional arguments:
  -h, --help            show this help message and exit
  --android_sparse, -s  Outputs an android sparse image (mke2fs).
  --journal_size JOURNAL_SIZE, -j JOURNAL_SIZE
                        Journal size (mke2fs).
  --timestamp TIMESTAMP, -T TIMESTAMP
                        Fake timetamp for the output image.
  --fs_config FS_CONFIG, -C FS_CONFIG
                        Path to the fs config file (e2fsdroid).
  --product_out PRODUCT_OUT, -D PRODUCT_OUT
                        Path to the directory with device specific fs config
                        files (e2fsdroid).
  --block_list_file BLOCK_LIST_FILE, -B BLOCK_LIST_FILE
                        Path to the block list file (e2fsdroid).
  --base_alloc_file_in BASE_ALLOC_FILE_IN, -d BASE_ALLOC_FILE_IN
                        Path to the input base fs file (e2fsdroid).
  --base_alloc_file_out BASE_ALLOC_FILE_OUT, -A BASE_ALLOC_FILE_OUT
                        Path to the output base fs file (e2fsdroid).
  --label LABEL, -L LABEL
                        The mount point (mke2fs).
  --inodes INODES, -i INODES
                        The extfs inodes count (mke2fs).
  --inode_size INODE_SIZE, -I INODE_SIZE
                        The extfs inode size (mke2fs).
  --reserved_percent RESERVED_PERCENT, -M RESERVED_PERCENT
                        The reserved blocks percentage (mke2fs).
  --flash_erase_block_size FLASH_ERASE_BLOCK_SIZE, -e FLASH_ERASE_BLOCK_SIZE
                        The flash erase block size (mke2fs).
  --flash_logical_block_size FLASH_LOGICAL_BLOCK_SIZE, -o FLASH_LOGICAL_BLOCK_SIZE
                        The flash logical block size (mke2fs).
  --mke2fs_uuid MKE2FS_UUID, -U MKE2FS_UUID
                        The mke2fs uuid (mke2fs) .
  --mke2fs_hash_seed MKE2FS_HASH_SEED, -S MKE2FS_HASH_SEED
                        The mke2fs hash seed (mke2fs).
  --share_dup_blocks, -c
                        ext4 share dup blocks (e2fsdroid).

(2)mke2fs

#./mke2fs
Usage: mke2fs [-c|-l filename] [-b block-size] [-C cluster-size]
        [-i bytes-per-inode] [-I inode-size] [-J journal-options]
        [-G flex-group-size] [-N number-of-inodes] [-d root-directory]
        [-m reserved-blocks-percentage] [-o creator-os]
        [-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]
        [-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]
        [-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]
        [-jnqvDFSV] device [blocks-count]

 (3)mke2fs使用举例

./mke2fs -L lcfg_L -M /lcfg -E android_sparse -t ext4 -b 4096 lcfg_new.img 4096

参数解释:
-L lcfg_L  指定文件系统lable

-M /lcfg   指定文件系统挂载点,新的android系统可能必须指定,否则可能不开机

-E android_sparse  使用android稀疏文件系统

-t ext4 指定文件系统类型

-b 4096 指定block size为4K

lcfg_new.img 打包后的文件名

最后的4096为文件系统占用多少个block,即大小为4096个block,16MB

-d 指定打包的路径,不指定则打包一个空文件系统

./mke2fs -d ../mnt/ -L lcfg_L -M /lcfg -E android_sparse -t ext4 -b 4096 lcfg_new.img 4096

 

0x460地址的53EF对应ext4文件系统,0x4A0地址存储的lable name,0x4B0地址存储的挂载点名字。  

(5)mkuserimg_mke2fs使用举例

#./mkuserimg_mke2fs -s -L lcfg_L ../mnt/ lcfg_new.img ext4 lcfg 16777216
10:48:38 mkuserimg_mke2fs.py INFO: Env: {'MKE2FS_CONFIG': '/tmp/tmpIS3W7w'}
10:48:38 mkuserimg_mke2fs.py INFO: Running: mke2fs -L lcfg_L -M /lcfg -E android_sparse -t ext4 -b 4096 lcfg_new.img 4096
mke2fs 1.45.5 (07-Jan-2020)
lcfg_new.img: Unimplemented ext2 library function while setting up superblock

10:48:38 mkuserimg_mke2fs.py ERROR: Failed to run mke2fs: mke2fs 1.45.5 (07-Jan-2020)
lcfg_new.img: Unimplemented ext2 library function while setting up superblock

 发现使用这个脚本打包会报Unimplemented ext2 library function while setting up superblock的错误,查询网上信息均不能解决此问题。android编译log里执行是没有报错的,暂时原因未知。由此脚本输出log可以确认实际调用的还是mke2fs这个命令。

以下是android编译log这个命令的调用输出:

mkuserimg_mke2fs -s /data/aosp/out/soong/.temp/tmpB5DBG3 /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}_-target_files-eng.${username}/IMAGES/system.img ext4 / 1561997312 -j 0 -T 1230768000 -C /data/aosp/out/soong/.temp/merged_fs_configiM8m_z.txt -B /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/IMAGES/system.map -L / -i 4287 -M 0 -U 2735b6e1-a757-5a14-9bef-47754fd50ded -S 700f0123-0f4b-5b89-9162-47d96902e561 --inode_size 256 /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/META/file_contexts.bin


输出:

mke2fs -O ^has_journal -L / -N 4287 -I 256 -M / -m 0 -U 2735b6e1-a757-5a14-9bef-47754fd50ded -E android_sparse,hash_seed=700f0123-0f4b-5b89-9162-47d96902e561 -t ext4 -b 4096 /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/IMAGES/system.img 381347



mkuserimg_mke2fs -s /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/ODM /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/IMAGES/odm.img ext4 odm 659456 -j 0 -T 1230768000 -C /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/se1000_car-target_files-eng.${username}/META/odm_filesystem_config.txt -B /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/IMAGES/odm.map -L odm -i 24 -M 0 -U 2953e192-e67a-51ec-ba5b-d87b876e96be -S 8547b481-be54-5451-857b-c04843da04c8 --inode_size 256 /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.jiongjionglv/META/file_contexts.bin

输出:
mke2fs -O ^has_journal -L odm -N 25 -I 256 -M /odm -m 0 -U 2953e192-e67a-51ec-ba5b-d87b876e96be -E android_sparse,hash_seed=8547b481-be54-5451-857b-c04843da04c8 -t ext4 -b 4096 /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/IMAGES/odm.img 4243

(6)mkf2fsuserimg.sh 使用介绍

 此脚本是用来制作f2fs格式image,比如userdata.img

./mkf2fsuserimg.sh -h
in mkf2fsuserimg.sh PATH=/usr/local/mongodb/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Usage:
mkf2fsuserimg.sh OUTPUT_FILE SIZE
         [-S] [-C FS_CONFIG] [-f SRC_DIR] [-D PRODUCT_OUT]
         [-s FILE_CONTEXTS] [-t MOUNT_POINT] [-T TIMESTAMP]
         [-L LABEL] [--prjquota] [--casefold]
mkf2fsuserimg.sh /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/IMAGES/userdata.img 34359738368 -S -f /data/aosp/out/soong/.temp/tmpbJAfR1 -s /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/META/file_contexts.bin -t data -T 1230768000 -L data --prjquota --casefold

make_f2fs -g android -S 34359738368 -l data -O project_quota,extra_attr -O casefold -C utf8 /data/aosp/out/target/product/${product}/obj/PACKAGING/target_files_intermediates/${product}-target_files-eng.${username}/IMAGES/userdata.img

Android R 文件系统制作工具下载:https://download.csdn.net/download/u013463707/89550435

platform-tool下载地址:https://dl.google.com/android/repository/platform-tools-latest-windows.zip

https://dl.google.com/android/repository/platform-tools-latest-linux.zip 

部分历史版本下载:https://gitee.com/awake558/platform-tools/tree/master 

下载链接:https://dl.google.com/android/repository/platform-tools_r[版本]-[系统].zip
版本:platform-tools的版本名称(26.0.0,33.0.0...)
系统:Windwos→windows,Mac→darwin,linux→linux
例如:https://dl.google.com/android/repository/platform-tools_r26.0.0-windows.zip

部分历史版本无法下载,版本信息参考:https://developer.android.com/studio/releases/platform-tools

参考链接: 

https://blog.csdn.net/qq_45683435/article/details/104070216/

修改system.img的文件的权限和属性:使用make.ext4fs的方法_system.ext4.win-CSDN博客

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

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

相关文章

Nginx、LNMP万字详解

目录 Nginx 特点 Nginx安装 添加Nginx服务 Nginx配置文件 全局配置 HTTP配置 状态统计页面 Nginx访问控制 授权用户 授权IP 虚拟主机 基于域名 测试 基于IP 测试 基于端口 测试 LNAMP 解析方式 LNMP转发php-fpm解析 Nginx代理LAMP解析 LNMP部署示例 实…

live555 rtsp服务器实战之doGetNextFrame

live555关于RTSP协议交互流程 live555的核心数据结构值之闭环双向链表 live555 rtsp服务器实战之createNewStreamSource live555 rtsp服务器实战之doGetNextFrame 注意:该篇文章可能有些绕,最好跟着文章追踪下源码,不了解源码可能就是天书…

message from server: “Too many connections“

theme: nico 你们好,我是金金金。 场景 启动服务时,报错如上:数据源拒绝建立连接,服务器发送消息:“连接过多” 排查 看报错信息提示的很明显了 查看MySQL 数据库中最大允许连接数的配置信息(我mysql是部…

LabVIEW Communications LTE Application Framework 读书笔记

目录 硬件要求一台设备2台USRPUSRP-2974 示例项目的组件文件夹结构DL Host.gcompeNodeB Host.gcompUE Host.gcompBuildsCommonUSRP RIOLTE 操作模式DLeNodeBUE 项目组件单机双机UDP readUDP writeMAC TXMAC RXDL TX PHYDL RX PHYUL TX PHYUL RX PHYSINR calculationRate adapta…

python入门课程Pro(1)--数据结构及判断

数据结构及判断 第1课 复杂的多向选择1.if-elif-else2.if嵌套3.练习题(1)大招来了(2)奇数还是偶数(3)简洁代码 第2课 数据与判断小结1.变量2.格式化输出3.逻辑运算-或与非4.判断条件5.练习题(1&…

基于 JAVA 的旅游网站设计与实现

点击下载源码 塞北村镇旅游网站设计 摘要 城市旅游产业的日新月异影响着村镇旅游产业的发展变化。网络、电子科技的迅猛前进同样牵动着旅游产业的快速成长。随着人们消费理念的不断发展变化,越来越多的人开始注意精神文明的追求,而不仅仅只是在意物质消…

[word] word如何编写公式? #微信#知识分享

word如何编写公式? word如何编写公式?Word中数学公式是经常会使用到的,若是要在文档中录入一些复杂的公式,要怎么做呢?接下来小编就来给大家讲一讲具体操作,一起看过来吧! 方法一:…

RISC-V在线反汇编工具

RISC-V在线反汇编工具: https://luplab.gitlab.io/rvcodecjs/#q34179073&abifalse&isaAUTO 不过,似乎,只支持RV32I、RV64I、RV128I指令集:

Flutter热更新技术探索

一,需求背景: APP 发布到市场后,难免会遇到严重的 BUG 阻碍用户使用,因此有在不发布新版本 APP 的情况下使用热更新技术立即修复 BUG 需求。原生 APP(例如:Android & IOS)的热更新需求已经…

【精品资料】物业行业BI大数据解决方案(43页PPT)

引言:物业行业BI(Business Intelligence,商业智能)大数据解决方案是专为物业管理公司设计的一套综合性数据分析与决策支持系统。该解决方案旨在通过集成、处理、分析及可视化海量数据,帮助物业企业提升运营效率、优化资…

SCSA第七天

防火墙的可靠性 因为防火墙上不仅需要同步配置信息,还需要同步状态信息(会话表等),所以,防火墙不能 像路由器那样单纯的靠动态协议来实现切换,需要用到双机热备技术。 1,双机 --- 目前双机热…

yearrecord——一个类似痕迹墙的React数据展示组件

介绍一下自己做的一个类似于力扣个人主页提交记录和GitHub主页贡献记录的React组件。 下图分别是力扣个人主页提交记录和GitHub个人主页的贡献记录,像这样类似痕迹墙的形式可以比较直观且高效得展示一段时间内得数据记录。 然而要从0实现这个功能还是有一些麻烦得…

构建gitlab远端服务器(check->build->test->deploy)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言构建gitlab远端服务器一、步骤一:搭建gitlab的运行服务器【运维】1. 第一步:硬件服务器准备工作(1)选择合适的硬件和操作系统linux(2)安装必…

QT-RTSP相机监控视频流

QT-RTSP相机监控视频流 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_settings("outSmart", "LiveWatcher&…

算法题目整合

文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b&#xff0c;她仅可以执行一次以下翻转操作&#xff1a;选择a数组中的一个区间[i, j]&…

Apache AGE的MATCH子句

MATCH子句允许您在数据库中指定查询将搜索的模式。这是检索数据以在查询中使用的主要方法。 通常在MATCH子句之后会跟随一个WHERE子句&#xff0c;以添加用户定义的限制条件到匹配的模式中&#xff0c;以操纵返回的数据集。谓词是模式描述的一部分&#xff0c;不应被视为仅在匹…

OpenAI训练数据从哪里来、与苹果合作进展如何?“ChatGPT之母”最新回应

7月9日&#xff0c;美国约翰霍普金斯大学公布了对“ChatGPT之母”、OpenAI首席技术官米拉穆拉蒂&#xff08;Mira Murati&#xff09;的采访视频。这场采访时间是6月10日&#xff0c;访谈中&#xff0c;穆拉蒂不仅与主持人讨论了OpenAI与Apple的合作伙伴关系&#xff0c;还深入…

20.x86游戏实战-远线程注入的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

mac M1 创建Mysql8.0容器

MySLQ8.0 拉取m1镜像 docker pull mysql:8.0创建挂载文件夹并且赋予权限 sudo chmod 777 /Users/zhao/software/dockerLocalData/mysql 创建容器并且挂载 docker run --name mysql_8 \-e MYSQL_ROOT_PASSWORDadmin \-v /Users/zhao/software/dockerLocalData/mysql/:/var/l…

2-37 基于matlab的IMU姿态解算

基于matlab的IMU姿态解算,姿态类型为四元数&#xff1b;角速度和线加速度的类型为三维向量。IMU全称是惯性导航系统&#xff0c;主要元件有陀螺仪、加速度计和磁力计。其中陀螺仪可以得到各个轴的加速度&#xff0c;而加速度计能得到x&#xff0c;y&#xff0c;z方向的加速度&a…