在DiskOnChip上构建VxWorks系统开发环境
   来源:中国科技博览     2021年06月04日 23:17

于金成

[摘 要]结合工程实践,介绍了在VxWorks实时操作系统下利用DiskOnChip建立开发环境的步骤、方法,可以满足系统的使用要求,方面嵌入式系统的开发。

[关键词]嵌入式系统;DiskOnChip; VxWorks

中图分类号:TP216 文献标识码:A 文章编号:1009-914X(2016)18-0368-01

随着嵌入式系统的广泛使用,VxWorks下基于DiskOnChip的软件开发也日益流行。本文详细介绍了VxWorks下基于DiskOnChip的软件开发环境的建立过程及方法,通过实验,验证了该方法方便可行,可以极大的方便软件开发人员,提高嵌入式软件的开发效率。

1 在BSP中添加对DiskOnChip设备的支持

下载DiskOnChip的驱动包并解压,得到驱动MSYSVXW.o和.h头文件。将所有的.h文件拷贝到宿主机文件下。使用ar命令从/target/lib/libi80486gnuvx.a库文件中删除tffsDrv.o tffsLib.o dosformt.o fatlite.o fltl.o nftllite.o flflash.o nfdc2148.o reedsol.o flsocket.o flbase.o等目标文件。例如,删除tffsDrv.o,命令格式为:ar386 -dv libI80486gnuvx.a tffsDrv.o。

然后执行命令行:

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 unsigned long tffsAddresses[] = {0xd0000, 0xd0000};

STATUS usrTffsConfig(int drive, int removable, char * fileName {

BLK_DEV * pBootDev;char bootDir [BOOT_FILE_LEN];if ((pBootDev = tffsDevCreate (drive, 0)) == NULL)

{printErr ("tffsDevCreate(%d,0) failed.\n", drive);return (ERROR);}devSplit (fileName, bootDir);if (dosFsDevInit (bootDir, pBootDev, NULL) == NULL)

{printErr ("dosFsDevInit failed.\n");return (ERROR);}ioDefPathSet(bootDir);return (OK);}LOCAL STATUS tffsInit(void){

tffsSetup (1, tffsAddresses);if (tffsDrv () != OK){printErr ("Could not initialize.\n");return (ERROR);}printf ("Attaching to TFFS... ");dosFsInit (NUM_DOSFS_FILES); if (usrTffsConfig (0, 0, “/tffs0”) == ERROR){printErr ("usrTffsConfig failed.\n");return (ERROR);}printErr ("done.\n");

return(OK); } LOCAL STATUS tffsLoad(int drive,

int removable, char * fileName, 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

修改bootConfig.c文件,在函数bootHelp()的helpMsg[]中增加下面的代码段:

#ifdef INCLUDE_DISKONCHIP

"boot device: tffs=drive,removable file name: /tffs0/vxWorks","",

#endif

在bootConfig.c的函数bootHelp()中增加下面的代码段:

#ifdef INCLUDE_DISKONCHIP printf (" tffs");#endif

在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

在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.

文章 罗晋 文件