VxWorks入门06:虚拟机中运行

2023-05-16

在下载的VxWorks安装包中,包含了一份在虚拟机下安装测试的文档,我们按照这个文档测试一下。

VxWorks 6.8.3 + VxWorks Workbench 3.2.3 + VMware 16.1.2 + MS-DOS 6.22 软盘版

按照FTP连接的主机和目标机,将整个VxWorks6.8的安装分为两个部分,一是在主机(win10系统,可以使用虚拟机或者实体机,推荐使用虚拟机)上安装workbench3.2,进行bootrom与VxWroks映像文件的生成,二是在虚拟机上安装VxWorks系统。

编译BSP

1、找到WorkBench的安装目录,目录名为WindRiver,找到vxworks-6.8目录,进入找到target目录,进入找到config目录,进入找到pcPentium4目录

dir

Makefile

Makefile文件控制镜像的创建,在Makefile文件里使用了将近135个宏,最简单的Makefile文件要包含以下的宏:

  • CPU:目标板CPU的类型;
  • TOOL:主机的make工具,为GNU;
  • TGT_DIR:target路径,默认为$(WIND_BASE)/target;
  • TARGET_DIR:BSP目录名;
  • VENDER:目标板生产商名;
  • BOARD:目标板名;
  • ROM_TEXT_ADRS:boot ROM的入口地址(以16进制表示,并且与config.h文件定义相同);
  • ROM_SIZE:ROM的大小;
  • RAM_LOW_ADRS:加载vxWorks的目标地址;
  • RAM_HIGH_ADRS:boot ROM拷贝到RAM的目标地址;
  • HEX_FLAGS:特殊结构的标记,用于产生S-记录文件;
  • MACH_EXTRA:扩展文件,用户可以加入自己的目标模块;
  • 除此以外,Makefile文件还需要包括以下文件:
  • $(TGT_DIR)/h/make/defs.bsp:Vxworks系统运行的标准变量定义;
  • $(TGT_DIR)/h/make/make.$(CPU)$(TOOL):提供了特别的目标机结构和一套编译工具,如make. ARM7TDMI_Tgnu;
  • $(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE):提供了与主机系统有关的定义;
  • rules.bsp:在创建目标文件时所需要的规则;
  • rules.$(WIND_HOST_TYPE):指出创建目标文件时所需的从属文件表;
  • 如果没有用all目录下的文件而是拷贝到bspname下修改并使用,需要定义与这些文件有关的宏,如 BOOTINIT=bootInit.c 这样在创建镜像时就不会用all目录下的文件而使用bspname目录下的相应文件了;
  • 在Makefile文件里凡是16进制数前面都无需加“0x”;

bspname.h

根据具体目标板设置串行接口、时钟以及I/O设备等。在该文件中必须包含以下内容:

  • 中断向量/级别
  • I/O设备地址
  • 设备寄存器位的含义
  • 系统和附加时钟参数(最大和最小速率)

config.h

根据目标板的具体情况配置宏定义,注意ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS要与Makefile文件里定义的一致,LOCAL_MEM_LOCAL_ADRS和LOCAL_MEM_SIZE要正确。

romInit.s

这是系统上电后运行的第一个程序,根据具体目标板对寄存器和CPU进行设置;以CPU为ARM7TDMI为例,romInit.s 需要进行的工作有:

  • 保存启动方式:对于冷启动,如果CPU配置的是HIGH VECTORS,就设置入口地址为0xFFFF0000,否则设置入口地址为0x00000000;
  • 屏蔽中断:通过设置cpsr的I_BIT和F_BIT都为1来实现,还要设置中断寄存器为关模式,同时设定运行模式为SVC32模式;
  • 初始化堆栈指针pc和sp:堆栈指针sp指向STACK_ADRS,这个宏的定义为当镜像为驻留ROM时,该宏值为_sdata,当镜像为非驻留ROM时该宏值为_romInit,这两个地址经过地址映射后都指向被拷贝镜像在RAM的目标地址;
  • 初始化cache,屏蔽cache;
  • 根据具体目标板的需要初始化其他寄存器;
  • 指针跳转到romStart()函数并执行;

sysALib.s

与romInit.s文件实现的功能相似,但如果在romInit.s文件里对DRAM和内存控制器进行了初始化在这里不再进行这项工作;

复制到config目录,重命名为Pentium4(自己取名,最好不要带空格或什么特殊符号)

new

我们要修改编译bootrom、VxWorks的配置头文件Config.h中定义的一些参数,使编译出来的系统引导程序bootrom和VxWorks的映象符合我们的要求;

修改config.h

1、定位到目录C:\WindRiver\vxworks-6.8\target\config\Pentium4并打开该目录下 config.h 文件;定位到INCLUDE_CPU_PROBE,

/* CPU auto detection with sysCpuProbe() that support Intel CPUs for now */

#define INCLUDE_CPU_PROBE       /* define to perform sysCpuProbe() */
#ifndef INCLUDE_CPU_PROBE
#   undef  CPU
#   define CPU      PENTIUM     /* for CPU conditionals in BSP */
#endif  /* INCLUDE_CPU_PROBE */
#define X86CPU_DEFAULT  X86CPU_PENTIUM  /* for sysProcessor set in BSP */

更改成如下:

/* CPU auto detection with sysCpuProbe() that support Intel CPUs for now */

#undef INCLUDE_CPU_PROBE       /* define to perform sysCpuProbe() */
#ifndef INCLUDE_CPU_PROBE
#   undef  CPU
#   define CPU      PENTIUM     /* for CPU conditionals in BSP */
#endif  /* INCLUDE_CPU_PROBE */
#define X86CPU_DEFAULT  X86CPU_PENTIUM  /* for sysProcessor set in BSP */

2、定位到定义 DEFAULT_BOOT_LINE 宏的地方,

/* Default boot line */

#if (CPU == I80386)
#define DEFAULT_BOOT_LINE \
    "fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=target"
#elif   (CPU == I80486)
#define DEFAULT_BOOT_LINE \
    "fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=target"
#elif   (CPU == PENTIUM)
#define DEFAULT_BOOT_LINE \
    "fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=target"
#elif   (CPU == PENTIUM2)
#define DEFAULT_BOOT_LINE \
    "fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=target"
#elif   (CPU == PENTIUM3)
#define DEFAULT_BOOT_LINE \
    "fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=target"
#elif   (CPU == PENTIUM4)
#define DEFAULT_BOOT_LINE \
    "fd=0,0(0,0)host:/fd0/vxWorks.st h=90.0.0.3 e=90.0.0.50 u=target"
#endif  /* (CPU == I80386) */

修改预处理条件 CPU = = PENTIUM4 分支下的定义如下:

"lnPci(0,0)host:vxWorks h=192.168.33.133 e=192.168.33.134 u=target pw=target tn=target"

这里的h(host)地址表示你的主机IP地址,可以先修改为主机IP地址,或者随便填一个IP地址,之后修改主机地址为该地址,e(target)地址表示VxWorks系统目标机的IP地址,只需要和主机IP地址在同一个网段内即可,u=target pw=target是FTP下载的用户名和密码,都可以根据自己实际情况修改,最好使用target,简单易记。

3、定位到INCLUDE_ATA,

#undef	INCLUDE_ATA             /* include IDE/EIDE(ATA) hard disk driver */

在前面一句添加#undef INCLUDE_FD,如下所示:

#undef  INCLUDE_FD              /* include floppy disk driver */
#undef	INCLUDE_ATA             /* include IDE/EIDE(ATA) hard disk driver */

4、定位到/* Network driver options: VxBus drivers */

/* Network driver options: VxBus drivers */

#undef  INCLUDE_AM79C97X_VXB_END
#undef  INCLUDE_AN983_VXB_END
#ifndef _WRS_CONFIG_WRHV_GUEST
#define INCLUDE_FEI8255X_VXB_END
#endif
#define INCLUDE_GEI825XX_VXB_END
#undef  INCLUDE_MVYUKONII_VXB_END
#undef  INCLUDE_MVYUKON_VXB_END
#undef  INCLUDE_NS8381X_VXB_END
#undef  INCLUDE_RTL8139_VXB_END
#undef  INCLUDE_RTL8169_VXB_END
#undef  INCLUDE_TC3C905_VXB_END
#undef  INCLUDE_NE2000_VXB_END

作如下修改:

/* Network driver options: VxBus drivers */

#undef  INCLUDE_AM79C97X_VXB_END
#undef  INCLUDE_AN983_VXB_END
#undef  INCLUDE_FEI8255X_VXB_END
#undef  INCLUDE_GEI825XX_VXB_END
#undef  INCLUDE_MVYUKONII_VXB_END
#undef  INCLUDE_MVYUKON_VXB_END
#undef  INCLUDE_NS8381X_VXB_END
#undef  INCLUDE_RTL8139_VXB_END
#undef  INCLUDE_RTL8169_VXB_END
#undef  INCLUDE_TC3C905_VXB_END
#undef  INCLUDE_NE2000_VXB_END

5、定位到INCLUDE_LN_97X_END,

#undef  INCLUDE_LN_97X_END      /* (END) AMD 79C97x PCI interface */

将其定义上,修改如下:

#define  INCLUDE_LN_97X_END      /* (END) AMD 79C97x PCI interface */

6、定位到INCLUDE_PC_CONSOLE,

/* use global variable for console tty */

#undef CONSOLE_TTY
#define CONSOLE_TTY sysConsoleTty
#endif /* _WRS_CONFIG_WRHV_GUEST */

#undef INCLUDE_PC_CONSOLE                /* PC keyboard and VGA console */
#ifdef INCLUDE_PC_CONSOLE
#   define PC_CONSOLE           (0)      /* console number */
#   define N_VIRTUAL_CONSOLES   (2)      /* shell / application */
#   ifdef INCLUDE_VXBUS
#       define DRV_KBD_I8042
#       define DRV_VGA_M6845
#   endif /* INCLUDE_VXBUS */
#endif /* INCLUDE_PC_CONSOLE */

将其设成定义的,如下所示

/* use global variable for console tty */

#undef CONSOLE_TTY
#define CONSOLE_TTY sysConsoleTty
#endif /* _WRS_CONFIG_WRHV_GUEST */

#define INCLUDE_PC_CONSOLE                /* PC keyboard and VGA console */
#ifdef INCLUDE_PC_CONSOLE
#   define PC_CONSOLE           (0)      /* console number */
#   define N_VIRTUAL_CONSOLES   (2)      /* shell / application */
#   ifdef INCLUDE_VXBUS
#       define DRV_KBD_I8042
#       define DRV_VGA_M6845
#   endif /* INCLUDE_VXBUS */
#endif /* INCLUDE_PC_CONSOLE */

7、定位到 #if(SYS_WARM_TYPE == SYS_WARM_BIOS),

/* memory addresses, offsets, and size constants */

#if (SYS_WARM_TYPE == SYS_WARM_BIOS)            /* non-volatile RAM size */
#   define NV_RAM_SIZE          (NONE)
#else
#   define NV_RAM_SIZE          (0x1000)
#endif

#define LOCAL_MEM_LOCAL_ADRS    (0x00100000)    /* on-board memory base */
#define USER_RESERVED_MEM       (0)             /* user reserved memory */

修改如下:

/* memory addresses, offsets, and size constants */

#if (SYS_WARM_TYPE == SYS_WARM_BIOS)            /* non-volatile RAM size */
#   define NV_RAM_SIZE          (NONE)
#else
#   define NV_RAM_SIZE          (0x1000)
#endif

#ifdef NV_RAM_SIZE
#   undef  NV_RAM_SIZE
#   define NV_RAM_SIZE          (NONE)
#endif

#define LOCAL_MEM_LOCAL_ADRS    (0x00100000)    /* on-board memory base */
#define USER_RESERVED_MEM       (0)             /* user reserved memory */

修改configNet.h

1、定位到/* max number of END ipAttachments we can have */

/* max number of END ipAttachments we can have */

#ifndef IP_MAX_UNITS
#   define IP_MAX_UNITS (NELEMENTS (endDevTbl) - 1)
#endif

在上面添加如下内容:

/* Am79C97x (lnPci) driver defines */

#ifdef INCLUDE_LN_97X_END

#define LN_97X_LOAD_FUNC      sysLn97xEndLoad
#define LN_97X_BUFF_LOAN      TRUE
#define LN_97X_LOAD_STR       ""

IMPORT END_OBJ * LN_97X_LOAD_FUNC (char *, void *);

#endif /* INCLUDE_LN_97X_END */

/* max number of END ipAttachments we can have */

#ifndef IP_MAX_UNITS
#   define IP_MAX_UNITS (NELEMENTS (endDevTbl) - 1)
#endif

2、定位到/* Atheros AR521X WLAN Support */

/* Atheros AR521X WLAN Support */

#ifdef INCLUDE_AR521X_END
    {-1, END_TBL_END, NULL, 0, NULL, FALSE}, /* up to 4 Atheros NICs */
    {-1, END_TBL_END, NULL, 0, NULL, FALSE},
    {-1, END_TBL_END, NULL, 0, NULL, FALSE},
    {-1, END_TBL_END, NULL, 0, NULL, FALSE},
#endif /* INCLUDE_AR521X_END */

在上面添加如下内容:

#ifdef INCLUDE_LN_97X_END
    {0, LN_97X_LOAD_FUNC, LN_97X_LOAD_STR, LN_97X_BUFF_LOAN,
    NULL, FALSE},
#endif /* INCLUDE_LN_97X_END */

/* Atheros AR521X WLAN Support */

#ifdef INCLUDE_AR521X_END
    {-1, END_TBL_END, NULL, 0, NULL, FALSE}, /* up to 4 Atheros NICs */
    {-1, END_TBL_END, NULL, 0, NULL, FALSE},
    {-1, END_TBL_END, NULL, 0, NULL, FALSE},
    {-1, END_TBL_END, NULL, 0, NULL, FALSE},
#endif /* INCLUDE_AR521X_END */

添加In97xEnd.c

C:\WindRiver\vxworks-6.8\target\src\drv\end目录下的ln97xEnd.c拷贝进你的Pentium4目录下,

drv

并作如下修改,定位到:

do {
     ;  /* poll for suspend mode entry */
    }
while ((csrLockedRead (pDrvCtrl, CSR(5)) & CSR5_SPND) == 0);

添加宏如下:

#if !defined(VMWARE_HACK)
    do  {
        ;  /* poll for suspend mode entry */
        }
    while ((csrLockedRead (pDrvCtrl, CSR(5)) & CSR5_SPND) == 0);
#endif

添加Sysln97xEnd.c

由于workbench内本身没有提供,因此将我们提供的Sysln97xEnd.c移植到你的Pentium4目录下即可。

与原文件不同的地方在于:

1、定位到/* map a 4Kb 32-bit non-prefetchable memory address decoder */

#if !defined(VMWARE_HACK)
    /* map a 4Kb 32-bit non-prefetchable memory address decoder */

    if (sysMmuMapAdd ((void *)(memIo32 & PCI_DEV_MMU_MSK),
        PCI_DEV_ADRS_SIZE, VM_STATE_MASK_FOR_ALL, VM_STATE_FOR_PCI) == ERROR)
        {
        return (ERROR);
        }
#endif

2、定位到ln97xPciResources[ln97XUnits].bar[0] = ioBase;

    /* update the board-specific resource table */

    ln97xPciResources[ln97XUnits].bar[0]     = ioBase;
#if defined(VMWARE_HACK)
    ln97xPciResources[ln97XUnits].bar[1]     = (UINT32)NONE;
#else
    ln97xPciResources[ln97XUnits].bar[1]     = memIo32;
#endif
    ln97xPciResources[ln97XUnits].irq        = irq;
    ln97xPciResources[ln97XUnits].irqvec     = INT_NUM_GET (irq);

    ln97xPciResources[ln97XUnits].vendorID   = vendorId;
    ln97xPciResources[ln97XUnits].deviceID   = deviceId;
    ln97xPciResources[ln97XUnits].revisionID = revisionId;
    ln97xPciResources[ln97XUnits].boardType  = boardType;

修改makefile文件

定位到EXTRA_DEFINE,

EXTRA_DEFINE       = -DFAST_REBOOT

MACH_EXTRA         =

作如下修改:

EXTRA_DEFINE       = -DVMWARE_HACK -DFAST_REBOOT

MACH_EXTRA         = ln97xEnd.o

修改sysNet.c

1、定位到# include “sysUltraEnd.c”

/* includes */

#ifdef  INCLUDE_END
#   include "sysDec21x40End.c"          /* dec21x40End support routines */
#   include "sysElt3c509End.c"          /* elt3c509End support routines */
#ifdef INCLUDE_ENE_END
#   include "sysNe2000End.c"            /* ne2000End support routines   */
#endif
#   include "sysUltraEnd.c"             /* ultraEnd support routines    */
#endif  /* INCLUDE_END */

添加内容如下:

/* includes */

#ifdef  INCLUDE_END
#   include "sysDec21x40End.c"          /* dec21x40End support routines */
#   include "sysElt3c509End.c"          /* elt3c509End support routines */
#ifdef INCLUDE_ENE_END
#   include "sysNe2000End.c"            /* ne2000End support routines   */
#endif
#ifdef INCLUDE_LN_97X_END
#   include "sysLn97xEnd.c"
#endif
#   include "sysUltraEnd.c"             /* ultraEnd support routines    */
#endif  /* INCLUDE_END */

2、定位到LOCAL VEND_ID_DESC vendorIdEnet [] =

/* locals */

/* This table maps END PCI driver initialization routines to
 * the PCI Vendor IDs for supported (tested) device types.
 */

LOCAL VEND_ID_DESC vendorIdEnet [] =
    {
    #if defined(INCLUDE_DEC21X40_END)
    {DEC_PCI_VENDOR_ID,      sysDec21x40PciInit},
    #endif /* INCLUDE_DEC21X40_END */

    {0xffffffff, NULL}        /* last entry */
    };

修改内容如下:

/* locals */

/* This table maps END PCI driver initialization routines to
 * the PCI Vendor IDs for supported (tested) device types.
 */

LOCAL VEND_ID_DESC vendorIdEnet [] =
    {
    #if defined(INCLUDE_DEC21X40_END)
    {DEC_PCI_VENDOR_ID,      sysDec21x40PciInit},
    #endif /* INCLUDE_DEC21X40_END */

    #if defined(INCLUDE_LN_97X_END)
    {AMD_PCI_VENDOR_ID,      sysLan97xPciInit},
    #endif /* INCLUDE_LN_97X_END */

    {0xffffffff, NULL}        /* last entry */
    };

当然如果有现有的文件,直接复制覆盖就可以了。

2、打开Workbench3.2,Workspace就选择WindRiver目录下的workspace目录

workspace

3、File->New->Wind River Workbench Project,选择Wind River VxWorks 6.8,然后Next

new

target

4、Build type选择Boot Loader / BSP Project,然后Next

buildtype

5、Project name任取,最好与BSP相关,Location选择默认的in workspace,然后Next

name

6、Board support package选择步骤1中经过修改的Pentium4目录,Tool chain选择gnu,勾上Copy files to project,然后Finish

setup

7、右键选中项目,选择Build Project或者Rebuild Project进行构建

build

done

8、构建完成后,右键选中项目,选择Open Wind River VxWorks 6.8 Development Shell,打开命令行,cd进入Pentium4目录后,输入make bootrom.bin命令,将生成bootrom.bin文件

bootrom

9、找到workspace目录,找到该项目目录,在项目目录下找到Pentium4目录,进入并找到生成的bootrom.bin,复制出来,并修改后缀名为.sys,后续该文件作为引导程序

bootrom

10、找到vxload.com和vxsys.com两个文件(手动搜索,或者一般在XX\WindRiver\vxworks-6.8\host\x86-win32\bin目录下),与上一步得到的bootrom.sys放在一起,以待后续使用

vx

生成VxWorks镜像

根据具体需要在命令行环境下利用Makefile创建各种镜像,也可以在Tornado的集成环境下Build菜单中选择Build Boot ROM来创建各种类型的Boot ROM;

除此以外,如果系统硬件包括串口,还要根据具体情况修改sysSerial.c文件;如果包含网络部分要修改configNet.h;如果包含NVRAM要修改bootnv.h文件。总之,BSP的开发要根据具体目标板的硬件进行。

1、打开Workbench3.2,Workspace就默认为WindRiver目录下的workspace目录

2、File->New->Other,在Wizards内输入VxWorks image查找并选择VxWorks Image Project,然后Next

image

3、Project name任取,最好与Image相关,Location选择默认项in workspace,然后Next

name

4、4.Based on选择an existing project,Project中将显示此时workspace中的项目,选择第2章节中创建好的BSP项目,然后Finish

setup

5、右键选中项目,选择Build Project或者Rebuild Project构建

6、找到workspace目录,找到该项目目录,在项目目录下找到default目录,进入并找到生成的vxWorks以及vxWorks.sym,复制出来,后续这两个文件将作为VxWorks系统文件通过FTP引导系统

image

VxWorks虚拟机安装

1、首先使用DOS622镜像文件创建虚拟机,镜像文件格式为IMG,大小为1.44MB,软盘的大小。

2、使用VMware,新建虚拟机->典型->稍后安装操作系统->其他(MS-DOS)->自定义名称(默认为MS-DOS)和位置->使用默认最大磁盘大小2GB,将虚拟磁盘存储为单个文件->完成

3、打开上一步创建的虚拟机设置,在硬件部分“添加”“软盘驱动器”

floppy

4、软盘添加“完成”后,选择软盘,勾选“启动时连接”,以及“使用软盘映像文件”,并点击“浏览”选择提供的DOS662.img文件

image

5、选择CD/DVD,取消勾选“启动时连接”,修改内存大小为256MB(适当大小即可)

6、完成设置后,开启该虚拟机,进入开始界面,选择第三个选项Other IDE CD-ROM

startup

7、选择3后进入真正的DOS界面,开始进行硬盘分区,输入fdisk

other

8、选择1,建立DOS分区

fdisk

9、选择1,建立一个主分区

partition

10、选择Y,此时询问这个分区是否使用全部的空间,由于我们只需要一个分区就可以,因此选择Y

full

11、输入任意键,虚拟机将重启

done

12、重新选择3 Other IDE CD-ROM,进行主分区的格式化,输入format c: /s ,这里输入Y确认

format

13、这里询问是否填写卷标,由于并不需要所以直接回车即可

label

14、此时已经有主分区C盘了,关闭虚拟机,在虚拟机设置中选择硬盘,选择“映射”,取消勾选“以只读模式打开文件”后确定,弹出警告点“是”即可,由此将打开该虚拟机的硬盘空间

mapping

当时测试的是Windows10,在某一次更新之后,就无法实现虚拟磁盘映射了。经过测试,几乎所有Windows10版本都是这样,没办法,我只能在Win7上测试。

15、将章节2中的三个文件放入盘中后,在硬盘处“断开连接”,重新开启虚拟机,依然选择3,输入c:进入c盘(即主分区)

files

16、输入dir,可以看见三个文件已经在盘中了

files

17、输入vxsys c: 命令,输入y确认

boot

18、由此bootrom.sys成功设置为引导程序,关闭虚拟机,在虚拟机设置中选择软盘,取消勾选“启动时连接”,再次开启虚拟机,VxWroks系统虚拟机安装完成,其中IP地址为172.18.101.124,也就是所提供的config.h文件内设置的地址

boot

发现与我们修改的不一样,host的值是奔腾的值,我们修改错了。重新来一遍上面的步骤。

正常的效果应该是

boot

19、到主机中,设置主机IP为h的值

host

我的h值就是根据主机IP设置的。

20、在C:\WindRiver\vxworks-6.8\host\x86-win32\bin下找到wftpd32.exe,使用该程序进行FTP的连接,最好将该软件发送到桌面快捷方式以便使用

wftpd32

21、在任意位置创建一个文件夹,用来给目标机提供FTP文件目录,方便起见,我们直接在C盘下创建一个名为ftp的文件夹,将之前得到的vxWorksvxWorks.sym两个文件放入其中

ftp

22、打开wftpd32.exe,Security->Users/Rights->New User->创建一个名为target,密码为target的用户(这个用户名密码是在config.h文件修改时设定好的)

new

23、用户创建好后选择该用户,在Home Directory内填入C:\ftp,即21步中创建的文件夹,然后选择“Done”

security

24、重启VxWorks虚拟机,此时虚拟机将通过FTP连接载入VxWroks系统,完成

result

25、其中,如果在章节3中的文件,只将vxWorks文件放入FTP文件目录而不放置vxWorks.sym,VxWorks系统依然可以跑起来,但在命令行下将没有各种基本命令

我们已经利用基于VxWorks的BSP开发包成功的进行了线缆调制解调器的底层软件开发。在开发过程中深感BSP在整个系统软件中的重要性——没有正确的BSP软件,整个系统的启动和运行也不会正确。另外需要强调的是:BSP的概念只是针对嵌入式操作系统而言的,而像DOS、WINDOWS、UNIX等BIOS操作系统是无BSP可言的。对同一目标板而言,不同操作系统的BSP在本质上是一样的,但是不同的操作系统将提供不同的支持库,另外在BSP结构上也可能会有所不同,在做BSP移植的时候应该注意。

问题解决

mmuI86Enable

如果出现mmuI86Enableundefined reference ***之类的错误,表示编译连接的库中没有链接mmuI86Lib.o这个库。

在Makefile中添加上就可以了

EXTRA_DEFINE       = -DVMWARE_HACK -DFAST_REBOOT

MACH_EXTRA         = ln97xEnd.o mmuI86Lib.o

当然,要把位于arch/i86/下的mmuI86Lib.c复制到奔腾4目录下。

DOSIMG

DOSIMG版本经过测试7.1版本是不行的,现在使用的是6.22版本,不知道其他版本行不行。

本文附属的代码和编译结果在VxWorks_Freshman中,可以直接替换文件。

本文首发于:VxWorks入门06:虚拟机中运行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VxWorks入门06:虚拟机中运行 的相关文章

随机推荐

  • Android开机log和常见异常的分析

    Android开机log分析 1 如果开机过程还没有出现开机动画 xff0c 就已经异常 xff0c 直接抓取UART串口log xff1b 2 如果开机动画已经显示 xff0c 后面出现异常 xff0c 可以通过adb logcat抓取l
  • 面试题整理简历中深度学习机器学习相关的知识及linux操作系统命令

    深度学习与机器学习 都在整理关于后台的 xff0c 被问到后忘了 xff0c 尴尬 的确是我的问题 xff0c 基本的机器学习知识还是要整理一波 o inception 网络 xff1a 主要应用了深度可分离卷积 xff1a 主要用了大尺度
  • 面试可能遇到的问题野指针等解决方法

    空指针 xff1a 一般声明一个指针变量赋值为NULL xff0c 这就是空指针 xff0c 各个类型的空指针都存在确确实实的内存地址 xff0c 但是不会指向任何有效的值的内存地址 xff0c 对空指针操作 xff0c 例如访问属性和方法
  • 大规模分布式储存系统笔记(一)

    分布式储存系统的特性 xff1a 1 可扩展性 可按集群规模增长 xff0c 系统性能线性增长 xff1b 2 低成本 系统自动容错 xff0c 自动负载均衡 xff0c 运维方便 3 高性能 4 易用性 对外提供接口 数据类型 xff1a
  • 用MATLAB实现对运动物体识别与跟踪

    不得不说MATLAB的图像处理函数有点多 xff0c 但速度有时也是出奇的慢 还是想c的指针 xff0c 虽然有点危险 xff0c 但速度那是杠杠的 第二个MATLAB程序 xff0c 对运动物体的识别与追踪 这里我们主要运用帧差法实现运动
  • PS 开启GPU加速图片处理

    还认为你的电脑的速度效果比不上苹果吗 xff1f 还在嫌电脑渲染速度慢吗 xff1f 试一下 xff0c 电脑开启GPU硬件加速吧 xff01 只要有独显轻松加速 xff08 毕竟苹果笔记本要配独显电脑的价格基本上在15000以上 xff0
  • 【附源码】计算机毕业设计SSM社区团购系统

    项目运行 环境配置 xff1a Jdk1 8 43 Tomcat7 0 43 Mysql 43 HBuilderX xff08 Webstorm也行 xff09 43 Eclispe xff08 IntelliJ IDEA Eclispe
  • Maven 使用slf4j 没有输出控制台

    Maven 使用slf4j 没有输出控制台并报如下错 xff1a log4j WARN No appenders could be found span class hljs keyword for span logger Redissen
  • 管道鸟cortex-M4(TM4C1294)

    看到满屏的贪吃蛇 xff0c 我也来开源一个Ti开发板 xff08 TM4C1294 xff09 的游戏 将简化版的管道鸟 xff0c 根据自己玩的经历 xff0c 在cortexm4开发板上重新撸了一边 xff0c 设计思路 xff1a
  • C#连接MYSQL数据库并进行查询

    之前用MFC开发结果界面太难看被pass了 要求用C 重新来开发 gt lt 不过终于摆脱VC6 0的蛋疼操作了Y 先来连接数据库 xff08 1 xff09 用c 连接MYSQL数据库需要用到mysql connector net xff
  • Jetson tx2刷机过程中的坑

    暑假各种事忙得差不多后 xff0c 终于有时间拿出早就申请到的tx2 xff0c 开始刷机教程 xff0c 这两天几乎踩边了所有的坑 第一个坑 xff0c 虚拟机 一般在安装VMware虚拟机时 xff0c 建议的安装空间20GB xff0
  • python词云实现

    python的一个蛮酷炫的功能是可以轻松地实现词云 github上有关于这个项目的开源代码 xff1a https github com amueller word cloud 注意跑例程时要删除里面的wordcloud文件夹 词云的功能有
  • ubuntu18切换为gnome桌面托盘图标消失

    在软件菜单中选择 优化 拓展 gt Ubuntu appindicators xff0c 打开此项即可 效果
  • Expression #1 of ORDER BY clause is not in SELECT list, references column 'ekbX1.t0.name' which is n

    报错信息 xff1a Expression 1 of ORDER BY clause is not in SELECT list references column 39 ekbX1 t0 name 39 which is not in S
  • Archlinux + kde桌面环境 安装

    1 首先余留磁盘空间 2 xff1a 官网下载ArchLinux镜像 3 xff1a rufus刻录 4 xff1a 打开电脑从u盘启动 5 xff1a 首先联网 如果用wifi终端输入下面命令 xff1a wifi menu 如果是用网线
  • 判断图的连通子图个数

    题目要求 给定一个具有n个顶点 m条边的无向图G 假设项点的编号为1 n 基于深度优先搜索算法 xff0c 编写程序 求无向图G连通子图的个数 输入格式 第一行两个整数n m 分别表示图G的顶点数和边的数量 下面m行的每 行有两个整数a和b
  • Java常用包有哪些

    Java lang 语言包 Java语言的基础类 xff0c 包括Object类 Thread类 String Math System Runtime Class Exception Process等 xff0c 是Java的核心类库 最重
  • QT 建立透明背景图像QPixmap

    列将下面背景透明图片1转变成图片2 图1 图2 span class hljs preprocessor include 34 mainwindow h 34 span span class hljs preprocessor includ
  • Spring Boot——日志文件

    文章目录 1 日志的作用2 日志的用法3 自定义日志打印日志格式的说明 4 日志级别5 在配置文件中设置日志级别5 1设置全局的日志级别和局部文件夹的日志级别 6 日志持久化7 更简单的日志输出 lombok 1 日志的作用 日志的作用 x
  • VxWorks入门06:虚拟机中运行

    在下载的VxWorks安装包中 xff0c 包含了一份在虚拟机下安装测试的文档 xff0c 我们按照这个文档测试一下 VxWorks 6 8 3 43 VxWorks Workbench 3 2 3 43 VMware 16 1 2 43