嵌入式项目一引导文_第1页
嵌入式项目一引导文_第2页
嵌入式项目一引导文_第3页
嵌入式项目一引导文_第4页
嵌入式项目一引导文_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-.z1-1引导文引导文1-1任务一构建嵌入式最小系统姓名页数:李兰兰利用网络资源、图书馆资源等查询和讨论一下问题:明确嵌入式系统的概念,列举生活中哪些设备是嵌入式设备。嵌入式系统是用于控制,监视或者辅助装置,机器或者设备运行的装置。从技术角度定义;以应用为中心,技术为根底,软件硬件可裁剪,适应应用系统对功能,可靠性,本钱,体积,功耗严格要求的专用计算机系统。从系统角度定义;嵌入式系统是设计完成复杂功能的硬件和软件,并使其严密耦合在一起的计算机系统。术语嵌入式反映了这些系统通常是更大系统中的一个完整的局部,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。生活中的嵌入式设备;掌上PDA、移动计算设备、电视机顶盒、手机上网、数字电视、多媒体、汽车、微波炉、数字相机、家庭自动化系统、电梯、空调、平安系统、自动售货机、蜂窝式、消费电子设备、工业自动化仪表与医疗仪器等。嵌入式系统的组成有哪些.由硬件和软件两局部组成嵌入式系统一般由嵌入式处理器、外围硬件设备、嵌入式操作系统〔可选〕,以及用户的应用软件系统等四个局部组成。〔硬件包括;嵌入式处理器以及外围硬件设备;软件包括;嵌入式操作系统以及特定的应用程序;〕了解常用嵌入式处理器有哪些.日常生活中哪些设备用到了.你的手机用了什么处理器.MPU嵌入式微处理器MCU嵌入式微控制器又称单片机DSPDSP处理器SOC嵌入式片上系统ARM7,ARM9,ARM11,Corte*-A8,Corte*-A9,还有以后的Corte*-A15公交卡、上下楼乘坐的电梯、银行取款时使用的ATM机、KTV里的点唱机、家里使用的微波炉、全自动洗衣机、电视机顶盒、无线路由器……全部都是嵌入式应用。了解常用嵌入式操作系统有哪些.你的手机用的是什么操作系统.Linu*、uClinu*、WinCE、PalmOS、Symbian、eCos、uCOS-II、V*Works、pSOS、Nucleus、Thread*、Rtems、QN*、INTEGRITY、OSE、CE*ecutive什么是嵌入式穿插开发.与通用计算机程序开发有什么不同.有目标机目标机资源有限和宿主机答:〔1〕嵌入式穿插开发平台有两种理解:穿插编译环境和跨平台开发环境。所谓穿插编译环境,指的是开发程序的宿主机和目标机为不同平台的开发环境。〔2〕不同:通用计算机程序的开发都是在一个平台上进展。到三星处理器官网查询S3C2440处理器的文档资料,分析下2440处理器的体系构造。三星244016/32-bitRISC微处理器.三星2440是一款专用的以手持设备为主而设计的芯片,其特点有低功耗,高速的处理计算能力.为了减少系统的消耗,2440使用了如下组件:2440基于ARM920T内核的,0.13Umcmos标准单元和存储单元复合体.它功耗及小,简单,稳定的设计非常适合对电源要求较高的产品上.她采用了新的总线构架(AMBA).2440提供了出色的特性,因为其内核为32bit的先进处理器。Thearm920T实现了mmu,ambabus,and哈佛缓存体系构架通过别离的16kb指令缓存and16kbdatacaches〔采用8-wordlinelength〕!嵌入式最小系统由那局部构成的.哪些是必须的.哪些是可选的.为什么.以ARM内核嵌入式微处理器为中心,由存储器系统,电源电路,时钟系统,复位信号电路,系统总线扩展五局部组成。嵌入式微处理器,电源电路,时钟系统,复位信号电路是必须的。调试测试接口和存储器系统是可选的,因为调试测试接口在样品阶段通常都会设计这局部电路,存储器系统是可选的是因为许多面向嵌入式领域的微控制器内部集成了程序和数据存储器(处理器内部具有存储功能)。嵌入式控制器嵌入式控制器时钟系统供电系统存储器系统调试测试接口配置及其复位系统1-2引导文引导文1-2任务二构建宿主机穿插开发环境姓名页数:李兰兰利用网络资源、图书馆资源等查询和讨论一下问题:软件开发的流程是什么样的.嵌入式开发流程是怎样的.软件开发的流程:包括设计软件的功能和实现的算法和方法、软件的总体构造设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。系统需求分析〔要求有严格规*的技术要求〕,体系构造设计,软硬件及机械系统设计,系统集成,系统测试,最终得到最终产品嵌入式开发流程:需求分析阶段,设计阶段,生成代码阶段,固化阶段。如何安装Vmware虚拟机.虚拟机的作用是什么.通过安装在系统上的专用软件模拟出基于底层硬件的与主机系统隔离的独立的系统运行环境,并可以在上面安装操作系统、软件等,虚拟系统的操作与真实系统无异,简单的来说就是一个软件,可以在上面装系统,操作起来跟真实系统一样,但是与真实系统又是隔离的,里面的操作不会影响到真实系统。〔答:〔1〕第一步:首先从网上下载一个Vmware软件包,双击翻开软件包,然后点击Ne*t;〔2〕选择安装模式,一般选典型安装,点击Ne*t;〔3〕选择安装路径,点击Ne*t;〔4〕设置桌面快捷方式,点击Ne*t;然后直接点击Continue;〔5〕到此步骤需要等待一会,让系统完成配置;〔6〕在弹出的对话框中要求输入序列号,输入完后,点击Ne*t,这样虚拟机系统就安装完成了。虚拟机作用:简单的可以用来测试系统〔镜像〕、测试软件、文件共享等,复杂一点可以组建组建网络实验环境进展网络实验等等,特殊版本的虚拟机软件可以组建虚拟效劳器。虚拟机是一个抽象的计算机,和实际的计算机一样,具有一个指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和存放器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。如何获取Linu*镜像.如何安装Ubuntu等版本的操作系统.fedora、Ubuntu、Redhat等之间的关系是怎样的.获取linu*镜像:可以直接到官网linu*.org获取安装ubuntu;首先从网上下载一个Ubuntu软件包和iso镜像,分一个区,建议10G吧;其次解压镜像到任意位置,不要放在分出来的区里;最后找到解压出来的文件中有一个e*e文件,双击安装即可,和装软件一样,按照按照提示,装好就可以了,现在都是图形化的安装界面。三者之间的关系:都是使用的linu*的内核,fedora和redhat是一家,fedora是redhat的升级版,他们都用yum更新。ubuntu基于debian,使用apt更新,什么是穿插编译工具.穿插工具链的作用是什么.穿插编译:是A机器上编译生成,运行在B机器上,两个机子有不同的机器指令。工具链:穿插工具链是用来完成穿插编译的工具包。作用:编译的程序才能在目标机上运行,用gcc编译的程序无法在目标机上运行。查询常用Linu*操作命令表。pwd:Printworkingdirectory

意思是密码。su:Swithuser

切换用户,切换到root用户cd:Changedirectory切换目录ls:Listfiles

列出目录下的文件ps:ProcessStatus

进程状态mkdir:Makedirectory

建立目录

[cal]显示日历[tar]压缩/解压缩文件[clear]清屏[gcc编译C语言代码[mdir]显示文件列表[mcd]改变当前目录

[mmd]新建目录[mrd]删除目录

[mdeltree]删除目录树[mcopy]复制文件

[mdel]删除文件[mmove]移动文件[chmod]修改文件/目录的权限[rmdir]删除路径[cp]复制文件/目录[mv]移动文件/目录,修改文件名

[rm]删除文件/目录[tree]显示目录树[arch]显示机器的核心构架〔如i386〕*ubuntu中没有〞arch〞命令,可用〞uname–m〞替代。1-3引导文引导文1-3任务三引导程序U-boot设计姓名页数:李兰兰利用网络资源、图书馆资源等查询和讨论一下问题:1.什么是Bootloader.它在嵌入式系统中的作用是什么.简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序〔启动加载程序〕。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个适宜状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序〔注,有的嵌入式CPU也会内嵌一段短小的启动程序〕,因此整个系统的加载启动任务就完全由BootLoader来完成。比方在一个基于ARM7TDMIcore的嵌入式系统中,系统在上电或复位时通常都从地址0*00000000处开场执行,而在这个地址处安排的通常就是系统的BootLoader程序。2.常见的Bootloader有哪些.如何获取U-boot源码.Viviredbootu-bootBlobARMbootLilograb3.分析U-boot工作流程,具体有哪些步骤.Bootloader分为stage1和stage2两大局部。stage1:依赖于CPU体系构造的代码,例如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以到达短小精悍的目的。stage1通常包括以下步骤(1)硬件设备初始化(2)为加载Bootloader的stage2准备RAM空间(3)拷贝Bootloader的stage2到RAM空间中(4)设置堆栈(5)跳转到stage2的C入口点stage2:则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。stage2通常包括以下步骤(1)初始化本阶段要使用到的硬件设备(2)检测系统内存映射(memorymap)(3)将kernel映像和根文件系统映像从flash上读到RAM空间中(4)为内核设置启动参数(5)调用内核4.阅读和分析U-boot的源码。答:对于ARM而言,主要的目录如下:

board平台依赖存放电路板相关的目录文件,每一套板子对应一个目录。如smdk2410(arm920t)

cpu平台依赖存放CPU相关的目录文件,每一款CPU对应一个目录,例如:arm920t、*scale、i386等目录

lib_arm平台依赖存放对ARM体系构造通用的文件,主要用于实现ARM平台通用的函数,如软件浮点。mon通用通用的多功能函数实现,如环境,命令,控制台相关的函数实现。

include通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下

lib_generic通用通用库函数的实现

net通用存放网络协议的程序

drivers通用通用的设备驱动程序,主要有以太网接口的驱动,nand驱动。5.自行设计U-boot的功能说明和构造框架。答:U-boot是常用的嵌入式操作系统启动程序。著名的开源bootloader程序。可以启动linu*、android等系统。作为bootloader它的最根本的作用为:1、把操作系统镜像从介质如flash、nand、SD卡等加载到内存2、在内存中把操作系统启动,启动时可以向操作系统传递启动配置信息。当然它还有一个简单的控制台,利用串口与用户交互以提供一些额外的辅助功能,如在OS启动前查看内存、数据拷贝、查看OS镜像信息、检查坏块等。6.如何配置、编译U-boot.根据哪些硬件参数进展修改.答:〔1〕首先确定好穿插编译环境,然后解压U-Boot-.6,进入U-Boot目录,修改Makefile〔VimMakefile〕,把smdk2410改为T*2440;〔2〕修改完Makefile后,在board目录下,新建自己的开发板目录T*2440,把smdk2410目录下的所有文件拷到T*2440,把smdk2410.c改为T*2440.c;〔3〕修改该目录下的Makefile,然后进入到board目录下,把smdk2410.o改为T*2440.o;〔4〕将board目录下所有文件夹全部删除,只留T*2440;〔5〕在include/configs目录下创立板子的配置文件,把smdk2410.h改名为T*2440.h,再把所有文件夹全部删除,只留T*2440.h;〔6〕测试能否编译成功:执行makeT*2440_config;〔7〕修改SDRAM配置,在board/T*2440/lowlevel_init.s中检查,其次再修改board/T*2440/T*2440.c中的board_init函数;〔8〕测试能否编译成功:执行makeT*2440_config;〔9〕在cpu/arm920t/s3c24*0/speed.c中修改get_PLLCLK函数;〔10〕重新执行makeT*2440_config,makeall生成u-boot.bin文件7.如何移植U-boot到目标板.tarj*vfu-boot-.tar.bz2cdu-boot-(2)-2编译u-boot(2)-3烧写flash(2)-4下载Linu*内核。有两种方法:一种是usb手动的下载到开发板,上次我们用的superboot就可以用usb线下载u-boot镜像;另外一种是存储到SD卡上,采用SD卡启动1-4引导文引导文1-4任务四嵌入式Linu*操作系统移植姓名页数:李兰兰利用网络资源、图书馆资源等查询和讨论一下问题:Linu*2.6内核构造是怎样的.Linu*2.6操作系统由四局部组成:1:用户进程——用户应用程序是运行在Linu*操作系统最高层的一个庞大的软件集合,当一个用户程序在操作系统之上运行时,它成为操作系统中的一个进程。2:系统调用接口—在应用程序中,可通过系统调用操作系统内核中特定的进程,以实现特定的效劳。例如,在程序中安排一条创立进程的系统调用,则操作系统内核便会为之创立一个新进程。系统调用本身也是由假设干条指令构成的进程。但它与一般的过程不同,主要区别是:系统调用是运行在内核态〔或叫系统态〕,而一般过程是运行在用户态。在Linu*中,系统调用是内核代码的一局部。3:Linu*内核—内核是操作系统的灵魂,它负责管理磁盘上的文件、内存,负责启动并运行程序,负责从网络上接收和发送数据包等。简言之,内核实际上是抽象的资源操作具体硬件操作细节之间的接口。4:硬件—这个子系统包括了Linu*安装是需要的所有可能的物理设备。例如:CPU、内存、硬盘、网络硬件等等。答:linu*2.6内核主要由内存管理、虚拟文件系统、网络接口、进程间通讯、进程调度等几局部构成2.DM9000网卡驱动框架是怎样的,网卡在嵌入式开发中的作用是什么.Dm9000是嵌入式平台上常用的MAC+PHY芯片。针对各种SoC,2.6内核引进了platform设备模型来封装相关驱动,Dm9000驱动就用platform改写了。DM9000的驱动初始化根本是由probe函数进展。网卡:可以自主处理TCP/IP协议以及以太网协议,完全符合在线实时通讯或TCP/IP协议小数据量〔一个数据报1470Byte〕通讯方式,可以直接将只有串行接口的各种终端产品直接连接到局域网中,使效劳器可以远程控制,方便用户布线连接,缩短底层和上层的软件的开发周期,节省通讯费用。3.网卡驱动是如何实现的.其过程分为哪些步骤.=1\*GB3①.网卡初始化=2\*GB3②设置一些有关发送数据的发送存放器,然后,网卡才能正常发送数据。发送长度要以四个字节对齐=3\*GB3③

接收处理函数4.如何获取网卡驱动源码.如何修改网卡驱动并移植它.从网卡驱动官网上获取解压内核修改顶层Makefile拷贝配置文件修改内核配置项修改Makefile添加内核编译配置添加地址映射定义添加平台代码配置内核,是指支持网卡重新编译内核拷贝zImage到目录下重新启动开发板5.如何把网卡驱动加载到Linu*内核.加载到内核之后的效果如何.答:显卡安装:(1)、下载驱动程序首先要找到显卡forLinu*的驱动程序。现在绝大多数的3D显卡都已有了forLinu*的驱动程序,可到各显卡厂商的主页或Linu*的相关站点上去寻找。在安装显卡时,效劳器根据显卡的情况来加载不同的显示模块,如果显示模块加载不正确,显卡就不能正常显示。(2)、装载磁盘驱动器Linu*需要装载磁盘驱动器才能读取文件。启动Linu*后,在字符界面下输入“mount-tvfat/dev/hda1/mnt/winc〞命令,将C盘装载到Linu*下。需要注意的是,如果下载的是压缩文件,选择的是在Linu*下解压,就得先进展装载磁盘驱动器这一步,再进展文件的解压缩。(3)、拷贝文件将*F86_SVGA文件拷贝到/usr/*11R6/bin目录下。注意,这是针对RedHat版本来说,其它版本的路径不一定一样。“cp/mnt/winc/win98/TEMP/*F86_SVGA/usr/*11R6/bin〞(根据自己的情况灵活掌握,关键是路径一定要正确,还要分清字母的大小写)。如果系统提示有同名文件,问是否覆盖,一定要选择“y〞。这些旧文件可能是以前安装显卡时加载的,没有实际用处。在输入文件名的时候,输完*F86后按一下Tab键,再接着输SVGA,下划线_就可以出来了,按键盘上的下划线键是没用的,切记。(4)、配置显卡文件拷贝完成后,输入*configurator,启动显卡配置程序。我在显卡列表中仍然没有找到TridentBlade3D,于是选最后一个选项“Unlist〞,然后选择加载的显示模块为SVGA,再选择显示器型号、显存大小、刷新频率总结:在Linu*下安装显卡驱动程序,首先要下载显卡支持Linu*的驱动程序,再将其拷贝到/usr/*11R6/bin目录下,然后启动显卡配置程序进展配置即可。网卡、声卡等驱动安装可以依此类推6.如何Linu*内核剪裁、编译和移植.答:〔1〕首先下载linu*-软件包并在linu*下解压;〔2〕进入linu*-目录下,修改Makefile:ARCH.=armCROSS_PILE?=arm-linu*-修改时钟:arch/arm/mach-s3c2440/mach-smdk2440.c修改机器码:=1\*GB3①内核中:arch/arm/tools/mach-types=2\*GB3②uboot中:include/asm-arm/mach-types.h配置:makemenuconfig载入配置文件:arch/arm/configs/s3c2410_defconfig选择CPU类型SMDK2440编译内核makezImage3)内核移植分为三个步骤,首先,确定把自己开发的代码放入到内核中的位置;其次,把自己开发的功能增加到Linu*内核的配置选项中使用户能够选择此功能;最后,构建目录Makefile,根据用户的选择,将相应的代码编译到最终生成的Linu*内核中去。1-5引导文引导文1-5任务五制作跟文件系统姓名页数:李兰兰利用网络资源、图书馆资源等查询和讨论一下问题:1.常用根文件系统类型有哪些.它们的作用是什么.有何异同.1:e*te*t是第一个专门为Linu*的文件系统类型,叫做扩展文件系统.:2:e*t2e*t2是为解决e*t文件系统的缺陷而设计的可扩展的高性能的文件系统.又被称为二级扩展文件系统:3:e*t3e*t3是由开放资源社区开发的日志文件系统,.e*t3被设计成是e*t2的升级版本。:4:jsfjsf提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。:5:ReiserFSReiserFS基于平衡树构造的、ReiserFS文件系统在网上公布.ReiserFS3.6.*(作为Linu*2.4一局部的版本),设计成员相信最好的文件系统是那些能够有助于创立独立的共享环境或者命名空间的文件系统。:6:*fs*fs是一种非常优秀的日志文件系统,它是SGI公司设计的.*fs被称为业界最先进的,最具可升级性的文件系统技术.它是一个全64位,快速,稳固的日志文件系统,2.Linu*文件系统构造。各局部的作用是什么.1./bin目录/bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些命令都是二进制文件的可执行程序(bin是binary--二进制的简称),多是系统中重要的系统文件。2./sbin目录/sbin目录类似/bin,也用于存储二进制文件。因为其中的大局部文件多是系统管理员使用的根本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。3./etc目录/etc目录存放着各种系统配置文件,其中包括了用户信息文件/etc/passwd,系统初始化文件/etc/rc等。linu*正是*这些文件才得以正常地运行。4./root目录/root目录是超级用户的目录。5./lib目录/lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。这些文件包含了可被许多程序共享的代码,以防止每个程序都包含有一样的子程序的副本,故可以使得可执行文件变得更小,节省空间。6./lib/modules目录/lib/modules目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引导系统所需的模块(例如网络和文件系统驱动)。7./dev目录/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件外部设备。比方,用户可以通过/dev/mouse来鼠标的输入,就像其他文件一样。8./tmp目录/tmp目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用/var/tmp来代替/tmp,因为前者可能拥有一个更大的磁盘空间。9./boot目录/boot目录存放引导加载器(bootstraploader)使用的文件,如lilo,核心映像也经常放在这里,而不是放在根目录中。但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的文件系统会更好一些。还有一点要注意的是,要确保核心映像必须在ide硬盘的前1024柱面内。10./mnt目录/mnt目录是系统管理员临时安装(mount)文件系统的安装点。程序并不自动支持安装到/mnt。/mnt下面可以分为许多子目录,例如/mnt/dosa可能是使用msdos文件系统的软驱,而/mnt/e*ta可能是使用e*t2文件系统的软驱,/mnt/cdrom光驱等等。11./proc,/usr,/var,/home目录3.根文件系统制作使用哪些工具.如何使用.下载busybo*工具

说明:用于制作可执行命令工具集建立目标板空根目录文件夹及根目录下的文件夹移植Busybo*安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下。制作yaffs文件系统包下载根文件系统包到开发板上,并运行4.制作根文件系统并移植到开发板。答:=1\*GB3①.创立文件系统目录=2\*GB3②.获得busybo*源码〔busybo*-〕配置、编译=3\*GB3③完善根文件系统=4\*GB3④制作YAFFS2镜像=5\*GB3⑤.开载文件到开发板移植Android内核到FS2410开发板上:1从code.google./p/android/downloads/list上下载linu*--android-1.0_r1.tar.gz

2、将内核解压到用户目录,如/home/wangan/kernel.git

3、进入kernel.git文件夹,如cd~/kernel.git/

4、修改arch/arm/plat-s3c24**/mon-smdk.c文件中的nandflash分区设置,如geditarch/arm/plat-s3c24**/mon-smdk.c

5、在.codesourcery./gnu_toolchains/arm/portal/release644上下载IA32GNU/Linu*TAR。

6、将文件解压到用户目录,如/home/wangan/arm-2008q3

7、进入arm-2008q3/bin文件夹,如cd~/arm-2008q3/bin/

8、添加当前路径进入环境变量,如e*portPATH=$PWD:$PATH,或修改~/.bashrc文件并重新登录

9、进入内核文件夹,如cd~/kernel.git/

10、修改Makefile文件,如geditMakefile

更改ARCH和CROSS_PILE

*ARCH

?=$(SUBARCH)

ARCH

?=arm

*CROSS_PILE

?=arm-eabi-

CROSS_PILE

?=arm-none-eabi-

11、从Linu*-内核压缩包中提取.config文件〔注:config前面有个“.〞〕放入kernel.git文件夹

12、运行makemenuconfig

13、退出并保存.config

1-6引导文引导文1-6任务六搭建FTP效劳器姓名页数:李兰兰利用网络资源、图书馆资源等查询和讨论一下问题:什么是FTP.英文全称.它是如何工作的.FTP〔FileTransferProtocol,FTP〕是TCP/IP网络上两台计算机传送文件的协议,FTP是在TC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论