通过FTP Server加载VxWorks映像

通过FTP Server加载VxWorks映像

        使用VxWorks的BootRom将目标机引导起来之后,目标机处于BootRom控制之下,这里我们使用的虚拟机就是目标机。此时用户可以通过BootRom的一些命令进行简单的操作。如果需要运行VxWorks,还需要加载VxWorks映像并运行。

设置FTP Server

        Tornado自带了FTP服务器,名为FTP Server。该服务器设置比较简单,适合初学者使用。FTP Server可以在开始菜单Tornado程序组中找到并启动。如图3.1为启动后的界面。
  通过FTP Server加载VxWorks映像_第1张图片
图3.1  FTP Server界面
         1.创建用户名和密码
        设置FTP Server非常简单,主要就是创建用户及密码。单击菜单项Security | Users/rights…命令,打开用户权限对话框,如图3.2所示。
通过FTP Server加载VxWorks映像_第2张图片
图3.2  用户权限对话框
        在没有设置用户的时候,可选择的用户包括anonymous和default,但这两个用户在使用上会带来诸多不便,所以并不推荐使用。单击New User…按钮弹出创建新用户对话框,这里输入target后单击OK按钮,然后输入密码vxworks再次单击OK按钮,即可创建一个名为target的新用户。
        因为后面的操作会用target和vxworks这一对用户名和密码来进行系统下载,所以对于初学者在这里一定要创建这对用户名和密码。在User Name对应的组合框下拉列表中选择该用户名,然后在Home Directory所对应的编辑框中,输入D:\作为根路径,如图3.3所示。
通过FTP Server加载VxWorks映像_第3张图片
图3.3  创建根路径
        创建根路径表示虚拟机中的BootRom在连接到FTP后会从D盘根目录查找并下载VxWorks系统映像。当然不设置也是可以的,那样就得给BootRom提供完整的系统映像路径。完成上面操作后单击Done按钮即可。
         2.其它设置
        在下载过程中,还有一项非常有助于观察下载进程状态的功能,就是信息输出。默认情况下输出信息是处于关闭状态的,不过通常在使用过程中都将其全部打开,以便与观察下载过程。
        单击菜单项的Logging | Log Options…命令,弹出Logging Options对话框。在该对话框中,除了Winsock Calls将其它复选框都进行勾选,然后单击OK按钮。如图3.4所示。
图3.4  记录选项
        当然VxWorks映像加载方式有很多,包括网络下载、本地磁盘加载、仿真器下载等,每种方式适用于不同的场合。在开发过程中,Vxworks映像还没有真正意义上准备好的时候,开发者需要不断修改并将其加载到目标机上调试运行。这样,最方便的办法就是通过局域网加载。如果系统裁剪完成后,整个映像需要固化到嵌入式设备中,这时最佳的加载方式就是从ROM或硬盘加载了。不过今天只学习FTP局域网下载,而且要实现下载到虚拟机中。

编译网卡驱动

        如果想通过FTP服务器往目标机下载系统映像,在下载之前都必须对主机和目标机IP做一些必要的设置才能完成。如果是往虚拟机中下载,那么会更加麻烦一些。
两台电脑通过局域网连接需要网线和网卡,那么主机和虚拟机连接通信也需要必要的软件资源。装完VMware软件后在网络连接窗口中会多出两个网卡资源VMnet1和VMnet8,如图3.5所示。这两个网卡资源可以看成是主机和虚拟机建立通信的窗口。
通过FTP Server加载VxWorks映像_第4张图片
图3.5  虚拟机网卡资源
        如图3.5可以看到VMware为运行在其上的操作系统提供虚拟网卡支持,该网卡类型即为AMD的PC-NET。在Tornado开发包中已经包含了该类型网卡的驱动程序,但经过测试,在VMware环境中该驱动无法正常工作。
        这时候就要用到WindRiver Tornado 2.2安装包中的vxworks_end.exe可执行文件了,该文件是以前AMD官网曾发布的用于支持VxWorks的驱动。默认安装后,在C:\pcnet\vxworks_end路径得到ln97xEnd.tar1.gz文件,将该文件解压得到ln97xEnd.tar文件,再次解压得到target文件夹。
        将target文件夹中target\h\drv\end目录下的ln97xEnd.h文件和target\src\drv\end目录下的ln97xEnd.c、Makefile这三个文件,复制到C:\Tornado2.2\target对应目录下,替换掉其原有文件。在替换之前请对要替换的ln97xEnd.h和ln97xEnd.c这两个文件做相应的备份,当然下面使用的make命令时候就会用到Makefile文件了。
下面通过cmd对网卡驱动进行替换:
        (1)搭建命令环境
        打开cmd窗口,输入c:\tornado2.2\host\x86-win32\bin\torvars.bat命令,按回车键。这个命令用于执行torvars.bat批处理文件,为以后使用tornado提供的一些命令设置环境变量等参数。
        (2)生成目标文件
        输入cd C:\tornado2.2\target\src\drv\end定位到相应目录,然后执行make CPU="PENTIUM" tool="gnu" ln97xend.o命令。该命令会根据Makefile文件提供的源文件之间依赖关系编译生成目标文件,这里要生成到的目标文件为ln97xend.o。
        (3)删除原有模块
        复制所生成的ln97xend.o文件到C:\Tornado2.2\target\lib\pentium\PENTIUM\common目录下,在执行下面命令前,最好先备份一份libdrv.a文件。在cmd窗口中执行arpentium -d libdrv.a ln97xEnd.o命令,该命令用于删除libdrv.a中原有的ln97xEnd模块。
        (5)添加新模块
执行arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o命令,该命令会将我们刚刚创建的新ln97xEnd模块添加进去。
至此,Tornado相对于VMware的网卡驱动就已经处理完成了。接下来将修改BSP包配置文件,以实现目标机和主机之间的通信。

修改BSP包配置文件

        之所以要修改BSP包配置文件,是因为主机和虚拟机之间不可能没有依据的建立连接和执行。在完成网卡驱动的配置后,适当的对BSP包进行修改,可以保证主机和虚拟机之间的通信能够顺利执行。
         1.创建新的BSP包
        虽然要修改BSP包,但是最好不要对原先的包进行修改,而是复制一份,然后对其进行修改,最后给它起个新的BSP包名。
        这里将在pcPentium包基础上进行修改,所以在C:\Tornado2.2\target\config目录下建一个新的文件夹,文件夹名为VMwareBSP,然后将该目录下pcPentium文件夹中的所有文件复制到新创建的VMwareBSP文件夹中。
         2.修改config.h文件
修改config.h文件主要是为了配置IP、定义网卡驱动和显示控制台等功能。首先,用代码编辑器打开VMwareBSP文件夹中的config.h文件。
        (1)指定IP和FTP服务器
        在config.h使用查找功能定位到如下代码段:
#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"
        然后对#define下的代码进行修改,修改后该代码段如下所示:
#elif	(CPU == PENTIUM)
#define DEFAULT_BOOT_LINE \
	"lnPci(0,0)host:d:\\vxWorks h=192.168.100.1 e=192.168.100.2 u=target pw=vxworks tn=target"
        上面修改的那段代码大致含义如下:
  • lnPci(0,0):指定了使用第0个网卡和第0个处理器,lnPci这个标识会因为使用的驱动程序不同而有所不同,但这里用lnPci就可以了。
  • host:指定你的主机的名字,使用host就可以(或者查看你的主机名称,在我的电脑上右键,属性,计算机名)。
  • d:\\vxWorks:指定了VxWorks映象下载的完整路径。
  • h=192.168.100.1:是主机的IP地址,可以根据实际情况修改。
  • e=192.168.100.2:是目标机的IP地址,可以根据实际情况修改。
  • u=target:指定了FTP服务器的用户名,这个FTP就是用来下载VxWorks映象的。
  • pw=vxworks:是FTP服务器与用户名target对应的密码,这里的用户名和密码其实就是在第1小节中学习设置FTP Server时候所创建的。
  • tn=target:指定目标机的名字,任意指定即可。
        主机的IP和目标机的IP对于初学者来说经常容易出错!在这里指定了目标机IP后,通过Tornado编译生成的BootRom里面相关的IP也是设置好的,这就相当于上面的设置就成了该BootRom的默认设置。当然也可以在这里不做修改,而是在BootRom引导虚拟机后通过c命令进行修改。所以我们只需要将主机IP设置成h值所对应的IP地址即可。
要注意设置主机IP不是设置本地连接的网卡,而是虚拟机提供的虚拟网卡VMware Network Adapter VMnet1。这个网卡就相当于在本机电脑Windows系统和虚拟机的BootRom引导程序之间建立的通信桥梁。右击该网卡,选择属性,打开Internet协议(TCP/IP)对话框,输入相应的IP,如图3.6所示。
通过FTP Server加载VxWorks映像_第5张图片
图3.6  设置主机VMnet1网卡IP
        (2)指定网卡驱动
        指定网卡驱动,就是将相关的网卡处于定义状态。默认情况下除了Intel 8255网卡,其它网卡都处于未定义状态。在config.h中使用查找功能定位到如下代码段:
#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 */
#define	INCLUDE_FEI_END         /* (END) Intel 8255[7/8/9] PCI interface */
#undef	INCLUDE_GEI8254X_END    /* (END) Intel 82543/82544 PCI interface */
#undef  INCLUDE_LN_97X_END      /* (END) AMD 79C97x PCI interface */
#undef  INCLUDE_ULTRA_END       /* (END) SMC Elite16 Ultra interface */
        要定义AMD的网卡,只需将INCLUDE_LN_97X_END前面的#undef改为#define即可。完成修改后的代码段如下所示:
#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 */
#define	INCLUDE_FEI_END         /* (END) Intel 8255[7/8/9] PCI interface */
#undef	INCLUDE_GEI8254X_END    /* (END) Intel 82543/82544 PCI interface */
#define  INCLUDE_LN_97X_END      /* (END) AMD 79C97x PCI interface */
#undef  INCLUDE_ULTRA_END       /* (END) SMC Elite16 Ultra interface */
        (3)显示控制台
        在前面制作虚拟软驱引导BootRom的时候已经提到过,默认情况下VxWorks 5.5不显示控制台。如果需要显示控制台,只需要将如下代码段:
#undef INCLUDE_PC_CONSOLE                /* PC keyboard and VGA console */
        修改为如下代码段即可。
#define INCLUDE_PC_CONSOLE                /* PC keyboard and VGA console */
         3.修改sysLn97xEnd.c文件
        除了需要修改config.h文件外,还需要对该目录下的sysLn97xEnd.c文件做简单的修改。打开该文件定义到如下代码段:
        sprintf (paramStr, paramTemplate,
                 endUnit,                     /* END unit number */
                 pciRsrc[endUnit].bar[1],     /* memory-mapped IO base */
                 pciRsrc[endUnit].bar[0],     /* IO address space base */
                 PCI2DRAM_BASE_ADRS,          /* host PCI mem. base */
                 pciRsrc[endUnit].irqvec,     /* IRQ vector */
                 pciRsrc[endUnit].irq,        /* IRQ number */
                 LN97X_CSR3_VALUE,            /* csr3 register value */
                 LN97X_OFFS_VALUE,            /* offset */
                 LN97X_RSVD_FLAGS,            /* flags (reserved) */
                 &ln97xStrDesc[typeIdx]       /* device description */
                );
        修改memory-mapped IO base(内存映射IO基础)为NONE即可,修改后的代码段如下所示:        
sprintf (paramStr, paramTemplate,
                 endUnit,                     /* END unit number */
                 NONE,                        /* memory-mapped IO base */
                 pciRsrc[endUnit].bar[0],     /* IO address space base */
                 PCI2DRAM_BASE_ADRS,          /* host PCI mem. base */
                 pciRsrc[endUnit].irqvec,     /* IRQ vector */
                 pciRsrc[endUnit].irq,        /* IRQ number */
                 LN97X_CSR3_VALUE,            /* csr3 register value */
                 LN97X_OFFS_VALUE,            /* offset */
                 LN97X_RSVD_FLAGS,            /* flags (reserved) */
                 &ln97xStrDesc[typeIdx]       /* device description */
                );
        至此,所有需要修改的内容都已经完成了。之所以大费心思的对原BSP包文件和网卡驱动进行修改只有一个目的,那就是能在VMware虚拟机中实现对VxWorks系统的调试和运行。那样即使没有实验板和目标机,依然可以学习VxWorks相关知识和进行相关的实验了。

加载VxWorks系统映像

        这里将使用前面修改过VMwareBSP包来制作BootRom引导程序和编译VxWorks映像。制作BootRom引导盘前面已经练习过了,编译和加载VxWorks映像将实现在前面搭建好的虚拟机中运行完整的VxWoks系统。
         1.准备材料

        要想实现在虚拟集中启动VxWorks系统,另外需要准备的材料主要有:

  • 使用VMwareBSP包编译的BootRom虚拟软驱引导盘的镜像文件。
  • 使用VMwareBSP包编译的VxWorks系统映像文件。
  • FTP Server服务器。
  • 配置好的VMware虚拟机。

         2.制作BootRom引导盘
        前面已经做过一次BootRom引导盘,使用的是虚拟软驱,而且需要把它做成镜像文件才能引导虚拟机启动。现在使用前面修改好的VMwareBSP包重新编译一个BootRom。
        (1)编译BootRom
        打开Tornado软件,单击菜单项Build | Build Boot Rom…命令。在弹出的Build Boot Rom对话框中选择VMwareBSP包,单击OK按钮。如图3.7所示。
图3.7  编译创建BootRom
        单击OK按钮后,要等待Build Output窗口出现Done字样表示结束,如图3.8所示。
通过FTP Server加载VxWorks映像_第6张图片
图3.8  编译输出窗口
        如果期间出现error表示编译出错了,请检查前面对代码的修改是否正确。修改的时候最好不要把原先的代码注释起来,而是删掉,已避免出现不必要的语法错误。
        (2)制作引导盘
        前面通过使用RamDiskNT软件虚拟了一个软盘,制作软盘引导盘非常简单,只需要在cmd中依次输入下面三行命令即可完成。
c:\tornado2.2\host\x86-win32\bin\torvars.bat

cd c:\tornado2.2\target\config\VMwareBSP

mkboot a: bootrom
        这三行命令在前面也已经用过了,最后结果也和图2.7类似。
        (3)制作软盘镜像文件
        打开RamDiskNT软件,单击对话框右下角的Save Disk Image按钮,这时在C盘就会多出一个ramdskNT.img镜像文件。用虚拟机加载该镜像文件引导启动能得到软驱启动相同的效果。虚拟机中的软驱设置,如图2.9所示。在这里也将使用该镜像文件来引导BootRom程序启动。
         3.编译VxWorks系统
        编译VxWorks系统需要三步:首先创建VxWorks系统项目;然后选择需要的组件;最后编译创建VxWorks系统映像。
        (1)创建VxWorks系统项目
        打开Tornado软件,单击菜单项File | New Project…命令。在弹出的Create Project in Workspace…对话框中选择Create a bootable VxWorks image…选项,并单击OK按钮,如图3.9所示。
通过FTP Server加载VxWorks映像_第7张图片
图3.9  创建新项目
        在弹出新对话框中使用默认的文件名即可,然后单击Next按钮。在新对话框中选择A BSP单选按钮,并选择VMwareBSP,如图3.10所示。
通过FTP Server加载VxWorks映像_第8张图片
图3.10  选择BSP包
        完成BSP包选择后,单击Next按钮。在最后的对话框中单击Finish按钮,即可完成VxWorks系统项目的创建。
        (2)选择需要的组件
        这里需要额外选择的组件为:Telnet server和target shell components。选择组件很简单,只需要在Workspace中选择VxWorks选项卡,右击需要的组件,在弹出的右键菜单中单击Include…命令,最后保持默认选项单击OK按钮即可完成选择。组件被选择后会显示为粗体样式,如图3.11所示。
通过FTP Server加载VxWorks映像_第9张图片
图3.11  选择组件
        (3)编译VxWorks系统项目
        在Tornado集成开发环境中,单击菜单项Build | Build或Rebuild All命令即可完成VxWorks系统项目的编译和创建工作,然后可以在项目文件夹中找到VxWorks系统映像文件。
        编译创建完成后,打开C:\Tornado2.2\target\proj\Project0\default目录,因为刚刚创建的项目名为Project0所以编译生成的VxWorks也在该文件夹。复制VxWorks文件到D盘根目录,笔者得到的VxWorks文件为1.23M。之所以要复制它到D盘,是因为之前在修改config文件的时候,指定的目标机是从D盘读取系统映像文件的。
         4.引导并加载VxWorks操作系统
        现在引导盘和系统都已经准备好了,包括前面也已经设置好了主机的IP地址;FTP Server中的用户名和密码包括根目录也都和config.h中修改的相匹配;目标机的默认网络配置包括连接FTP的用户名和密码也已经编译到了BootRom中。
        (1)启动FTP Server
        因为之前已经设置好了FTP Server服务器中的用户名和密码还有一些其它的设置,所以现在只需要把它启动起来即可。要注意在加载VxWorks系统的时候要始终保持FTP Server的启动状态。
        (2)引导启动BootRom
        引导启动BootRom和前面是一样的,虚拟机中的设置可参考图2.8和图2.9。设置好后,单击绿色三角箭头启动虚拟机。
        引导系统启动之后,首先单击鼠标左键把焦点转移到虚拟机中的系统,然后按任意键打断BootRom倒计时。键入p命令可查看引导参数,如图3.12所示。
通过FTP Server加载VxWorks映像_第10张图片
图3.12  p命令查看引导参数
        可通过按Ctrl + Alt组合键,把鼠标焦点转移到Windows系统。在通过p命令查看引导参数的时候,如果有什么不对,可通过使用c命令进行修改。修改完成后,使用@命令开始加载VxWorks操作系统映像。加载完成后,如图3.13所示。
通过FTP Server加载VxWorks映像_第11张图片
图3.13  加载完成后的VxWorks操作系统
        加载完成后,切换到FTP Server视图窗口可查看FTP所显示的下载信息,如图3.14所示。
通过FTP Server加载VxWorks映像_第12张图片
图3.14  FTP下载信息
        至此,已经完成了几乎所有的在虚拟机中引导和搭建VxWorks系统环境的操作。不过有一点要搞清楚的就是:前面经历的这么多操作仅仅是为了搭建一个可以做实验的平台,如果顺利的完成了这些操作,那么真正的学习VxWorks才刚刚开始。

你可能感兴趣的:(server,ftp,vxworks,BSP)