⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mknandflashdump.c

📁 SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具
💻 C
字号:
#include <fcntl.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define FILE_MODE   (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)int main(int argc, char *argv[]){    	int         fdin, fdout;    	unsigned char        *src, *dst;    	struct stat statbuf;    	int 	i,j,size,offset,pos;    	if (argc != 4)	  	{        	printf("usage: %s <fromfile> <tofile> <offset>\n", argv[0]);			exit(1);	  		}    	if ((fdin = open(argv[1], O_RDONLY)) < 0)		{        	printf("can't open %s for reading", argv[1]);			exit(1);		}    	if ((fdout = open(argv[2], O_RDWR | O_CREAT,      	FILE_MODE)) < 0)		{        	printf("can't creat %s for writing", argv[2]);			exit(1);		}    	if (fstat(fdin, &statbuf) < 0)   /* need size of input file */		{        	printf("fstat error");			exit(1);				}	offset=strtoul(argv[3],NULL,0);	if(offset %512)	{	   	printf("offset not a multiple of 512 bytes\n");	   	exit(1);	}    	size=((statbuf.st_size+offset+511)/512)*528;    /* set size of output file */    	if (lseek(fdout, size - 1, SEEK_SET) == -1)      		{		  	printf("lseek error");			exit(1);		}    	if (write(fdout, "", 1) != 1)		{        	printf("write error");			exit(1);		}    	if ((src = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED,      	fdin, 0)) == MAP_FAILED)		{        	printf("mmap error for input");			exit(1);		}    	if ((dst = mmap(0, size, PROT_READ | PROT_WRITE,      	MAP_SHARED, fdout, 0)) == MAP_FAILED)      		{        	printf("mmap error for output");			exit(1);		}    	//memset(dst+offset,0xFF,size-offset);	//printf("%x\n",offset);    	for(i=0,pos=(offset*528/512);i<statbuf.st_size;i++,pos++)   	{    		if((i%512)==0&&i)     		        for(j=0;j<16;j++)			{				*(dst+pos)=0xFF;				pos++;					}    		*(dst+pos)=*(src+i);   	 }    	msync(dst,size,MS_SYNC);    	printf("finish\n");    	exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -