VxWorks入门06:虚拟机中运行
在下载的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目录
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(自己取名,最好不要带空格或什么特殊符号)
我们要修改编译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目录下,
并作如下修改,定位到:
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;
#elseln97xPciResources[ln97XUnits].bar[1] = memIo32;
#endifln97xPciResources[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_REBOOTMACH_EXTRA =
作如下修改:
EXTRA_DEFINE = -DVMWARE_HACK -DFAST_REBOOTMACH_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目录
3、File->New->Wind River Workbench Project,选择Wind River VxWorks 6.8,然后Next
4、Build type选择Boot Loader / BSP Project,然后Next
5、Project name任取,最好与BSP相关,Location选择默认的in workspace,然后Next
6、Board support package选择步骤1中经过修改的Pentium4目录,Tool chain选择gnu,勾上Copy files to project,然后Finish
7、右键选中项目,选择Build Project或者Rebuild Project进行构建
8、构建完成后,右键选中项目,选择Open Wind River VxWorks 6.8 Development Shell,打开命令行,cd进入Pentium4目录后,输入make bootrom.bin命令,将生成bootrom.bin文件
9、找到workspace目录,找到该项目目录,在项目目录下找到Pentium4目录,进入并找到生成的bootrom.bin,复制出来,并修改后缀名为.sys,后续该文件作为引导程序
10、找到vxload.com和vxsys.com两个文件(手动搜索,或者一般在XX\WindRiver\vxworks-6.8\host\x86-win32\bin目录下),与上一步得到的bootrom.sys放在一起,以待后续使用
生成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
3、Project name任取,最好与Image相关,Location选择默认项in workspace,然后Next
4、4.Based on选择an existing project,Project中将显示此时workspace中的项目,选择第2章节中创建好的BSP项目,然后Finish
5、右键选中项目,选择Build Project或者Rebuild Project构建
6、找到workspace目录,找到该项目目录,在项目目录下找到default目录,进入并找到生成的vxWorks以及vxWorks.sym,复制出来,后续这两个文件将作为VxWorks系统文件通过FTP引导系统
VxWorks虚拟机安装
1、首先使用DOS622镜像文件创建虚拟机,镜像文件格式为IMG,大小为1.44MB,软盘的大小。
2、使用VMware,新建虚拟机->典型->稍后安装操作系统->其他(MS-DOS)->自定义名称(默认为MS-DOS)和位置->使用默认最大磁盘大小2GB,将虚拟磁盘存储为单个文件->完成
3、打开上一步创建的虚拟机设置,在硬件部分“添加”“软盘驱动器”
4、软盘添加“完成”后,选择软盘,勾选“启动时连接”,以及“使用软盘映像文件”,并点击“浏览”选择提供的DOS662.img文件
5、选择CD/DVD,取消勾选“启动时连接”,修改内存大小为256MB(适当大小即可)
6、完成设置后,开启该虚拟机,进入开始界面,选择第三个选项Other IDE CD-ROM
7、选择3后进入真正的DOS界面,开始进行硬盘分区,输入fdisk
8、选择1,建立DOS分区
9、选择1,建立一个主分区
10、选择Y,此时询问这个分区是否使用全部的空间,由于我们只需要一个分区就可以,因此选择Y
11、输入任意键,虚拟机将重启
12、重新选择3 Other IDE CD-ROM,进行主分区的格式化,输入format c: /s
,这里输入Y确认
13、这里询问是否填写卷标,由于并不需要所以直接回车即可
14、此时已经有主分区C盘了,关闭虚拟机,在虚拟机设置中选择硬盘,选择“映射”,取消勾选“以只读模式打开文件”后确定,弹出警告点“是”即可,由此将打开该虚拟机的硬盘空间
当时测试的是Windows10,在某一次更新之后,就无法实现虚拟磁盘映射了。经过测试,几乎所有Windows10版本都是这样,没办法,我只能在Win7上测试。
15、将章节2中的三个文件放入盘中后,在硬盘处“断开连接”,重新开启虚拟机,依然选择3,输入c:进入c盘(即主分区)
16、输入dir,可以看见三个文件已经在盘中了
17、输入vxsys c: 命令,输入y确认
18、由此bootrom.sys成功设置为引导程序,关闭虚拟机,在虚拟机设置中选择软盘,取消勾选“启动时连接”,再次开启虚拟机,VxWroks系统虚拟机安装完成,其中IP地址为172.18.101.124,也就是所提供的config.h文件内设置的地址
发现与我们修改的不一样,host的值是奔腾的值,我们修改错了。重新来一遍上面的步骤。
正常的效果应该是
19、到主机中,设置主机IP为h的值
我的h值就是根据主机IP设置的。
20、在C:\WindRiver\vxworks-6.8\host\x86-win32\bin下找到wftpd32.exe,使用该程序进行FTP的连接,最好将该软件发送到桌面快捷方式以便使用
21、在任意位置创建一个文件夹,用来给目标机提供FTP文件目录,方便起见,我们直接在C盘下创建一个名为ftp的文件夹,将之前得到的vxWorks
,vxWorks.sym
两个文件放入其中
22、打开wftpd32.exe,Security->Users/Rights->New User->创建一个名为target,密码为target的用户(这个用户名密码是在config.h文件修改时设定好的)
23、用户创建好后选择该用户,在Home Directory内填入C:\ftp,即21步中创建的文件夹,然后选择“Done”
24、重启VxWorks虚拟机,此时虚拟机将通过FTP连接载入VxWroks系统,完成
25、其中,如果在章节3中的文件,只将vxWorks文件放入FTP文件目录而不放置vxWorks.sym,VxWorks系统依然可以跑起来,但在命令行下将没有各种基本命令
我们已经利用基于VxWorks的BSP开发包成功的进行了线缆调制解调器的底层软件开发。在开发过程中深感BSP在整个系统软件中的重要性——没有正确的BSP软件,整个系统的启动和运行也不会正确。另外需要强调的是:BSP的概念只是针对嵌入式操作系统而言的,而像DOS、WINDOWS、UNIX等BIOS操作系统是无BSP可言的。对同一目标板而言,不同操作系统的BSP在本质上是一样的,但是不同的操作系统将提供不同的支持库,另外在BSP结构上也可能会有所不同,在做BSP移植的时候应该注意。
问题解决
mmuI86Enable
如果出现mmuI86Enable
和undefined reference ***
之类的错误,表示编译连接的库中没有链接mmuI86Lib.o
这个库。
在Makefile中添加上就可以了
EXTRA_DEFINE = -DVMWARE_HACK -DFAST_REBOOTMACH_EXTRA = ln97xEnd.o mmuI86Lib.o
当然,要把位于arch/i86/
下的mmuI86Lib.c
复制到奔腾4目录下。
DOSIMG
DOSIMG版本经过测试7.1版本是不行的,现在使用的是6.22版本,不知道其他版本行不行。
本文附属的代码和编译结果在VxWorks_Freshman中,可以直接替换文件。
本文首发于:VxWorks入门06:虚拟机中运行
VxWorks入门06:虚拟机中运行相关推荐
- 虚拟主机可以运行java_下面哪种类型的文件可以在Java虚拟机中运行( ).
下面哪种类型的文件可以在Java虚拟机中运行( ). 答:.class 舌尖前送气清塞擦音是 答:c 中国大学MOOC: 已知 [X]原=10101100,[Y]补=11000110, 求 [X+Y] ...
- unity3d android 后台运行,unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android...
易采站长站为您分析unity3d发布apk在android虚拟机中运行的详细步骤,需要的朋友可以参考下 unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android ...
- 如何在虚拟机中运行知乎App
经过知乎大佬们的指点迷津,我将目光转向了模拟器,简单的尝试了几款模拟器之后,发现都不能打开知乎App,可气呀,抖音都能打开,为啥知乎打不开呢?难度知乎做了反欺诈检测?不会这么高级吧.于是我又重新把目光 ...
- 轻易解决VMware 虚拟机中被提示“请不要在虚拟机中运行此程序“
决 VMware 虚拟机 中被提示 "请不要在虚拟机中运行此程序"或者"Themida Sorry, this application cannot run under ...
- 虚拟机中被提示请不要在虚拟机中运行此程序 解决方法,“Themida Sorry, this application cannot run...
虚拟机中被提示"请不要在虚拟机中运行此程序" 解决方法. 英文提示:"Themida Sorry, this application cannot run under a ...
- 解决 VMware 虚拟机 中被提示 “请不要在虚拟机中运行此程序”或者“Themida Sorry, this application cannot run under a Virtual Mac
解决 VMware 虚拟机 中被提示 "请不要在虚拟机中运行此程序"或者"Themida Sorry, this application cannot run under ...
- 【一站式】虚拟机中运行博途V15
[一站式]虚拟机中运行博途V15 所使用的的软件 步骤 一.安装虚拟机 二.安装一个Win 10系统的虚拟机 三.对客户机进行网络设置 四.对客户机系统内部进行设置 结尾 可供参考的相关文章 所使用的 ...
- android studio虚拟机如何使用,3.1、Android Studio在虚拟机中运行应用
Android虚拟机Monitor一个设备并且显示在你的开发计算机上.它可以允许你在不适用硬件设备的情况下开发.测试你的Android应用.虚拟机支持Android手机,Android Wear和平板 ...
- Java代码如何在虚拟机中运行?
写在前面 本文隶属于专栏<100个问题搞定Java虚拟机>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java ...
最新文章
- AMS重要的数据结构解析(三):ActivityStack
- 设计模式 — 结构型模式 — 享元模式
- 艾伟:老赵谈IL(3):IL可以看到的东西,其实大都也可以用C#来发现
- java封装的快捷_Fast-boot:针对SpringBoot 封装的一系列的快捷包
- zuk z2 Android7.0官方,首发ZUK Z2官方固件ZUI2.5安卓7.0卡刷包!
- 对jQuery的认识
- Silverlight专题(10)- WatermarkedTextBox使用
- 【linux】设置镜像源
- 赋能零售成长型企业营销增长,云徙「数盈·新营销中台」发布
- swift. 扩展类添加属性_IOS_Swift中用到extension的一些基本的扩展功能讲解,现有的类,结构或枚举类型的 - phpStudy...
- 卷积定理及常见傅里叶变换表
- 基于PT100的温度测量系统设计
- SQL SERVER/ROW_NUMBER() OVER (ORDER BY id)高效分页
- 接口邮件发送平台,定时发送邮件信息
- 最通俗易懂的讲解HTTPS的加密原理【多图、易懂】
- 安全运维和安全运营的区别
- 最老程序员创业开发实训5---Swift语言极速入门
- 魔兽世界怀旧服哪个服务器bl最多,魔兽世界怀旧服服务器选择哪个好
- LightOJ1079-Just another Robbery
- andriod 地图的简单创建
热门文章
- 1.2-----机械设计工具(CAD软件)和硬件设计工具(EDA软件)及对比
- flash转换成mp4,在线转换
- 第127届广交会将于6月在网上举办;疫情冲击使中小微企业营收下降近七成 | 美通企业日报...
- 基于数据库的CS程序的简单安全体系
- 什么样的双拼是精品双拼域名?双拼域名为什么价值高?
- 极智AI | 量化实现分享二:详解 KL 对称量化算法实现
- Bug 20250147 - ORA-600 [kjxmgmb_nreq:bat]
- tan(a+b)展开式证明
- Java毕设项目疫苗药品批量扫码识别追溯系统计算机(附源码+系统+数据库+LW)
- C语言 日历 判断一年的天数