通过FTP Server加载VxWorks映像
使用VxWorks的BootRom将目标机引导起来之后,目标机处于BootRom控制之下,这里我们使用的虚拟机就是目标机。此时用户可以通过BootRom的一些命令进行简单的操作。如果需要运行VxWorks,还需要加载VxWorks映像并运行。
设置FTP Server
Tornado自带了FTP服务器,名为FTP Server。该服务器设置比较简单,适合初学者使用。FTP Server可以在开始菜单Tornado程序组中找到并启动。如图3.1为启动后的界面。
图3.1 FTP Server界面
1.创建用户名和密码
设置FTP Server非常简单,主要就是创建用户及密码。单击菜单项Security | Users/rights…命令,打开用户权限对话框,如图3.2所示。
图3.2 用户权限对话框
在没有设置用户的时候,可选择的用户包括anonymous和default,但这两个用户在使用上会带来诸多不便,所以并不推荐使用。单击New User…按钮弹出创建新用户对话框,这里输入target后单击OK按钮,然后输入密码vxworks再次单击OK按钮,即可创建一个名为target的新用户。
因为后面的操作会用target和vxworks这一对用户名和密码来进行系统下载,所以对于初学者在这里一定要创建这对用户名和密码。在User Name对应的组合框下拉列表中选择该用户名,然后在Home Directory所对应的编辑框中,输入D:\作为根路径,如图3.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所示。这两个网卡资源可以看成是主机和虚拟机建立通信的窗口。
图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所示。
图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所示。
图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所示。
图3.9 创建新项目
在弹出新对话框中使用默认的文件名即可,然后单击Next按钮。在新对话框中选择A BSP单选按钮,并选择VMwareBSP,如图3.10所示。
图3.10 选择BSP包
完成BSP包选择后,单击Next按钮。在最后的对话框中单击Finish按钮,即可完成VxWorks系统项目的创建。
(2)选择需要的组件
这里需要额外选择的组件为:Telnet server和target shell components。选择组件很简单,只需要在Workspace中选择VxWorks选项卡,右击需要的组件,在弹出的右键菜单中单击Include…命令,最后保持默认选项单击OK按钮即可完成选择。组件被选择后会显示为粗体样式,如图3.11所示。
图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所示。
图3.12 p命令查看引导参数
可通过按Ctrl + Alt组合键,把鼠标焦点转移到Windows系统。在通过p命令查看引导参数的时候,如果有什么不对,可通过使用c命令进行修改。修改完成后,使用@命令开始加载VxWorks操作系统映像。加载完成后,如图3.13所示。
图3.13 加载完成后的VxWorks操作系统
加载完成后,切换到FTP Server视图窗口可查看FTP所显示的下载信息,如图3.14所示。
图3.14 FTP下载信息
至此,已经完成了几乎所有的在虚拟机中引导和搭建VxWorks系统环境的操作。不过有一点要搞清楚的就是:前面经历的这么多操作仅仅是为了搭建一个可以做实验的平台,如果顺利的完成了这些操作,那么真正的学习VxWorks才刚刚开始。