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

📄 lambdrv.c

📁 Vxworks的培训教程,大家分享下啊,
💻 C
字号:
/* lambDrv.c - simple (baby) ram disk driver */#include "vxWorks.h"#include "blkIo.h"#include "ioLib.h"#include "iosLib.h"#include "memLib.h"#define BLK_SIZE	512typedef struct		/* LAMB_DEV - ram disk device descriptor */    {    BLK_DEV	 lamb_blkdev;	/* generic block device structure */    char	 *lamb_addr;	/* memory location of the ram disk */    } LAMB_DEV;/* FORWARD DECLARATIONS */LOCAL STATUS lambIoctl ();LOCAL STATUS lambBlkRd ();LOCAL STATUS lambBlkWrt ();STATUS lambDrv ()    {    return (OK);			/* no initialization required */    }BLK_DEV *lambDevCreate (nBlocks)    int			nBlocks;	/* Number of blocks on this device */    {    FAST LAMB_DEV	*pLambDev;	/* ptr to created LAMB_DEV struct */    FAST BLK_DEV	*pBlkDev;	/* ptr to BLK_DEV struct in LAMB_DEV */    /* Set up defaults for any values not specified */    if (nBlocks == 0)		return (NULL);    /* Allocate a LAMB_DEV structure for device */    pLambDev = (LAMB_DEV *) malloc (sizeof (LAMB_DEV));    if (pLambDev == NULL)		return (NULL);					/* no memory */    /* Initialize BLK_DEV structure (in LAMB_DEV) */    pBlkDev = &pLambDev->lamb_blkdev;    pBlkDev->bd_nBlocks      = nBlocks;		/* number of blocks */    pBlkDev->bd_bytesPerBlk  = BLK_SIZE;	/* bytes per block */    pBlkDev->bd_blksPerTrack = nBlocks;	/* blocks per track */    pBlkDev->bd_nHeads       = 1;		/* one "head" */    pBlkDev->bd_removable    = FALSE;		/* not removable */    pBlkDev->bd_retry	     = 0;		/* retry count */    pBlkDev->bd_mode	     = UPDATE;		/* initial mode for device */    pBlkDev->bd_readyChanged = TRUE;		/* new ready status */    pBlkDev->bd_blkRd	     = lambBlkRd;	/* read block function */    pBlkDev->bd_blkWrt	     = lambBlkWrt;	/* write block function */    pBlkDev->bd_ioctl	     = lambIoctl;	/* ioctl function */    pBlkDev->bd_reset	     = NULL;		/* no reset function */    pBlkDev->bd_statusChk    = NULL;		/* no check-status function */    /* Initialize remainder of device struct */	pLambDev->lamb_addr = (char *) malloc ((UINT) (BLK_SIZE * nBlocks));	if (pLambDev->lamb_addr == NULL)	    {	    free ((char *) pLambDev);	    return (NULL);				/* no memory */	    }    return (&pLambDev->lamb_blkdev);    }LOCAL STATUS lambIoctl (pLambDev, function, arg)    LAMB_DEV	*pLambDev;		/* device structure pointer */    int		function;		/* function code */    int		arg;			/* some argument */    {    FAST int	status;			/* returned status value */    switch (function)	{	case FIODISKFORMAT:	    status = OK;	    break;	default:	    errnoSet (S_ioLib_UNKNOWN_REQUEST);	    status = ERROR;	}    return (status);    }LOCAL STATUS lambBlkRd (pLambDev, startBlk, numBlks, pBuffer)    FAST LAMB_DEV	*pLambDev;	/* pointer to device desriptor */    int			startBlk;	/* starting block number to read */    int			numBlks;	/* number of blocks to read */    char		*pBuffer;	/* pointer to buffer to receive data */    {    /* Read the block(s) */    bcopy ((pLambDev->lamb_addr + (startBlk * BLK_SIZE)), pBuffer, 	   BLK_SIZE * numBlks);    return (OK);    }LOCAL STATUS lambBlkWrt (pLambDev, startBlk, numBlks, pBuffer)    FAST LAMB_DEV	*pLambDev;	/* pointer to device desriptor */    int			startBlk;	/* starting block number to write */    int			numBlks;	/* number of blocks to write */    char		*pBuffer;	/* pointer to buffer of data to write */    {    /* Write the block(s) */    bcopy (pBuffer, (pLambDev->lamb_addr + (startBlk * BLK_SIZE)),	   BLK_SIZE * numBlks);    return (OK);    }

⌨️ 快捷键说明

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