于金成
[摘 要]结合工程实践,介绍了在VxWorks实时操作系统下利用DiskOnChip建立开发环境的步骤、方法,可以满足系统的使用要求,方面嵌入式系统的开发。
[关键词]嵌入式系统;DiskOnChip; VxWorks
中图分类号:TP216 文献标识码:A 文章编号:1009-914X(2016)18-0368-01
随着嵌入式系统的广泛使用,VxWorks下基于DiskOnChip的软件开发也日益流行。本文详细介绍了VxWorks下基于DiskOnChip的软件开发环境的建立过程及方法,通过实验,验证了该方法方便可行,可以极大的方便软件开发人员,提高嵌入式软件的开发效率。
1 在BSP中添加对DiskOnChip设备的支持
下载DiskOnChip的驱动包并解压,得到驱动MSYSVXW.o和.h头文件。将所有的.h文件拷贝到宿主机文件
然后执行命令行:
ar386 -cru libI80486gnuvx.a MSYSVXW-I80486.o将驱动文件MSYSVXW.o加入到BSP库文件中;修改config.h文件,在config.h中增加对电子盘宏定义,同时,关闭TFFS的宏定义。
#define INCLUDE_DISKONCHIP #undef INCLUDE_TFFS 修改bootConfig.c文件,在函数usrInit()之前增加下面的代码:#ifdef INCLUDE_DISKONCHIP#include "flioctl.h"
#include "fldrvvxw.h"#ifdef __STDC__void devSplit (char *fullFileName, char *devName);#elsevoid devSplit ();#endif /* __STDC__ */unsigned long tffsAddresses[] = {0xd0000, 0xd0000};
STATUS usrTffsConfig(int drive, /* TFFS handle (usually zero) */int removable, /* 0 - nonremovable flash media */char * fileName /* mount point */{
BLK_DEV * pBootDev;char bootDir [BOOT_FILE_LEN];/* create block device spanning entire disk (non-destructive!) */if ((pBootDev = tffsDevCreate (drive, 0)) == NULL)
{printErr ("tffsDevCreate(%d,0) failed.\n", drive);return (ERROR);}/* split off boot device from boot file */devSplit (fileName, bootDir);/* initialize boot block device as dosFs device named
{printErr ("dosFsDevInit failed.\n");return (ERROR);}ioDefPathSet(bootDir);return (OK);}LOCAL STATUS tffsInit(void){/* tell driver to detect single DiskOnChip */
tffsSetup (1, tffsAddresses);if (tffsDrv () != OK){printErr ("Could not initialize.\n");return (ERROR);}printf ("Attaching to TFFS... ");dosFsInit (NUM_DOSFS_FILES); /* initialize DOS-FS */if (usrTffsConfig (0, 0, “/tffs0”) == ERROR){printErr ("usrTffsConfig failed.\n");return (ERROR);}printErr ("done.\n");
return(OK); } LOCAL STATUS tffsLoad(int drive, /* TFFS handle (normally zero) */
int removable, /* 0 - nonremovable flash media */char * fileName, /* file name to download */FUNCPTR * pEntry){int fd;if ((fd = open (fileName, O_RDONLY, 0)) == ERROR)
{printErr ("\nCannot open \"%s\".\n", fileName);return (ERROR);}if (bootLoadModule (fd, pEntry) != OK)goto tffsLoadErr;close (fd);return (OK);tffsLoadErr:printErr ("\nerror loading file: status = 0x%x.\n", errnoGet ());close (fd);return (ERROR);}#endif /* INCLUDE_DISKONCHIP */
修改bootConfig.c文件,在函数bootHelp()的helpMsg[]中增加下面的代码段:
#ifdef INCLUDE_DISKONCHIP
"boot device: tffs=drive,removable file name: /tffs0/vxWorks","",
#endif /* INCLUDE_DISKONCHIP */
在bootConfig.c的函数bootHelp()中增加下面的代码段:
#ifdef INCLUDE_DISKONCHIP printf (" tffs");#endif /* INCLUDE_DISKONCHIP */
在bootConfig.c的函数bootLoad()的最后增加下面的代码段:
#ifdef INCLUDE_DISKONCHIP
if (strncmp (params.bootDev, "tffs", 4) == 0)
{int drive = 0;int removable = 0;if (strlen (params.bootDev) == 4)
return (ERROR);elsesscanf (params.bootDev, "%*4s%*c%d%*c%d", &drive, &removable);
if (tffsLoad (drive, 0, params.bootFile, pEntry) != OK){printErr ("\nError loading file: errno = 0x%x.\n", errno);return (ERROR);}return (OK);}#endif /* INCLUDE_DISKONCHIP */
在bootConfig.c中下面代码段增加宏定义INCLUDE_DISKONCHIP:
#if (defined (INCLUDE_SCSI_BOOT) || defined (INCLUDE_FD) || defined (INCLUDE_IDE) || defined (INCLUDE_ATA) || defined (INCLUDE_DISKONCHIP) || defined (INCLUDE_TFFS))
最后,在bootConfig.c的函数bootCmdLoop中调用tffsInit()。
#ifdef INCLUDE_DISKONCHIP tffsInit();#endif
到这里,BSP包修改完毕,已经增加了对DiskOnChip设备的支持,可以支持从DiskOnChip启动VxWorks操作系统了。
2 DiskOnChip的环境配置
为了能够从DiskOnChip中启动VxWorks系统,必须先将电子盘格式化成VxWorks可引导的。首先,制作一张DOS启动盘并引导目标机,然后执行dformat /win:d000 /s:doc123.exb命令实现对DiskOnChip的格式化和驱动安装。用DOS启动盘重新引导目标机,执行vxsys命令,将DiskOnChip设备做成VxWorks可引导的。这样,DiskOnChip就可以引导bootrom启动了。
3 结论
DiskOnChip作为一种新型的存储设备,以体积小、功耗低和方便使用等特点,使得它被广泛应用于嵌入式系统。VxWorks系统由于它的强实时性和高可靠性,也成为嵌入式系统软件开发的首先。本文详细介绍了VxWorks下基于DiskOnChip设备的开发环境的建立方法和步骤,经过实验验证,本方法切实可行,可以方便软件开发人员,快速构建VxWorks环境下基于DiskOnChip的嵌入式系统的软件开发。
参考文献:
[1]洪艳伟. 基于DOC的嵌入式远程数据采集系统开发[J]. 信息安全与技术,2011,12:64-65.
[2]赵旭,罗晋,吴捷,杨杰,祝小莲. TrueFFS文件系统技术研究及实现[J]. 信息安全与通信保密,2008,05:83-85.
[3]甄鹏,赵磊,刘永亮,范静丽. 在DOC上创建嵌入式实时Linux[J]. 微计算机信息,2008,29:68-70.
[4]吴浩,吴非. 基于DOC的嵌入式系统引导研究与实现[J]. 微处理机,2007,03:114-116+119.