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

📄 nvramtoata.c

📁 Vxworks下的C例子程序
💻 C
字号:
/* nvRamToAta.c - non-volatile RAM mapping to Ata for boot line storage */

/* Copyright 1996 RST Software Industries, Ltd, Israel */

/*
modification history
--------------------
01a,25dec96,vlad@rst  created.
*/

/*
DESCRIPTION
This library simulates NVRAM on a Ata disk for boot line
storage only. This library is intended to PC-x86 targets, that
are not accompany with NVRAM or flash memory and obtain bootrom
image from Ata disk.
*/

#ifndef __NVRAM_TO_ATA__
#define __NVRAM_TO_ATA__

/* includes */
 
#include <vxWorks.h>
#include "drv/mem/memDev.h"
#include "config.h"
#include "dosFsLib.h"

/* defines */

/* globals */
/* device names to search for */
char *	nvBlDevNames[] = {"/ata0"/* default name */ , "c:"};
int	nvBlDevNameInd = (-1);

/******************************************************************************
* nvAtaDevInit - to init DOSFS on the Ata device.
*
* RETURNS OK.
*/

LOCAL STATUS nvAtaDevInit()
    {
    int	fd;
    BLK_DEV *pBootDev;
    int ctrl = 0;

    ATA_RESOURCE *pAtaResource	= &ataResources[ctrl];

    if( nvBlDevNameInd != (-1) )
	return OK;
    if (ataDrv (ctrl, pAtaResource->drives, pAtaResource->intVector,
		pAtaResource->intLevel, pAtaResource->configType,
		pAtaResource->semTimeout, pAtaResource->wdgTimeout) == ERROR)
	{
	printErr ("Could not initialize.\n");
	return (ERROR);
	}

    printf ("Attaching to ATA disk device... ");

    dosFsInit (NUM_DOSFS_FILES);        /* initialize DOS-FS */
    fd = usrAtaConfig (0,0,"/ata0"); 


    printErr("Ata device %s created\n", nvBlDevNames[ 0 ] );

    nvBlDevNameInd = 0;

    return OK;
    }

/*******************************************************************************
*
* sysNvRamSet - write boot linre onto Ata disk
*
* This routine copies a specified string into bootline file on the Ata
* disk.
*
* RETURNS: OK, or ERROR if access is outside the non-volatile RAM range.
*
* SEE ALSO: sysNvRamGet()
*/

STATUS sysNvRamSet
    (
    char *string,     /* string to be copied into non-volatile RAM */
    int strLen,       /* maximum number of bytes to copy           */
    int offset        /* byte offset into non-volatile RAM         */
    )
    {
    int fd;
    char	name[ 20 ] = {EOS};

    printErr("Store boot line to file. Please wait...\n");

    if( nvAtaDevInit() == ERROR )
    	return ERROR;

    sprintf(name,"%s/bootline.dat", "/ata0" );
    fd = creat( name, O_WRONLY );
    if( fd == ERROR )
    	{
    	printErr("Error create file to store boot line onto Ata disk\n");
    	return ERROR;
    	}
    if( write(fd, string, strLen ) < strLen )
        {
        printErr("Error store boot line onto Ata disk\n");
        return ERROR;
        }
    close( fd ); 
    return OK;
    }

/*******************************************************************************
* sysNvRamGet - get boot line from Ata disk.
*
* This routine copies the contents of bootline file into a specified
* string.  The string will be terminated with an EOS.
*
* RETURNS: OK, or ERROR if access is outside the non-volatile RAM range.
*
* SEE ALSO: sysNvRamSet()
*/

STATUS sysNvRamGet
    (
    char *string,     /* string to be copied into non-volatile RAM */
    int strLen,       /* maximum number of bytes to copy           */
    int offset        /* byte offset into non-volatile RAM         */
    )
    {
    int fd;
    char        name[ 20 ] = {EOS};

    printErr("Try to read boot line\n");

    if( nvAtaDevInit() == ERROR )
        return ERROR;

    sprintf(name,"%s/bootline.dat", "/ata0" );
    fd = open( name, O_RDONLY, 0 );
    if( fd == ERROR )
        {
        printErr("Error: boot line file %s not found\n", name );
        return ERROR;
        }
    if( read(fd, string, strLen ) == ERROR )
        {
        printErr("Error read boot line from Ata disk\n");
        return ERROR;
        }
    string [strLen] = EOS;
    close( fd );
    return OK;
    }

#endif /* __NVRAM_TO_ATA__ */








⌨️ 快捷键说明

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