📄 nvramtofloppy.c
字号:
/* nvRamToFloppy.c - non-volatile RAM mapping to floppy 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 floppy disk for boot line
storage only. This library is intended for PC-x86 targets, that
are not accompany with NVRAM or flash memory and obtain bootrom
image from floppy disk.
*/
#ifndef __NVRAM_TO_FLOPPY__
#define __NVRAM_TO_FLOPPY__
/* includes */
#include <vxWorks.h>
#include "drv/mem/memDev.h"
/* defines */
/* globals */
/* device names to search for */
char * nvBlDevNames[] = {"/fd0"/* default name */ , "A:"};
int nvBlDevNameInd = (-1);
/******************************************************************************
* nvFloppyDevInit - to init DOSFS on the floppy device.
*
* RETURNS OK.
*/
LOCAL STATUS nvFloppyDevInit()
{
int fd;
BLK_DEV *pBootDev;
if( nvBlDevNameInd != (-1) )
return OK;
for( nvBlDevNameInd = 0; nvBlDevNameInd < NELEMENTS( nvBlDevNames );
nvBlDevNameInd ++ )
{
fd = open( nvBlDevNames[ nvBlDevNameInd ], O_RDONLY, 0 );
if( fd != ERROR )
goto ret;
}
nvBlDevNameInd = (-1);
/* create floppy device */
fdDrv (FD_INT_VEC, FD_INT_LVL); /* initialize floppy disk driver */
if ((pBootDev = fdDevCreate (0, 0, 0, 0)) == NULL)
{
printErr ("fdDevCreate failed.\n");
return (ERROR);
}
dosFsInit (NUM_DOSFS_FILES); /* initialize DOS-FS */
if (dosFsDevInit ( nvBlDevNames[ 0 ], pBootDev, NULL) == NULL)
{
printErr ("dosFsDevInit failed.\n");
return (ERROR);
}
fd = open( nvBlDevNames[ 0 ], O_RDONLY, 0 );
if( fd == ERROR )
{
printErr ("floppy device %s create error\n", nvBlDevNames[ 0 ] );
return (ERROR);
}
printErr("Floppy device %s created\n", nvBlDevNames[ 0 ] );
nvBlDevNameInd = 0;
ret:
close( fd );
return OK;
}
/*******************************************************************************
*
* sysNvRamSet - write boot linre onto floppy disk
*
* This routine copies a specified string into bootline file on the floppy
* 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("Storing boot line to file. Please wait...\n");
if( nvFloppyDevInit() == ERROR )
return ERROR;
sprintf(name,"%s/bootline.dat", nvBlDevNames[ nvBlDevNameInd ] );
fd = creat( name, O_WRONLY );
if( fd == ERROR )
{
printErr("Error creating file to store boot line on floppy disk\n");
return ERROR;
}
if( write(fd, string, strLen ) < strLen )
{
printErr("Error storing boot line on floppy disk\n");
return ERROR;
}
close( fd );
return OK;
}
/*******************************************************************************
* sysNvRamGet - get boot line from floppy 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("Reading boot line\n");
if( nvFloppyDevInit() == ERROR )
return ERROR;
sprintf(name,"%s/bootline.dat", nvBlDevNames[ nvBlDevNameInd ] );
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 reading boot line from floppy disk\n");
return ERROR;
}
string [strLen] = EOS;
close( fd );
return OK;
}
#endif /* __NVRAM_TO_FLOPPY__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -