有的时候需要dump分区的raw data(没有文件系统)进行分析
/*
* out put raw partition image
*/
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define PRELOADER "/dev/preloader"
#define BOOTLOADER "/dev/uboot"
#define RECOVERYIMG "/dev/recovery"
#define BUFFERSIZE (1*1024*1024)
static char buff[BUFFERSIZE];
int dumpPartition(char * name, int size)
{
int i = 0,ret =0;
int fdin, fdout;
char * inputname[256]={0x00};
char * outputname[256]={0x00};
sprintf(inputname,"/dev/%s",name);
sprintf(outputname,"/data/%s.dump",name);
printf("inputname is %s , and outputname is %s \n",inputname,outputname);
fdin = open(inputname, O_RDONLY);
if ((fdin = open (inputname,O_RDONLY)) < 0) {
printf("create %s failed\n",inputname);
exit(1);
}
if ((fdout = open (outputname, O_RDWR | O_CREAT | O_TRUNC, 0666)) < 0) {
printf("create %s failed \n",outputname);
exit(1);
}
printf("size is %d \n",size);
for(i=0;i<size;i++)
{
ret=read(fdin,buff,BUFFERSIZE);
printf("read %d from %s \n",ret,inputname);
ret=write(fdout,buff,BUFFERSIZE);
printf("write %d to %s \n",ret,outputname);
}
close(fdin);
close(fdout);
return 0;
}
void showhelp()
{
printf("./rawdump part_name size_m\n");
printf("eg : ./rawdump uboot 1 \n");
printf("please try again \n");
return ;
}
int main(int argc, char *argv[])
{
if(argc!=3)
{
showhelp();
exit(1);
}
char * name = argv[1];
int size = atoi(argv[2]);
dumpPartition(name, size);
return 0;
}
具体用法,先编译之,adb push 到 android设备
./rawdump 分区名 需要导出的分区大小