亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? yboot.c

?? yaffs sorce code ,it s very usefuy for which one want to design nand flash file system
?? C
字號:
/* * YAFFS: Yet another FFS. A NAND-flash specific file system. * yboot: A yaffs bootloader. * * Copyright (C) 2002 Aleph One Ltd. * * Created by Charles Manning <charles@aleph1.co.uk> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 2.1 as * published by the Free Software Foundation. * * * Note: This code (yboot.c) and YAFFS headers are LGPL, the rest of YAFFS C code is covered by GPL. *       The rationale behind this is to allow easy incorporation of yaffs booting with  *       prorietary code. * */#include <string.h>#include <stdio.h>#include "yaffs_guts.h"const char *yboot_c_version="$Id: yboot.c,v 1.2 2005/07/19 19:51:57 charles Exp $";#define MAX_FILE_SIZE	4000000#define MAX_CHUNKS	(MAX_FILE_SIZE/YAFFS_BYTES_PER_CHUNK + 1)static int chunkLocations[MAX_CHUNKS];// External functions for ECC on datavoid nand_calculate_ecc (const unsigned char*dat, unsigned char*ecc_code);int nand_correct_data (unsigned char*dat, unsigned char*read_ecc, unsigned char*calc_ecc);static const char yaffs_countBits[256] ={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8};static void spareToTags(yaffs_Spare *spare, yaffs_Tags *tag){	unsigned char *bytes = (char *)tag;	bytes[0] = spare->tagByte0;	bytes[1] = spare->tagByte1;	bytes[2] = spare->tagByte2;	bytes[3] = spare->tagByte3;	bytes[4] = spare->tagByte4;	bytes[5] = spare->tagByte5;	bytes[6] = spare->tagByte6;	bytes[7] = spare->tagByte7;}// yboot_ScanForFile findsstatic int yaffsboot_ScanForFile(yaffs_Device *dev, const char *fileName){	int pg;	int blk;	yaffs_ObjectHeader data;	yaffs_Spare spare;	yaffs_Tags tags;	if (!fileName)	{		//printf("NULL filename\n");		return -1;	}	//printf("Searching block range %d to %d for %s\n", dev->startBlock, dev->endBlock, fileName);	for (blk = dev->startBlock; blk < dev->endBlock; blk++)	{			for (pg = 0; pg < YAFFS_CHUNKS_PER_BLOCK; pg++)		{			dev->readChunkFromNAND(dev, (blk*YAFFS_CHUNKS_PER_BLOCK) + pg, (__u8 *)&data, (yaffs_Spare *)&spare);			if (yaffs_countBits[spare.blockStatus] >=7 && // block OK				yaffs_countBits[spare.pageStatus] >= 7)   // page ok			{				spareToTags(&spare, &tags);								if ( tags.chunkId == 0 &&  // it's a header				     data.parentObjectId == YAFFS_OBJECTID_ROOT && // it's in the root				     strcmp(data.name, fileName) == 0 // name matches				)				{					//printf("%s found at chunk %x objectId is %x\n", fileName, blk* YAFFS_PAGES_PER_BLOCK + pg, tag.objectId);										return tags.objectId;				}			}		}	}	// Sad day... not found.	// printf("%s not found\n",filename);	return -1;}static unsigned char bufferData[YAFFS_BYTES_PER_CHUNK];static int bufferPos = 0;static int bufferChunk = 0;static int bufferInitialised = 0;static int bufferLength = 0;static yaffs_Device *bufferDevice;static int chunkEnd = -1;static int topChunk = -1;static int fileSize = -1;int yaffsboot_InitFile(yaffs_Device *dev, const char *fileName,int *loadedFileSize){	yaffs_Spare spare;	yaffs_Tags  tags;	int fileObjId;	int i;		int blk;	int pg;	int missing;	int chunksMissing = 0;	bufferDevice = dev;			fileObjId = yaffsboot_ScanForFile(dev,fileName);	if(fileObjId < 0)	{		return -1;	}		//printf("Gathering chunks...\n");		for (i = 0; i < MAX_CHUNKS; i++)	{		chunkLocations[i] = -1;	}	for (blk = dev->startBlock; blk <= dev->endBlock; blk++)	{		for (pg = 0; pg < YAFFS_CHUNKS_PER_BLOCK; pg++)		{			dev->readChunkFromNAND(dev, blk * YAFFS_CHUNKS_PER_BLOCK + pg, NULL, &spare);			if (yaffs_countBits[spare.blockStatus] >= 7 &&			    yaffs_countBits[spare.pageStatus] >= 7)			{				spareToTags(&spare, &tags);				if (tags.objectId == fileObjId && tags.chunkId > 0)				{					if(tags.chunkId >= MAX_CHUNKS)					{						printf("Chunk %d out of bounds (max is %d)\n",tags.chunkId, MAX_CHUNKS - 1);						return -1;					}					chunkLocations[tags.chunkId] = (blk*32) + pg;										chunkEnd = (tags.chunkId -1) * YAFFS_BYTES_PER_CHUNK + tags.byteCount;										if(chunkEnd > fileSize) fileSize = chunkEnd;    										if(tags.chunkId > topChunk) topChunk = tags.chunkId;				}			}		}	}	for (missing= 0, i= 1; i<= topChunk; i++)	{		if (chunkLocations[i] < 0)		{			//printf("chunk %x missing\n",i);			chunksMissing++;		}	}	*loadedFileSize = fileSize;		return fileObjId;}int yaffsboot_Reinitialise(void){	bufferInitialised = 0;	return 0;}int yaffsboot_ReadByte(unsigned char *bPtr){	if(!bufferInitialised)	{		//printf("Read buffer initialisation\n");		bufferInitialised = 1;		bufferChunk = 0;		bufferLength = 0;		bufferPos = -1;	}	if(bufferPos < 0)	{		bufferChunk++;		if(bufferChunk> topChunk)		{			printf("Chunk %d past end of file\r\n",bufferChunk);			return -1;		}		if (chunkLocations[bufferChunk] < 0)		{				printf("No chunk %d, zero page\n",bufferChunk);				memset(bufferData,0,YAFFS_BYTES_PER_CHUNK);				bufferLength = YAFFS_BYTES_PER_CHUNK;		}		else		{			yaffs_Spare localSpare;			yaffs_Tags tags;			__u8 calcEcc[3];			bufferDevice->readChunkFromNAND(bufferDevice, chunkLocations[bufferChunk], bufferData, &localSpare);			spareToTags(&localSpare, &tags);			if(0 && bufferChunk <topChunk)			{				bufferLength = YAFFS_BYTES_PER_CHUNK;			}			else			{				bufferLength = tags.byteCount;			}			//printf("Read chunk %d, size %d bytes\n",bufferChunk,bufferLength);			nand_calculate_ecc(bufferData,calcEcc);			nand_correct_data (bufferData,localSpare.ecc1, calcEcc);			nand_calculate_ecc(&bufferData[256],calcEcc);			nand_correct_data (&bufferData[256],localSpare.ecc2, calcEcc);		}		bufferPos = 0;		if(bufferLength <= bufferPos)		{			return -1;		}	}	*bPtr = bufferData[bufferPos];	bufferPos++;	if(bufferPos >= bufferLength)	{		//printf("End of page %d at byte %d\r\n",bufferChunk,bufferLength);		bufferPos = -1;	}	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区在线看| 日本一区二区不卡视频| 97久久精品人人澡人人爽| 国产高清不卡一区二区| 九一久久久久久| 久久99精品久久久久婷婷| 蜜臀久久99精品久久久久久9| 婷婷综合五月天| 日日夜夜精品视频天天综合网| 亚洲五月六月丁香激情| 香港成人在线视频| 奇米777欧美一区二区| 国产专区欧美精品| www.视频一区| 欧美最猛性xxxxx直播| 67194成人在线观看| 欧美一区欧美二区| 久久久久久夜精品精品免费| 国产精品丝袜91| 久久精品免费看| 国产又黄又大久久| 成人免费毛片aaaaa**| av欧美精品.com| 在线免费不卡电影| 制服丝袜中文字幕一区| 久久嫩草精品久久久精品| 18欧美亚洲精品| 亚洲国产中文字幕在线视频综合 | 久久久99免费| 日韩理论片在线| 日本亚洲天堂网| 国产a区久久久| 717成人午夜免费福利电影| 久久久五月婷婷| 亚洲二区在线观看| 国产成人在线看| 欧美少妇bbb| 成人av在线电影| 欧美视频一区在线观看| 久久日一线二线三线suv| 亚洲欧美在线视频| 久久电影国产免费久久电影| 成人av网站在线| 日韩视频一区二区三区 | 亚洲欧美区自拍先锋| 日日嗨av一区二区三区四区| 99这里都是精品| 欧美不卡一区二区| 依依成人综合视频| 国产成人免费视频一区| 日韩一区二区影院| 亚洲欧美另类图片小说| 国产乱色国产精品免费视频| 6080午夜不卡| 亚洲网友自拍偷拍| 99久久综合狠狠综合久久| 精品国产精品一区二区夜夜嗨| 亚洲综合偷拍欧美一区色| 国产一区二区三区蝌蚪| 欧美一区二区三区免费大片 | 欧美挠脚心视频网站| 亚洲欧美在线观看| 成人激情av网| 国产午夜亚洲精品羞羞网站| 蜜臀av一区二区在线免费观看| 欧美日韩在线一区二区| 有码一区二区三区| 91首页免费视频| 亚洲色图制服丝袜| 成人av电影在线观看| 亚洲国产成人自拍| 成人在线视频一区| 中文字幕电影一区| 国产精品亚洲成人| 久久亚洲综合av| 国产精品中文有码| 久久精品日韩一区二区三区| 蜜臀av亚洲一区中文字幕| 日韩精品专区在线影院观看| 麻豆久久久久久| 欧美不卡视频一区| 高清国产一区二区| 国产精品国产三级国产| 99久久夜色精品国产网站| 国产精品国产三级国产aⅴ原创| 国产成人在线色| 中文字幕综合网| 色综合久久综合| 亚洲国产精品久久一线不卡| 欧美日韩国产小视频在线观看| 午夜av电影一区| 欧美变态凌虐bdsm| 国产福利不卡视频| 亚洲视频一二三| 欧美日韩一区三区| 久久99九九99精品| 中文字幕一区在线观看| 欧美亚洲综合另类| 久久精品久久综合| 国产精品久久看| 欧美久久久影院| 国产制服丝袜一区| 一区二区三区成人| 久久午夜羞羞影院免费观看| 波多野结衣中文字幕一区 | 日韩欧美在线综合网| 国产福利一区二区三区| 亚洲女人****多毛耸耸8| 欧美高清www午色夜在线视频| 久久精工是国产品牌吗| 18成人在线观看| 日韩精品一区二区三区视频播放| 国产福利一区二区三区视频在线 | 亚洲韩国一区二区三区| 久久综合av免费| 欧美性猛片xxxx免费看久爱| 国产一区二区三区四区在线观看| 亚洲精品一二三四区| 精品人在线二区三区| 欧美无乱码久久久免费午夜一区| 国产资源精品在线观看| 亚洲va天堂va国产va久| 国产精品久久久久一区| 欧美tk丨vk视频| 欧美丝袜丝nylons| 99视频一区二区| 麻豆一区二区三| 天涯成人国产亚洲精品一区av| 中文字幕av一区 二区| 日韩精品综合一本久道在线视频| 欧美日韩视频专区在线播放| www.欧美日韩| 国产69精品久久777的优势| 另类调教123区| 日韩不卡一区二区| 婷婷六月综合亚洲| 午夜精品久久久久影视| 一区二区在线观看不卡| 亚洲国产成人午夜在线一区| 日韩欧美一区二区在线视频| 欧美亚洲高清一区二区三区不卡| 国产a精品视频| 国产真实乱对白精彩久久| 久久av老司机精品网站导航| 日韩主播视频在线| 视频在线在亚洲| 亚欧色一区w666天堂| 亚洲一二三区在线观看| 亚洲成av人片www| 亚洲图片自拍偷拍| 亚洲成人手机在线| 五月婷婷综合在线| 午夜精品久久久久久久久| 亚洲一区二区高清| 五月天一区二区| 日本三级韩国三级欧美三级| 日本欧美大码aⅴ在线播放| 蜜桃视频第一区免费观看| 日本aⅴ亚洲精品中文乱码| 免费精品视频最新在线| 美女爽到高潮91| 国产精品一区二区三区四区| 粉嫩aⅴ一区二区三区四区五区| 国产一区二区美女诱惑| 东方欧美亚洲色图在线| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 中文字幕精品一区二区三区精品| 国产网红主播福利一区二区| 国产女人18毛片水真多成人如厕| 国产精品国产三级国产普通话三级| 国产欧美一区二区精品性| 国产精品福利在线播放| 一区二区三区电影在线播| 丝袜美腿亚洲色图| 国产在线精品一区二区不卡了 | 亚洲国产精品综合小说图片区| 日韩成人伦理电影在线观看| 精品一区二区三区在线视频| www..com久久爱| 欧美精品在线观看一区二区| 精品免费视频.| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 中文字幕欧美日韩一区| 亚洲欧美日韩小说| 激情亚洲综合在线| 日本韩国精品一区二区在线观看| 欧美一卡二卡在线| 中文字幕一区二区视频| 婷婷中文字幕综合| 99久久精品国产导航| 日韩欧美123| 亚洲免费在线视频一区 二区| 美女视频黄免费的久久| av色综合久久天堂av综合| 日韩三级视频中文字幕| 亚洲欧洲精品成人久久奇米网| 麻豆国产精品777777在线| 99精品国产视频| 久久久影视传媒| 日韩av午夜在线观看|