1、 FTP引导的bootrom.bin制作

修改BSP

首先,我们复制一份纯净未做修改的安装目录\vxworks-6.6\target\config\下的 pcPentium文件夹,改名为 VMware_VxWorks6.6_BSP(名称随便你起),再将该改名后文件夹放到config目录下,最好不要带空格或什么特殊符号。

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

1.1 修改config.h

1)     定位到安装目录\vxworks-6.6\target\config\Pentium并打开该目录下 config.h文件;

2)     定位到”INCLUDE_CPU_PROBE”,更改成如下:

#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 */

截图如下(

注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#endif

3)  查找到定义DEFAULT_BOOT_LINE宏的地方,修改预处理条件 CPU = = PENTIUM分支下的定义如下:

/* Default boot line */
#define DEFAULT_BOOT_LINE \
	"lnPci(0,0)host:vxWorks h=192.168.1.207 e=192.168.1.50 u=target_vm pw=123 f=0x00"



截图如下(注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#define_02

这里的host地址得修改成你的主机地址,target地址只需要在同一个网段内就可以了

4) 定位到INCLUDE_ATA,在前面一句添加#undef INCLUDE_FD,如下所示:

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

#undef	INCLUDE_LPT             /* include parallel port driver */

#undef	INCLUDE_TFFS            /* include TrueFFS driver for Flash */
#undef	INCLUDE_PCMCIA          /* include PCMCIA driver */

#define INCLUDE_RAWFS           /* include raw FS */
#define INCLUDE_DOSFS_MAIN      /* The 3 minimum components */
#define INCLUDE_DOSFS_FAT       /* required for DosFs */
#define INCLUDE_DOSFS_DIR_VFAT
#undef	INCLUDE_HRFS            /* include HRFS file system */




截图如下(

注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#define_03


5) 定位到/* Network driveroptions: VxBus drivers */

作如下修改:


/* 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

截图如下( 注意图片中画圈部分与原文件代码的区别):


虚拟机固件类型只能选uefi不能选BIOS_#define_04

6)定位到INCLUDE_LN_97X_END,将其定义上,修改如下:

#define INCLUDE_END             /* Enhanced Network Driver Support */

#undef  INCLUDE_DEC21X40_END    /* (END) DEC 21x4x PCI interface */
#undef  INCLUDE_EL_3C90X_END    /* (END) 3Com Fast EtherLink XL PCI */
#undef  INCLUDE_ELT_3C509_END   /* (END) 3Com EtherLink III interface */
#undef  INCLUDE_ENE_END         /* (END) Eagle/Novell NE2000 interface */
#undef	INCLUDE_ULTRA_END       /* (END) SMC Elite16 Ultra interface */
#undef  INCLUDE_GEI8254X_END    /* (END) Intel 82543/82544 PCI interface */
#define INCLUDE_LN_97X_END      /* (END) AMD 79C97x PCI interface */




截图如下( 注意图片中画圈部分与原文件代码的区别):


虚拟机固件类型只能选uefi不能选BIOS_#define_05


7)定位到INCLUDE_PC_CONSOLE,将其设成定义的,如下所示

#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 */




截图如下( 注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_ci_06

8)定位到#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

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




截图如下(注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#define_07

1.2修改 configNet.h

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

在上面添加如下内容


/* 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 */




截图如下(注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#endif_08

2)定位到/* Atheros AR521XWLAN Support */

在上面添加如下内容:


#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 */




截图如下( 注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_ci_09

1.3将安装目录\vxworks-6.6\target\src\drv\end目录下的ln97xEnd.c拷贝进你的Pentium(VMware_VxWorks6.6_BSP)目录下,并作如下修改:

    定位到    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




 截图如下( 注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#define_10

1.4将5.5的Sysln97xEnd.c移植到你的Pentium(VMware_VxWorks6.6_BSP)目录下,并作如下修改:

    1)定位到/* map a 4Kb 32-bitnon-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




截图如下( 注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#define_11

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;




截图如下( 注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#define_12

1.5修改makefile文件,作如下修改:

    1)定位到TOOL       = diab

        将diab修改为gnu

    2) 定位到EXTRA_DEFINE,作如下修改:

EXTRA_DEFINE       = 		-DVMWARE_HACK -DFAST_REBOOT

MACH_EXTRA	   = ln97xEnd.o



截图如下( 注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_ci_13

1.6修改sysNet.c

    1)定位到#   include"sysUltraEnd.c"

        添加内容如下:


#ifdef INCLUDE_ENE_END
#   include "sysNe2000End.c"            /* ne2000End support routines   */
#endif
#ifdef INCLUDE_LN_97X_END
#	include "sysLn97xEnd.c"				/* ln97xEnd support routines	*/
#endif
#   include "sysUltraEnd.c"             /* ultraEnd support routines    */
#endif  /* INCLUDE_END */

#ifdef  INCLUDE_BSD
#   include "sysNetif.c"                /* if_eex32 support routines    */
#endif /* INCLUDE_BSD */




截图如下( 注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_ci_14

2)定位到LOCAL VEND_ID_DESCvendorIdEnet [] =

修改内容如下:


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 */
    };




截图如下( 注意图片中画圈部分与原文件代码的区别):

虚拟机固件类型只能选uefi不能选BIOS_#endif_15

1.7将安装目录下的wrenv.exe拷贝进截图如下Pentium(VMware_VxWorks6.6_BSP)目录下,删除如下文件:bootrom;bootrom.bin;bootrom.pxe;vxWorks;vxWorks.st;vxWorks.sym并添加两个文件如下:

    1)torVars.bat

    内容如下:

    wrenv -p vxworks-6.6

    2)vxcopy.bat

    内容如下:

    objcopypentium -O binary --gap-fill=0 %1 %2



1.8 编译bootrom.bin

       往PATH环境变量添加路径,如下所示

D:\WindRiver-GPPVE-3.6-IA-Eval\vxworks-6.6\host\x86-win32\bin;D:\WindRiver-GPPVE-3.6-IA-Eval\workbench-3.0\x86-win32\bin
 
Pentium(VMware_VxWorks6.6_BSP)文件夹,及工具gnu,然后编译。

同样在VxWorks 6.6的集成开发环境还有另外一种bootrom.bin文件的方法:运行VxWorks Development Shell工具,定位到Pentium(VMware_VxWorks6.6_BSP)目录,输入:make clean先对原工程进行清理,然后输入:make bootrom.bin,这样就生成了.bin文件。

虚拟机固件类型只能选uefi不能选BIOS_#define_16