解压和生成 system.img&data.img ( yaffs2格式)

本文介绍了如何处理yaffs2格式的system.img和data.img,主要针对使用nand flash的Android设备。内容包括使用mkyaffs2image压缩system目录为system.img,以及通过unyaffs2工具解压system.img。提供了mkyaffs2image的源码位置和unyaffs2的源码及编译方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做为一名Android手机用户, 拿到system.img和data.img不是件难事

有这两个image可以做什么呢? ^_^可以做很多事,比如删除一些不想用的系统应用(/system/app目录下)


这里介绍的方法是针对image为yaffs2格式,也就是说android手机的存储设备是nand flash,  如果是emmc, 请看另一篇文章


(下面示例,适用于pagesize=2048 byte的nand  芯片)


1.  把system目录压缩成system.img

$out/host/linux-x86/bin/mkyaffs2image -f -c 2048 -s 64    out/target/product/{PRODUCT}/system  out/target/product/{PRODUCT}/system .img


mkyaffs2image由android源码工程编译而来,随便哪个android版本在external/yaffs2目录下都有它的源码,mm这个目录即可


2. 解压system.img

$unyaffs2 -p 2048 -s 64  system,img  system


源码如下,分别拷贝到Makefile,  unyaffs2.h, unyaffs2.c文件,再执行 make all编译即可生成unyaffs2可执行程序 

------------------------------------makefile-----------------------------------------------------------



CROSS =
CC    = $(CROSS)gcc
RM = rm -fr
CFLAGS =  -I.
CFLAGS += -O2
#CFLAGS += -Wall -Wshadow -Winline -Wpointer-arith -Wnested-externs \
#   -Wwrite-strings -Wstrict-prototypes -Wmissing-declarations \
#   -Wmissing-prototypes -Wredundant-decls


LDFLAGS += -lm


TARGET = unyaffs2
  
YAFF2SRCS = unyaffs2.c
YAFF2OBJS = $(YAFF2SRCS:.c=.o)


all: $(TARGET)

$(TARGET): $(YAFF2OBJS) 
$(CC) -o $@ $(YAFF2OBJS)  $(LDFLAGS)


distclean:
clean:
$(RM)  $(TARGET) $(YAFF2OBJS) 


.PHONY: all clean distclean $(TARGET)

-------------------------------------unyaffs2.h----------------------------------------------------------

/*
 * definition copied from yaffs2 project
 */


#ifndef __UNYAFFS_H__
#define __UNYAFFS_H__




#define YAFFS_MAX_NAME_LENGTH       255
#define YAFFS_MAX_ALIAS_LENGTH      159
/* Definition of types */
typedef unsigned char __u8;
typedef unsigned short __u16;
typedef unsigned __u32;


typedef struct {
    unsigned sequenceNumber;
    unsigned objectId;
    unsigned chunkId;
    unsigned byteCount;
} yaffs_PackedTags2TagsPart;


typedef struct {
    unsigned char colParity;
    unsigned lineParity;
    unsigned lineParityPrime; 
} yaffs_ECCOther;


typedef struct {
    yaffs_PackedTags2TagsPart t;
    yaffs_ECCOther ecc;
} yaffs_PackedTags2;


typedef enum {
    YAFFS_ECC_RESULT_UNKNOWN,
    YAFFS_ECC_RESULT_NO_ERROR,
    YAFFS_ECC_RESULT_FIXED,
    YAFFS_ECC_RESULT_UNFIXED
} yaffs_ECCResult;


typedef enum {
    YAFFS_OBJECT_TYPE_UNKNOWN,
    YAFFS_OBJECT_TYPE_FILE,
    YAFFS_OBJECT_TYPE_SYMLINK,
    YAFFS_OBJECT_TYPE_DIRECTORY,
    YAFFS_OBJECT_TYPE_HARDLINK,
    YAFFS_OBJECT_TYPE_SPECIAL
} yaffs_ObjectType;




typedef struct {


    unsigned validMarker0;
    unsigned chunkUsed; /*  Status of the chunk: used or unused */
    unsigned objectId;  /* If 0 then thi

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值