首页资源分类嵌入式系统 > VmWare_VxWorks高阶教程

VmWare_VxWorks高阶教程

已有 451217个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:VmWareVxWorks

    分    享:

    文档简介

    VmWare_VxWorks高阶教程

    文档预览

    VmWare下跑VxWorks高阶教程 tearing & FiNALs @ cevx.com/bbs 首先要感谢 www.cevx.com/bbs 论坛的 FiNALs 兄!!!!!!!!!!!!!是他在 QQ 上给我的 讲解,使我对 vxWorks 的各方面有了更进一步的了解。他又帮我解决了虚拟机 vmWare 下跑 WindML 时鼠标一配就死机的问题。总算、vmWare 下的 vxWorks 环境又进一步真实化了。 目前我知道的不完美的地方还有: USB 貌似只能用 U 盘 串口直连通信还存在只能收一次数据的问题(当时发的一篇帖子,未提到这个 BUG) 现总结一篇 VmWare 下跑 vxWorks 高阶教程,考虑通读性,所以从头起步,写的很细 1 从 ATA 硬盘加载 bootrom 引导 vxWorks 2 通过 FTP 工具访问虚拟硬盘内容 3 WindML 下配置上 PS/2 鼠标和 PC Console 键盘 4 简单介绍 BSP 配置中涉及的文件关系 1、先期准备 1.1 开发环境 ¾ Tornado 2.2(或升级到 2.2.1) for Pentium CD1(开发环境和基本组件等)&CD2(BSP 包) ¾ WindML 3.0(或升级到 3.03) ¾ AMD Ln97XEnd 网卡驱动补丁包 (只需要 ln97xEnd.c 和 ln97xEnd.h 提供下载) ¾ VMware-workstation-5.5.3-34685 对初学者建议使用刚安装好的环境,保证 pcPentium BSP 包和 WindML 源码的纯净! 1.2 工具 MS DOS 6.22 镜像 wsFtp2006(7) FTP 工具 虚拟软驱 RamDiskNT 1.5 2、虚拟机配置 2.1 安装虚拟软驱(供虚拟硬盘做DOS,和初期拷贝文件使用) 保证红圈配置正确后,点击 START 运行,随后重启电脑,虚拟软驱 A 应该就出现了 2.2 新建虚拟机 File->New->Virtual Machine->Custom->New-Workstation 5->other(other)->指定虚拟机名 和保存位置->选单处理器->内存 128MB 对应 VxWorks 足以->使用桥接网络->IO 适配器选 BusLogic->创建虚拟硬盘->类型选择 IDE(Recommended) ->磁盘空间设置 0.25GB(256MB) 足以,并勾上立刻分配磁盘空间->最终完成虚拟机配置 2.3 虚拟硬盘安装DOS 双击 Floppy,配置软驱,使用软驱镜像,指定 dos6.22 的 img 文件后,点 Create 按钮 启动虚拟机后,进入如下界面 选择 NONE 后,进入软驱 A:盘符,运行 A:\>fdisk 创建 DOS 主分区,一路回车,最后一个回车会使虚拟机重启,再次选择 NONE A:\>fomat C: 格式化创建的主分区 A:\>sys C: 成功后提示 System Transferred 这样 C 盘就安装了最简单的 DOS,顺便把以下几个文件从 A 盘拷贝到 C 盘 A:\>copy HIMEM.SYS C:\ A:\>copy EDIT.COM C:\ 点击虚拟机停止按钮退出虚拟机,把软驱配置再改回连接物理软驱,如下图所示 新建一个 config.sys 文件,内容如下 [menu] menuitem=Boot_VX, Start with VxWorks55 menuitem=Boot_DOS, Start with MsDos622 menudefault=Boot_VX,3 menucolor=7,0 [Boot_VX] device=c:\himem.sys /testmem:off dos=high,umb shell=c:\vxload.com c:\bootrom.sys [Boot_DOS] device=c:\himem.sys /testmem:off dos=high,umb [COMMON] files=40 buffers=30 rem dos=high,umb 保存为 config.sys 文件,然后再准备这个文件: C:\Tornado2.2\host\x86-win32\bin\vxload.com 把 vxload.com 和 config.sys 拷贝到软驱 A:盘,如下图 注意:虚拟机在使用物理软驱时,如果软驱 A 打开了,那么虚拟机会报警,停掉虚拟 机,把软驱 A 的窗口关闭,再重新启动虚拟机即可 启动虚拟机,因为此时软驱 A 无系统,所以会提示无效的系统盘,如图所示 所以重启虚拟机,按 F2,改 BIOS,改首启动为 Hard Drive 启动(按数字 0 旁边的减号 键可以把 Removable Devices 设下去,这样 Hard Driver 就上来了)保存后退出 BIOS 重启后就会进入我们刚刚在 C 盘做的简单的 DOS 然后把 A 盘的两个文件拷贝到 C 盘 C:\>copy A:\vxload.com C:\ C:\>copy A:\config.sys C:\ 注意,因为把 config.sys 拷贝进了 C 盘。所以重启再次运行虚拟机后,就出现如下界面 了 选第一个引导 vxWorks,不过目前还没做好,要在第四章 选第二个进 DOS,待会还会用到的 ¸ÃÎĵµÓÉ Foxit Reader ±à¼°æȨûÓÐ ·-°æ²»¾¿ ½ö¹©ÆÀ¹À¡£ 3、ATA引导的bootrom制作 3.1 替换驱动库中原有AMD网卡驱动 首先把下载的补丁中的两个文件进行拷贝 ln97xEnd.c 拷贝到 C:\Tornado2.2\target\src\drv\end 下,覆盖原有的 ln97xEnd.h 拷贝到 C:\Tornado2.2\target\h\drv\end 下,覆盖原有的 打开一个 windows 控制台 cmd 窗口,运行批处理程序: C:\tornado2.2\host\x86-win32\bin\torVars.bat; 定位到 C:\tornado2.2\target\src\drv\end 目录,运行: make CPU=PENTIUM tool=gnu ln97xEnd.o 定位到 C:\tornado2.2\target\lib\pentium\PENTIUM\common 目录,并将上一步生成的文件 ln97xEnd.o 复制到此目录下。备份此目录下的文件 libdrv.a; 运行命令 arpentium -d libdrv.a ln97xEnd.o,删除 libdrv.a 中原有的 ln97xEnd 模块; 运行命令,将我们刚刚创建的新 ln97xEnd 模块添加进去。 arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o 3.2 修改BSP配置文件config.h 首先,我们复制一份纯净未做修改的 C:\Tornado2.2\target\config\下的 pcPentium 文件夹, 改名为 AMD(名称随便你起),最好不要带空格或什么特殊符号 我们要修改编译 bootrom、VxWorks 的配置头文件 Config.h 中定义的一些参数,使编译 出来的系统引导程序 bootrom 和 VxWorks 的映象符合我们的要求; 同时还要修改 sysLn97xEnd.c 这个文件,以使系统的网络功能正常运行。 1) 定位到目录 C:\tornado2.2\target\config\AMD 并打开该目录下 Config.h 文件; 2) 查找到定义 DEFAULT_BOOT_LINE 宏的地方,修改预处理条件 CPU = = PENTIUM 分 支下的定义如下: " ata=0,0(0,0)Tifa:/ata0a/vxWorks h=192.168.1.3 e=192.168.1.250 u=lnpci pw=97 tn=vmware o=lnPci " ata=0,0(0,0) 指定了使用第 0 个 ata 控制器和第 0 个驱动; Tifa 指定你的主机的名字,随便写拉; /ata0a/vxWorks 指定了 VxWorks 映象下载的完整路径,因为我们是从硬盘下载; h=192.168.1.3 是宿主机的 IP 地址,查看你的网上邻居的本地连接,根据它填写; e=192.168.1.250 目标机的 IP 地址,可以根据实际情况修改,但要和主机在同一网段; u=lnpci 指定登录 FTP 服务器的用户名,此 FTP 是用来下载 VxWorks 映象的; pw=97 是 FTP 服务器与用户名 lnpci 对应的密码; tn=target 指定目标机的名字,任意指定即可,这里写的 vmware。 o=lnPci 这个一定要加上,不然 WDB 会出错的,后面会解释 注意 这里 u=lnpci 名字我随便起的,和 AMD 网卡的引导设备名 lnPci 没有任何关系! 不过 o=lnPci 就不是随便写的了哦,且 P 一定要大写(即网卡设备名)这个参数和 vxWorks 启动时的 WDB 配置有关,在后面会有说明。 3) 指定网卡驱动程序 定位到“Network driver options”这段文字 保证 INCLUDE_END 和 INCLUDE_LN_97X_END 这两个宏处于定义状态(define),其 他的宏都处于未定义状态(undef),即: 4) 包含 ATA 硬盘驱动 首先定位到/* driver and file system options */字段,将 INCLUDE_ATA 定义上,如下 再定位到/* Warm boot (reboot) devices and parameters */字段,将#define SYS_WARM_TYPE 后的 SYS_WARM_FD 改为 SYS_WARM_ATA,如下图所示 如果还保持为 SYS_WARM_FD,那么虚拟机在引导或 reboot 时虚拟机会报警,如下所示 5) 配置 WINDML 查找/* Include PCI support for drivers & libraries that require it. */字段 在字段之上,定义#define INCLUDE_WINDML 6) 包含 PC_CONSOLE 缺省情况下,VxWorks 系统是不接受外部输入设备(如键盘)的输入,也不向外部输出设 备(如显示器)输出数据。为了便于调试,我们必须改变它的这种缺省状态,包含对 PC 控制台的支持。查找定位宏 INCLUDE_PC_CONSOLE,保证其处于定义状态(define)即 可,即: 3.3 修改BSP配置文件romInit.s 添加红线标注的行,如果这里不添加,编译的 bootrom 引导 vxWorks 后,在运行 ugl 程 序时,会提示如下错误 3.4 修改sysLn97xEnd.c 打开 C:\tornado2.2\target\config\AMD 目录下的 sysLn97xEnd.c 文件,然后将参数由 pciRsrc[endUnit].bar[1]修改为 NONE,保存即可,如下图: 3.5 编译 Bootrom 打开 Tornado 开发工具,在 Build 菜单下选择 Build Boot ROM,选择 BSP 为 AMD,image 类型为 bootrom,工具为 gnu,如图。点击 OK,Bootrom 就会编译。编译成功后,会在 AMD 目录下生产 bootrom 文件。新建一个 make.bat 文件,编辑内容如下 @echo off rem Command line build environments set WIND_HOST_TYPE=x86-win32 set WIND_BASE=C:\Tornado2.2 set PATH=%WIND_BASE%\host\%WIND_HOST_TYPE%\bin;%PATH% objcopypentium -O binary --gap-fill=0 bootrom bootrom.sys 保存为 make.bat 后,放在 BSP 目录《AMD》下,并双击之,即可生成 bootrom.sys 按照 2.4 节同样的方法,把 bootrom.sys 拷贝到你的虚拟硬盘 C 盘下,再此重启虚拟机 经典的蓝天白云界面就出现了。第一次启动提示下图 open failed,此刻随便敲击键盘,中断 bootrom 引导,按下 c,然后一路回车,下次就不会再提示这个了,实际上这个是 nvram.txt 在作祟,bootrom 会尝试从非易失性存储器中查找 nvram.txt 文件来分析引导行,如果没有, 则按照 config.h 中的定义来引导。 然后输入@后启动,提示找不到/ata0a/VxWorks 。当然了,我们还没有编译 vxWorks 拷贝到 C 盘。继续第四章节 4、VxWorks配置FTP服务器 4.1 基于BSP创建VxWorks Tornado2.2->File->New Project…,选择 Create a bootable VxWorks image BSP 选择 AMD 4.2 配置FTP组件 组件配置上 FTP server。这里的 server 相当于 vxWorks 作为服务器,让 windows 的 ftp 工具访问该服务器的内容。Tornado 开发环境还配有一个 FTP 服务器,后面会提到。 配置好后,编译该 vxWorks,然后把该文件(在你的 vxWorks 工程目录的 default 文件 夹下)按之前同样的方法拷贝到虚拟机的 C:盘下。虚拟机启动后选择 Start with VxWorks55 就可以真正把 vxworks 加载了。如图所示 ¾ 如果引导行的 o=lnPci 没有设置,则出现如下错误,WDB 通信就不能工作了 ¾ 如果引导行的 o=lnPci 的名字写错了,比如写成 lnPCI,就会提示如下错误 5、FTP访问虚拟硬盘 5.1 安装WS_FTPPro 有破解教程,不多说了。 5.2 建立连接访问虚拟硬盘 第一次打开该工具,会有建立向导 输入站点名称 选择连接类型为 FTP 输入服务器地址,亦即配了 FTP 服务器组件的 vxWorks 的 IP 地址,即目标机地址啦 输入登录 vxWorks 的 FTP 服务器的用户名,密码。VxWorks 的 FTP 服务器组件可能是 默认使用了引导行里的用户名、密码。即这对信息即可用来让网络设备引导的 bootrom 登录 Tornado 开发环境的 FTP 服务器来下载 vxWorks,也可以让其它的 FTP 工具登录进运行中的 vxWorks FTP 服务器。说的拗口,见谅 选择高级 选择启动,在远程站点文件夹那输入/ata0a,启动传送模式选择二进制。确定后,再点 击完成,即可开始连接 vxWorks 的 FTP 服务器。如图 连接成功后,可以看到虚拟机硬盘下的文件了,这下传输文件就方便多了 vxload.com 为 DOS 下的将 bootrom 加载的 DOS 程序 nvram.txt bootrom 使用的引导行信息保存在这个文本文件里 vxWorks 从虚拟硬盘加载的 vxWorks 镜像 当然,访问 VxWorks 的 FTP 服务器还可以用其他软件,比如 FlashFXP 等。或者用 Windows 的 CMD 控制台用命令来访问,如下图,不过命令行还是麻烦,不如 GUI 来的方 便啊! 6、WindML编译与鼠标配置 6.1 编译VESAbios的图形库 选择 Tornado 2.2 开发环境的工具条中 WindML 配置按钮、图中红圈标注的地方 打开对话框,选择 pentium_VESABIOS_RGB565_640X480 项目: 点击配置 Configure 打开对话框 Build 标签类, 例子不编也可以,debug 也可以不勾,初学者建议都勾上 Devices 标签类: 鼠标选择 PS/2 名称为/pointer/0 键盘选择 PC/A 名称为/pcConsole/1 要改用 1 哦!!! 0 是显示器用了 注意,这里的名字是指定 UGL 依照这个名字去打开设备,如果 VxWorks 设备列表里没有/pcConsole/1 和/pointer/0 那么就无法接受外部输入了; 至于这两个设备,则是由 VxWorks 配置组件来创建,后面会讲。相信很 多朋友开始都搞不清楚这个名字和 vx 组件配置里的名字是个什么关系 其他两个标签默认,然后保存该配置文件,如图。保存后,点击 build 开始编译,看你的机 器 能 力 啦 , 我 的 本 本 20 分 钟 -.- 编 译 完 后 会 有 Done 提 示 。 在 C:\Tornado2.2\target\lib\pentium\PENTIUM\common 下会生成 libwndml.a 文件。 6.2 VxWorks PS/2 鼠标配置 首先进入第 4 章建立的 VxWorks 工程配置窗口,配置 WindML PS/2 鼠标 这里的名称参数配置,意思是 VxWorks 启动时驱动以该名称来创建鼠标、键盘设备。 这下大家就清楚了这个名字和 WindML 配置里的名字是要对应起来的原因了吧。至于 PS2 键盘,这里名字无所谓,原因在是我们前面配置了 PC_CONSOLE 驱动,后面有详细的解释。 配置 PS2 鼠标组件还依赖于 PS2 键盘,所以会有依赖组件同时添加进来。点击 OK 后, WindML 组件就加上了 PS/2 鼠标和 PS/2 键盘。 虽说 PS/2 键盘也包含进来了,但 PS/2 键盘用的并不是 i8042 驱动哦,而用的是 PC_CONSOLE 驱动,鼠标则用的 i8042 驱动。以前这样配置下来,vxWorks 启动后,就会 死机,这个困扰大家很久了,不过总算解决了!!!再次感谢 FiNALS 兄提出的解决方案。 下面首先解释一下组件配置的知识,对我们查找问题出在哪有一点点帮助吧。这个肯定 困扰过很多初学者,常常搞不清以下的文件关系,反正我开始是糊里糊涂。 C:\Tornado2.2\target\config\BSPpacket\config.h \ C:\Tornado2.2\target\config\comps\src\configAll.h C:\Tornado2.2\target\proj\BSPvxImage\prjComps.h | | Æ这些文件的关系 C:\Tornado2.2\target\proj\BSPvxImage\prjParams.h | C:\Tornado2.2\target\proj\BSPvxImage \prjConfig.c / 在 4.1 中的基于 AMD 的 BSP 创建的 VxWorks 会根据 BSP 目录下的 makefile 来分析工 程源文件的依赖关系,编译规则(如 CPU 宏,头文件搜索路径),汇编规则等等; 同时会根据 BSP 目录下的 config.h 文件分析包含的组件,随后会生成 prjConfig.c、 prjComps.h 和 prjParams.h 文件。 例如在 3.2 中的 config.h 中我们做了#define INCLUDE_WINDML 的宏定义 那么经过 Tornado 工程创建程序的分析后,在自动生成的 prjConfig.c 中会有以下的效果 (1)C:\Tornado2.2\target\config\comps\src\configAll.h 文件适用于所有 BSP 的组件参数 配置文件,一般不要修改该文件。各自的 BSP 特殊定制应该去修改你的 BSP 目录下的 config.h 文件,这样各个定制的 BSP 之间才没有交叉影响。不然你改了 configAll.h 后,会对所有 BSP 都产生影响。 (2)C:\Tornado2.2\target\config\BSPpacket\config.h 则是为各个 BSP 所特别定制的,修 改 config.h 只影响本 BSP 的配置。假设你已经配置好了一个 BSP 包,并且在其基础上创建 了一个 VxWorks 镜像工程,那么此时你再去修改 config.h,是不会对 VxWorks 工程产生效 果的!比如开始 config.h 中不定义#undef INCLUDE_WINDML,紧随其后创建了基于“没有 定义 INCLUDE_WINDML”BSP 包的 vxworks 工程,那么这时你再去修改 config.h,把 INCLUDE_WINDML 定义#define 上,重新编译 vxWorks 后,实际上 VxWorks 还是没有包含 WindML 组件!!!那么下载运行 ugldemo.c 编译的程序(链接了 6.1 编译的图形库)后,是 会有如下错误提示的: 原因亦即 PC-BIOS 图形设备的内存还是没有映射上,即在 sysLib.c 中,以下这段是没有 被定义的,也就不会把 sysWinML.c 编译进去 也就不会执行 sysWindMLHwInit 了,如下 解决办法是两个: 要么 config.h 中#define INCLUDE_WINDML 后,重新基于此 BSP 重新创建一个工程就 可以了,这样重新编译 VxWorks 后,重新启动新编译的 VxWorks,再下载链了图形库的 ugldemo,肯定可以成功运行。 要么在上层应用进一步定制(亦即使用 VxWorks 工程组件配置管理工具,如下图加上 WindML graphic Support 组件即可),所做的修改体现在 prjComps.h 、prjParams.h 中 解决方法 2,通过上层的组件配置管理工具来实现 (3)C:\Tornado2.2\target\proj\BSPvxImage\prjComps.h 是在使用 vxWorks 工程组件配置 管理工具进行组件重组后,自动由 Tornado 修改生成的,即 prjComps.h 自动生成 (4)C:\Tornado2.2\target\proj\BSPvxImage\prjParams.h 和 prjComps.h 类似,只是该文件 还包含了组件的相关参数。比如创建 PS/2 键盘时使用什么名字来创建这个设备。 (5)C:\Tornado2.2\target\proj\BSPvxImage \prjConfig.c 用户根任务 usrRoot 就在这里被 调用,比较上层的初始化,比如定义 WINDML 组件后,就会在 usrRoot 内部调用 usrWindMlInit 初始化创建键盘鼠标。而 sysLib.c 中调用 sysWindMLHwInit 初始化图形卡设备,属于底层 一些的。 最后总结一下这些文件的编译调用顺序: 所以,当工程创建初期时,prjParams.h 的配置和 configAll.h、config.h 两者的配置组合 是一致的!!此时,再对 config.h 修改则对 VxWorks 工程是无效的,而通过上层修改后,那 么 prjParams.h 的配置和 configAll.h、config.h 两者的配置组合就变得不一样了!! 最 后 , configAll.h 这 个 文 件 在 C:\Tornado2.2\target\config\all 有 一 个 , 在 C:\Tornado2.2\target\config\comps\src 也有一个,那上面说的到底是哪个呢??看看 vxWorks 的编译选项里的头文件搜索路径,你就知道了!呵呵,是不是很清楚呢? 而 C:\Tornado2.2\target\config\all 下的 configAll.h,那是 bootrom 级别的配置以后再去研 究了 呵呵 回到 PS/2 鼠标上,前面的分析很重要哦! 假设前面第 3、4 章的工作你都按照我的做好了,那么此时我们就来分析鼠标键盘是在 哪被创建的。由于 BSP 的 config.h 中#define 了 INCLUDE_WINDML,VxWorks 工程目录下 的 prjConfig.c 就会 usrWindMlInit (); (前面也有图示说明了,这里不多说了) 该函数在 C:\Tornado2.2\target\config\comps\src\usrWindML.c 里 分析源码就知道,我们之前在上层组件配置管理里 INCLUDE_WINDML_PS2_KEYBOARD 了,但是我们也定义了 INCLUDE_PC_CONSOLE, 所以 PS2 键盘不会调用 i8042KbdDevCreate,而是用 PC_CONSOLE 驱动创建的/pcConsole/1 来处理键盘的输入,shell 下输入 devs 可查看到/pcConsole/1。 而对于鼠标,我们之前也在上层组件配置管理器里 INCLUDE_WINDML_PS2_POINTER 了,只要定义了,就会调用 i8042MseDevCreate 那么困扰我们的 PS2 鼠标一配置上,VxWorks 就会死机的问题,我们定位到了是在哪个函 数里出了问题。就在 i8042MseDevCreate 里,这个函数在哪呢?usrWindMl.c 首部如下: 就在 i8042KbdMse.c 里。i8042KbdMse.c 在哪呢?看下图就知道了 对,就在 C:\Tornado2.2\target\src\drv\serial\i8042KbdMse.c 下面就给出隐藏 BOSS ―― FiNALS 兄的解决方案!!!!!!!!! 修改完毕后保存,重新编译你的 VxWorks。我们修改引导,从网络设备 lnPci 来加载 VxWorks,验证是否 PS/2 鼠标可以用了 ^-^ 6.3 运行ugldemo验证鼠标 打开 Tornado 的 FTP 服务器 开始->所有程序->Tornado2.2->FTP Server 选择 Security->User/rights… 输入与引导行对应的 lnpci 名称 输入与引导行对应的密码,之前设的是 97 将 C:\Tornado2.2\target\proj\AMDvx55\default 路径填入 Home Directory。选择 Done 后, 即可启动虚拟机,下载我们配好了 PS2 鼠标的 VxWorks。 为了从先前的 ATA 引导改为从网络引导,需要对引导行做如下更改: 按@启动后,然后通过 tgtsvr 链接目标机,这个我就不多说了 下载链接了图形库的 ugldemo 程序,shell 下输入 ugldemo。试试吧,应该可以用 PS/2 鼠标了,Shell 下输入 iosFdShow,看到如下信息证明的确是成功了!!! /pcConsole/1 为 PS2 键盘,驱动为 pcConsole 驱动 2 /pointer/0 为 PS2 鼠标,驱动为 i8042 驱动 10 经典的 WinBall 程序,从上下两张图中光标的位置,我们也可以证实,鼠标的确是可以用啦 本教程就写到这里了,希望大家多提宝贵意见!再次感谢 FiNALS 的大力支持 tearing & FiNALs @ cevx.com/bbs 7、附注 AMD ATA BSP Bootrom lnPci PC Console UGL VESA WindML FiNALS 本文档起的 BSP 包名字,因为虚拟机网卡用的 AMD 的,就起了这个名字 AT Attachment 广为使用的 IDE 和 EIDE 设备的相关标准,本文档指硬盘 Board Support Packet 板级支持包 实现硬件的抽象 由代码、文档、规范组成 VxWorks 加载、存储、调试的桥梁 虚拟机中网卡的设备名,由 AMD 公司制造 PC 控制台驱动,用于图形输出和键盘输入 Universal Graphic Library 统一图形库 肤浅理解,和 WindML 一个东西吧 Video Electronics Standard Association 虚拟机用的图形芯片 bios Wind Media Library 风河媒体库 为上层提供统一的图形接口 cevx 论坛资深会员 ^-^

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。