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

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

?? tffsconfig.c

?? 菲利普22系列 vxworks bsp 可以用來可以和其他版本的ARM vxworks bsp(特別是7內核的進行比較)進行比較可以加深對BSP的理解和掌握
?? C
字號:
/* tffsConfig.c - TrueFFS configuration file for VxWorks */


/* Copyright 1984-2001 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/* FAT-FTL Lite Software Development Kit
 * Copyright (C) M-Systems Ltd. 1995-2001	*/

/*
modification history
--------------------
01o,29jul04,a_m  BSP定制 for 精英arm7開發板
01v,28mar02,nrv  adding INCLUDE_MTD_CFIAMD
01u,12dec01,nrv  supressing the compiler warning on tffsVersion
01t,07nov01,yp  fixing SPR #63838
01s,02nov01,nrv  changing the version number to 2.2
01r,17sep01,yp  merging code changes from T3. Preserving T2 specifics that
                 were removed in T3
01q,25apr01,mem  Remove NFTL, CDSN and DOC2.
01p,20dec00,tlc  Add user-defined "Identify" routine to MTD table.
01t,23apr01,yp  Incrementing version number to 2.1
01s,29nov00,tlc  Added MTD_USR_IDENTIFY to the mtdTable. This allows
                 user-defined identify routines to be used for trueFFS
		                  support.
01r,06Sep00,csh  Added code to free pBuf on error SPR #34246
01q,06Sep00,csh  Added check for pBuf == NULL SPR #34246
01p,01Sep00,csh  Removed MACRO for INCLUDE_SHOW_ROUTINES
01o,04feb99,yp   added MACRO INCLUDE_TFFS_SHOW for better scalability.
01m,21apr98,yp   added tffs subdir to include path
01n,28feb98,kbw  made man page edits to fix problems found by QE
01m,28feb98,kbw  made man page edits
01l,19jan98,hdn  added new function tffsShowAll().
01k,08jan98,hdn  added new MTD for Heurikon Baja4700.
01j,06jan98,hdn  cleaned up tffsShow() and tffsBootImagePut().
01i,18dec97,yp   added documentation on sharing bootrom with TFFS
01h,15dec97,yp   doc cleanup
01g,11dec97,hdn  added tffsRawio()'s return value check in tffsShow().
01f,08dec97,hdn  renamed mkbootTffs() to tffsCopy().
01e,05dec97,hdn  changed tffsSocket[] to LOCAL variable.
01d,05dec97,hdn  added tffsShow() and mkbootTffs().
01c,11nov97,hdn  fixed documentation of flRegisterComponents().
01b,07nov97,hdn  cleaned up.
01a,07jul97,ami  written by Amirban at M-Systems
*/

/*
DESCRIPTION
This source file, with the help of sysTffs.c, configures TrueFFS for VxWorks.  
The functions defined here are generic to all BSPs.  To include these functions
in the BSP-specific module, the BSP's sysTffs.c file includes this file.  
Within the sysTffs.c file, define statements determine which functions from 
the tffsConfig.c file are ultimately included in TrueFFS.

The only externally callable routines defined in this file 
are tffsShow(), tffsShowAll(), and tffsBootImagePut().  You can
exclude the show utilities if you edit config.h and 
undefine INCLUDE_SHOW_ROUTINES.  You can exclude tffsBootImagePut() if you
edit sysTffs.c and undefine INCLUDE_TFFS_BOOT_IMAGE.  (If you find these
utilities are missing and you want them included, edit config.h and 
define INCLUDE_SHOW_ROUTINES and INCLUDE_TFFS_BOOT_IMAGE.)

If you wish to include only the TrueFFS specific show routines you could
define INCLUDE_TFFS_SHOW instead of INCLUDE_SHOW_ROUTINES in config.h.

However, for the most part, these externally callable routines are only 
a small part of the TrueFFS configuration needs handled by this file.  
The routines internal to this file make calls into the MTDs and translation 
layer modules of TrueFFS.  At link time, resolving the symbols associated 
with these calls pulls MTD and translation layer modules into VxWorks. 

However, each of these calls to the MTDs and the translation layer modules
is only conditionally included.  The constants that control the includes
are defined in sysTffs.c.  To exclude an MTD or translation layer module,
you edit sysTffs.c, undefine the appropriate constant, and rebuild sysTffs.o.
These constants are described in the reference entry for 'sysTffs'. 

INCLUDE FILES: stdcomp.h
*/


/* includes */

#include "tffs/stdcomp.h"
#include "tffs/tffsDrv.h"
#include "tffs/fatlite.h"
#include "stdio.h"


/* defines */

#ifdef INCLUDE_SHOW_ROUTINES
#define INCLUDE_TFFS_SHOW
#endif /* INCLUDE_SHOW_ROUTINES */

/* externs */

/*  : added */
#ifdef INCLUDE_MTD_SST39VF160	
FLStatus  sst39vf160Identify (FLFlash vol);
#endif /* INCLUDE_MTD_SST39VF160 */

#ifdef INCLUDE_MTD_USR
FLStatus  MTD_USR_IDENTIFY (FLFlash vol);
#endif /* INCLUDE_MTD_USR */

/* globals */

MTDidentifyRoutine mtdTable[] = 	/* MTD tables */
    {
#ifdef  INCLUDE_MTD_CFIAMD
    cfiAmdIdentify,
#endif  /* INCLUDE_MTD_CFIAMD */

#ifdef	INCLUDE_MTD_CFISCS
    cfiscsIdentify,
#endif	/* INCLUDE_MTD_CFISCS */

#ifdef	INCLUDE_MTD_I28F016
    i28f016Identify,
#endif	/* INCLUDE_MTD_I28F016 */

#ifdef	INCLUDE_MTD_I28F008
    i28f008Identify,
#endif	/* INCLUDE_MTD_I28F008 */

#ifdef	INCLUDE_MTD_I28F008_BAJA
    i28f008BajaIdentify,
#endif	/* INCLUDE_MTD_I28F008_BAJA */

#ifdef	INCLUDE_MTD_AMD
    amdMTDIdentify,
#endif	/* INCLUDE_MTD_AMD */

#ifdef INCLUDE_MTD_USR
    MTD_USR_IDENTIFY,
#endif  /* INCLUDE_MTD_USR */

#ifdef	INCLUDE_MTD_WAMD
    flwAmdMTDIdentify,
#endif	/* INCLUDE_MTD_WAMD */

/*  : added */
#ifdef	INCLUDE_MTD_SST39VF160
    sst39vf160Identify,
#endif	/* INCLUDE_MTD_SST39VF160 */

    };
int noOfMTDs = NELEMENTS (mtdTable);	/* number of MTDs */

TLentry tlTable[] = 			/* TL tables */
    {
#ifdef	INCLUDE_TL_FTL
#ifdef	FORMAT_VOLUME
    {mountFTL, formatFTL},
#else
    mountFTL,
#endif	/* FORMAT_VOLUME */
#endif	/* INCLUDE_TL_FTL */

#ifdef	INCLUDE_TL_SSFDC
#ifdef	FORMAT_VOLUME
    {mountSSFDC, formatSSFDC},
#else
    mountSSFDC,
#endif	/* FORMAT_VOLUME */
#endif	/* INCLUDE_TL_SSFDC */
    };
int noOfTLs = NELEMENTS (tlTable);	/* number of TLs */


/* locals */

LOCAL char * tffsSocket[DRIVES] = {NULL}; /* name of the socket interface */

#ifdef INCLUDE_TFFS_SHOW 
LOCAL char * tffsVersion = "2.2";	/* WRS version number of TFFS */
#endif /* INCLUDE_TFFS_SHOW */

/* forward declarations */

LOCAL VOID sysTffsInit (void);		/* BSP dependent init routine */


/*******************************************************************************
*
* flRegisterComponents - register MTD and translation layer components for use
*
* This routine registers MTD and translation layer components for use.
* This function is called by FLite once only, at initialization of the
* FLite system.
*
* NOMANUAL
*
* RETURNS: N/A
*/

void flRegisterComponents (void)
    {
    sysTffsInit ();
    }

#ifdef	INCLUDE_TFFS_SHOW
/*******************************************************************************
*
* tffsShowAll - show device information on all socket interfaces 
*
* This routine prints device information on all socket interfaces. 
*
* RETURNS: N/A
*/

void tffsShowAll (void)
    {
    int ix;

    printf ("TFFS Version %s\n", tffsVersion);
    for (ix = 0; ix < noOfDrives; ix++)
	tffsShow (ix);
    }

/*******************************************************************************
*
* tffsShow - show device information on a specific socket interface 
*
* This routine prints device information on the specified socket interface. 
* This information is particularly useful when trying to determine the 
* number of Erase Units required to contain a boot image.  The field called
* unitSize reports the size of an Erase Unit.
*
* If the process of getting physical information fails, an error code is 
* printed. The error codes can be found in flbase.h.
*
* RETURNS: N/A
*/

void tffsShow 
    (
    int driveNo			/* TFFS drive number */
    )
    {
    PhysicalInfo info;
    FLStatus status;

    if (tffsSocket[driveNo] == NULL)
	{
        printf ("%d: ---- no socket interface installed ----\n", driveNo);
	return;
	}
    status = tffsRawio (driveNo, TFFS_GET_PHYSICAL_INFO, (int)&info, 0, 0);
    if (status != OK)
	{
        printf ("%d: **** communication failed with error %d ****\n",
                driveNo, status);
	return;
	}
    printf ("%d: socket=%s: ", driveNo, tffsSocket[driveNo]);
    printf ("type=0x%x, unitSize=0x%x, mediaSize=0x%x\n", info.type, 
	    (UINT)info.unitSize, (UINT)info.mediaSize);
    }

#endif	/* INCLUDE_TFFS_SHOW */

#ifdef	INCLUDE_TFFS_BOOT_IMAGE
/*******************************************************************************
*
* tffsBootImagePut - write to the boot-image region of the flash device
*
* This routine writes an input stream to the boot-image region (if any) of 
* a flash memory device.  Typically, the input stream contains a boot image, 
* such as the VxWorks boot image, but you are free to use this function to 
* write any data needed. The size of the boot-image region is set by 
* the tffsDevFormat() call (or the sysTffsFormat() call, a BSP-specific helper 
* function that calls tffsDevFormat() internally) that formats the flash 
* device for use with TrueFFS.  
* 
* If tffsBootImagePut() is used to put a VxWorks boot image in flash, you 
* should not use the s-record version of the boot image typically produced 
* by make.  Instead, you should take the pre s-record version (usually 
* called 'bootrom' instead of 'bootrom.hex'), and filter out its loader 
* header information using an <xxx>'ToBin' utility.  For example: 
* .CS
* elfToBin < bootrom > bootrom.bin
* .CE
* 
* Use the resulting 'bootrom.bin' as input to tffsBootImagePut(). 
* 
* The discussion above assumes that you want only to use the flash device to
* store a VxWorks image that is retrieved from the flash device and then run 
* out of RAM. However, because it is possible to map many flash devices 
* directly into the target's memory, it is also possible run the VxWorks 
* image from flash memory, although there are some restrictions:
* .IP "-"
* The flash device must be non-NAND. 
* .IP "-"
* Only the text segment of the VxWorks image ('vxWorks.res_rom') may run out 
* of flash memory. The data segment of the image must reside in standard RAM. 
* .IP "-"
* No part of the flash device may be erased while the VxWorks image is running 
* from flash memory. 
* .LP
* Because TrueFFS garbage collection triggers an erase, this last restriction 
* means that you cannot run a VxWorks boot image out of a flash device that 
* must also support a writable file system (although a read-only file system 
* is OK). 
* 
* This last restriction arises from the way in which flash devices are
* constructed. The current physical construction of flash memory devices does 
* not allow access to the device while an erase is in 
* progress anywhere on the flash device. As a result, if TrueFFS tries to 
* erase a portion of the flash device, the entire device becomes inaccessible 
* to all other users.  If that other user happens to be the VxWorks image 
* looking for its next instruction, the VxWorks image crashes.
*
*RETURNS: OK or ERROR
*/

STATUS tffsBootImagePut 
    (
    int driveNo,		/* TFFS drive number */
    int offset,			/* offset in the flash chip/card */
    char * filename		/* binary format of the bootimage */
    )
    {
    PhysicalInfo info;
    UINT unitNo;
    UINT unitSize;
    UINT addr;
    char * pBuf;
    int fd;
    int ix;

    if (tffsSocket[driveNo] == NULL)
	return (ERROR);

    if (tffsRawio (driveNo, TFFS_GET_PHYSICAL_INFO, (int)&info, 0, 0) != OK)
        {
        printErr ("Unable to get physical info from drive\n");
	return (ERROR);
	}

    if ((pBuf = (char *)malloc (info.unitSize)) == NULL)
	{
       	printErr ("Can't allocate %d bytes of memory\n", info.unitSize);
	return( ERROR ) ;
	}

    if ((fd = open (filename, O_RDONLY, 0644)) == ERROR)
        {
        printErr ("Can't open \"%s\"\n", filename);
	free( pBuf ) ;
        return (ERROR);
	}

    addr = offset;
    unitNo = offset / info.unitSize;
    unitSize = info.unitSize - (offset % info.unitSize);

    /* If the offset is not Erase Unit aligned we need to save the the
     * contents of the region begining at the start of this erase unit 
     * and ending at the specified address so we can restore it after
     * we erase the Erase Unit
     */
    if (tffsRawio (driveNo, TFFS_PHYSICAL_READ, unitNo * info.unitSize,
	           offset % info.unitSize, (int)pBuf) != OK)
        {
	printErr ("Failed attempting to save Erase Unit %d\n", unitNo);
	close (fd);
	free( pBuf ) ;
	return (ERROR);
	}
        
    if (tffsRawio (driveNo, TFFS_PHYSICAL_ERASE, unitNo, 1, 0) != OK)
	{
	printErr ("Failed attempting to erase Erase Unit %d\n", unitNo);
	close (fd);
	free( pBuf ) ;
	return (ERROR);
	}

    if (tffsRawio (driveNo, TFFS_PHYSICAL_WRITE, unitNo * info.unitSize,
	           offset % info.unitSize, (int)pBuf) != OK)
        {
	printErr ("Failed attempting to restore Erase Unit %d\n", unitNo);
	close (fd);
	free( pBuf ) ;
	return (ERROR);
	}

    while (unitSize)
	{
        if ((ix = read (fd, pBuf, unitSize)) == ERROR)
            {
            printErr ("Error reading inputfile: 0x%x\n", errno);
	    free( pBuf ) ;
            return (ERROR);
            }

        if (ix == 0)
	    break;

        if ((addr + ix) > info.mediaSize)
	    {
	    printErr ("Error : Attempting to write beyond Flash boundary\n");
	    close (fd);
	    free( pBuf ) ;
	    return (ERROR);
	    }

        if (tffsRawio (driveNo, TFFS_PHYSICAL_WRITE, addr, ix, (int)pBuf) != OK)
	    {
	    printErr ("Physical write failed at address 0x%x\n", addr);
	    close (fd);
	    free( pBuf ) ;
	    return (ERROR);
	    }

	addr += ix;
	unitSize -= ix;
	if (unitSize == 0)
	    {
            unitSize = info.unitSize;
            unitNo++;
            if (tffsRawio (driveNo, TFFS_PHYSICAL_ERASE, unitNo, 1, 0) != OK)
	        {
		printErr ("Failed attempting to erase Erase Unit %d\n", unitNo);
	        close (fd);
	        free( pBuf ) ;
	        return (ERROR);
	        }
	    }
	}

    close (fd);
    free( pBuf ) ;
    return (OK);
    }
    
#endif	/* INCLUDE_TFFS_BOOT_IMAGE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美蜜桃一区二区三区| 免费看黄色91| 色综合色狠狠综合色| 亚洲视频在线一区二区| 在线视频中文字幕一区二区| 亚洲影院免费观看| 欧美一区二区三区色| 久久66热re国产| 国产日韩欧美不卡在线| 99精品久久只有精品| 亚洲成在人线免费| 26uuu欧美日本| eeuss国产一区二区三区| 亚洲一区二区在线观看视频| 欧美一区二区三区四区久久| 国产99久久精品| 亚洲影院久久精品| 久久亚洲精品小早川怜子| 成人黄色国产精品网站大全在线免费观看| 国产精品福利一区| 69av一区二区三区| 粉嫩欧美一区二区三区高清影视 | 欧美另类videos死尸| 麻豆极品一区二区三区| 中文字幕一区二区三区av| 欧美妇女性影城| 国产91精品一区二区| 亚洲一区在线看| 精品成人私密视频| 91福利视频久久久久| 精品制服美女丁香| 亚洲综合久久av| 久久精品亚洲一区二区三区浴池| 在线免费观看不卡av| 国产一区高清在线| 亚洲国产日产av| 国产精品理论在线观看| 91精品欧美福利在线观看| 国产aⅴ综合色| 日本不卡不码高清免费观看| 亚洲人成网站在线| 精品久久久三级丝袜| 日本韩国欧美一区二区三区| 国产精品一区二区男女羞羞无遮挡| 亚洲精品视频免费看| 久久精品网站免费观看| 日韩一区二区三区视频| 欧美少妇bbb| 99re热视频这里只精品| 国产一区二区视频在线播放| 日av在线不卡| 亚洲第一福利视频在线| 亚洲少妇最新在线视频| 中文字幕电影一区| 亚洲精品一区二区三区精华液| 欧美亚洲一区二区在线| av电影一区二区| 国产精品羞羞答答xxdd| 精品在线一区二区三区| 欧美a一区二区| 亚洲成人精品影院| 亚洲不卡av一区二区三区| 亚洲精选一二三| 国产精品麻豆视频| 国产女主播视频一区二区| 久久品道一品道久久精品| 欧美成人伊人久久综合网| 69堂国产成人免费视频| 在线成人高清不卡| 欧美日韩国产免费一区二区 | 国产精品夜夜嗨| 国产一区二区三区在线观看免费| 免费av网站大全久久| 五月天激情综合网| 喷水一区二区三区| 久久精品国产99国产| 免费成人美女在线观看.| 免费日韩伦理电影| 久久99久久99| 国产精品99久久久久久久女警 | 99久精品国产| 日本精品一区二区三区高清 | 欧美亚洲尤物久久| 亚洲国产日韩在线一区模特| 亚洲欧美电影一区二区| 亚洲摸摸操操av| 一区二区三区自拍| 亚洲影院在线观看| 日韩高清不卡在线| 另类小说综合欧美亚洲| 国产一区二区伦理片| 丁香婷婷综合色啪| 91麻豆福利精品推荐| 色哟哟一区二区| 欧美喷潮久久久xxxxx| 欧美一区二区三区在线看| 国产调教视频一区| 国产欧美一区二区精品性色超碰| 国产精品国产三级国产| 一区二区在线观看免费| 天堂在线一区二区| 国产在线观看一区二区 | 亚洲午夜精品网| 亚洲综合久久久| 美女一区二区三区| 国产成人亚洲综合a∨猫咪| 91免费版在线看| 欧美精品一二三四| 国产日韩成人精品| 亚洲电影在线播放| 激情久久五月天| 91在线国产福利| 日韩精品专区在线| 亚洲免费观看高清在线观看| 日韩avvvv在线播放| 成人高清伦理免费影院在线观看| 欧美性猛交xxxx黑人交| 精品日韩在线观看| 亚洲三级免费观看| 久久国产精品色婷婷| 91丨九色丨尤物| 日韩欧美国产麻豆| 一区二区三区91| 国产精品18久久久久久vr| 在线观看日产精品| 国产亚洲成av人在线观看导航| 一片黄亚洲嫩模| 国产一区二区三区观看| 欧美日韩中文字幕一区| 欧美激情一区二区三区全黄| 日韩主播视频在线| 91在线观看一区二区| 久久综合精品国产一区二区三区| 一区二区三区四区不卡在线 | 91蝌蚪porny| 久久久久青草大香线综合精品| 亚洲国产精品影院| 国产91丝袜在线18| 97久久久精品综合88久久| 成人一道本在线| 欧美成人精品1314www| 亚洲大片在线观看| 99r精品视频| 亚洲婷婷国产精品电影人久久| 久久99精品国产麻豆不卡| 欧美日韩精品是欧美日韩精品| 久久精品一二三| 一区二区三区蜜桃| 99久久综合精品| 五月婷婷欧美视频| 不卡的电影网站| 精品第一国产综合精品aⅴ| 亚洲国产日日夜夜| 欧美午夜免费电影| 一区av在线播放| 色婷婷国产精品综合在线观看| 国产精品视频一二三| 国产精品综合视频| 26uuu精品一区二区三区四区在线| 日韩黄色一级片| 3d动漫精品啪啪1区2区免费| 午夜精品福利在线| 7878成人国产在线观看| 亚洲成av人综合在线观看| 欧美午夜精品免费| 亚洲高清不卡在线观看| 欧美日韩小视频| 日产欧产美韩系列久久99| 欧美精品一卡二卡| 奇米一区二区三区av| 欧美电视剧免费观看| 老司机精品视频线观看86| 2023国产精华国产精品| 国产精品亚洲成人| 欧美激情中文不卡| 99国产精品99久久久久久| 一区二区三区在线免费播放| 欧美日韩中文国产| 日本va欧美va精品| 久久色视频免费观看| 国产99久久久国产精品潘金| 日韩美女啊v在线免费观看| 日本福利一区二区| 无吗不卡中文字幕| 欧美成人在线直播| 不卡av电影在线播放| 亚洲精品免费播放| 在线播放/欧美激情| 精品一区二区综合| 国产精品卡一卡二卡三| 色婷婷激情综合| 麻豆91精品视频| 中文字幕欧美激情一区| 91同城在线观看| 日本欧美一区二区| 国产精品网友自拍| 欧美日韩视频在线一区二区| 久草精品在线观看| 怡红院av一区二区三区| 日韩欧美黄色影院|