免费预览已结束,剩余31页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Coretek 科银京成质量部 王彪 2020-1-18ARM Winbond W90P710平台的RedBoot移植1Redboot简介32开发环境搭建32.1 安装cygwin42.2 安装arm-elf工具链42.3 添加环境变量42.4 安装源码树目录和配置工具configtool53ecos & redboot的可配置性73.1 ecos的模块化设计83.2 CDL语言83.3 配置工具83.4 配置实例:添加W90P710支持包94Redboot启动过程135Redboot的移植方案及实现145.1 基本的redboot移植155.2 添加网卡驱动165.2.1 网卡驱动的原理165.2.2添加网络驱动包205.2.3 以太网驱动标准接口225.2.4 IP地址配置245.2.5 改变控制台信道至网口255.3 添加FLASH驱动285.3.1 Flash驱动原理285.3.2添加FLASH驱动包295.3.3 FLASH地址配置316.Redboot的烧写317.FAQ327.1 配置问题327.1.1 cygwin环境调用不了confitool327.1.2 Ls,cd等unix命令cygwin报错为command not found327.1.3 超级终端接收不了键盘字符327.2 擦写flash需要注意点347.2.1 .为什么擦不掉已经建立的img信息347.2.2 Flash擦除时的位宽问题347.2.3 关于在调试器内观察flash内容的有趣现象357.3 arm可执行文件的反汇编357.4参考资源357.5 其他351Redboot简介RedBoot既是一个bootloader , 也是一个ROM monitor,被设计用于嵌入式环境系统的调试和启动,可独立运行在目标平台上,包含了GDB stub. GDB stub 允许从应用程序调试的GDB宿主机连接目标平台。这种连接即可以通过串口来实现,也可以通过以太网口来实现。它有如下的几个特性:1 启动脚本支持2 管理和控制的命令行支持3 通过串口或者以太网口的访问4 GDB支持5 Flash映象系统的支持6 Xyzmodem协议支持7 支持使用bootp或者静态IP地址配置的网络启动Redboot以ecos中的硬件抽象层(HAL)作为它的基础,但是它并步依赖于ecos,只要将根据目标板的特性实现硬件抽象层,redboot就可以独立运行,作为一个ROM monitor/bootloader.它的代码结构如下图所示:从图上可以看出,RedBoot建立在eCos的硬件抽象层和设备驱动程序的基础上。如图中虚线以下部分。在这个基础上,RedBoot集成了GDB STUB协议,网络通讯协议TCP/IP、文件传输协议xyzModem和下载协议http/tftp。以及一个简单的flash image管理系统。最终RedBoot向用户提供两种工作方式:命令行方式,GDB调试方式。在选择通信信道方面,RedBoot可支持多个串口作为终端,在启动时,RedBoot将从各个终端上侦测输入。当第一次从一个终端如UART0上接受到输入以后则把这个通道作为当前的终端,忽略其他终端的任何输入。例如,在用超级终端通过串口线连接到开发板的UART0上,敲入字符后,RedBoot将在这个通道上接受用户输入,并不再接受其他通道如UART1上的输入。同样,如果用户用arm-elf-gdb连接到开发板的UART0,那么RedBoot将不再接受其他通道的输入。目前ecos/RedBoot支持多种处理器架构和硬件平台,包括ARM、日立SH、MIPS、PowerPC、SPARC以及x86等。2开发环境搭建开发环境的搭建是移植redboot的第一步。首先,需要安装cygwin ,cygwin是运行在windows上的unix虚拟环境.由于开发编译redboot需要的工具集主要是GNUPro,而GNUPro中的工具主要是运行在unix兼容环境下,所以当用户在windows平台下进行ecos/redboot开发时,需要建立unix虚拟环境。arm-elf工具链将高级语言编译成arm指令集的工具,由于W90P710采用的是ARM7TDMI内核。如果目标版是其它体系的芯片,那么就要下载其它的工具链,如mips-elf,frv-elf等。环境变量的添加使得在cygwin命令行中可以直接条用特定的工具,需要添加的环境变量有三个:1 Cygwin的环境变量,用于调用unix环境的基本命令,如cd,ls.2 Arm-elf工具链,用于编译支持arm体系的指令3 Configtool工具的路径,用于在cygwin中直接调用它,以发挥ecos/redboot的可配置性。关于这一点,将在可配置性里做详细描述。2.1 安装cygwin双击cygwinenv-2.00.exe,安装在C: cygwin目录下,并在C:cygwinusr目录下建立arm-ecos目录。2.2 安装arm-elf工具链安装bu-2.15_gcc-3.4.3-c-c+-java_nl-1.12.0_gi-6.1.exe,安装好后,把他拷贝到刚才建立的C:cygwinusrarm-ecos目录下。2.3 添加环境变量在系统的path环境变量中加入两个路径:C:cygwinbin和C:cygwinusrarm-ecosbin环境变量设置正确验证方法:在Macraigor Cygwin Shell中,输入命令arm-elf-gcc,如果提示no input files即为正确。这里要注意的是,当输入arm-elf-gcc时可能会出现如下的画面:安装arm-elf和cygwin时,它们各自都包含了cygwin1.dll文件,cygwin自带的cygwin1.dll文件版本为1005.9.00,而aem-elf开发工具链的cygwin1.dll版本为100。从而引起了冲突问题,解决的办法是,删除一个版本较旧的cygwin1.dll文件(1005.9.00)。arm-elf的cygwin1.dll在目录C:cygwinusrarm-ecosGNUARM bin下,cygwin的cygwin1.dll在目录C:cygwinbin下。删除后重新启动cygwin的bash即显示no input files,如下:2.4 安装源码树目录和配置工具configtoolecos 的源代码可从匿名的cvs服务器上获得,具体见http:/eC得到的ecos源码是一个目录树,其第一层的代码包如下图:需要关注的包为package,它包含了所支持的各种硬件的源代码。而后需要将下载得到的configtool工具拷贝到源码树的如下目录:ecoshosttoolsconfigtool,再在系统的环境变量系统变量的path变量中添加新值,如下图:接着就可以从bash里调用ecos的配置工具configtool了,如下图:启动configtool候需要再配置三个路径,单击配置工具的Tools选项,再选择Paths标签,如下图:Build tools需要配置的是编译器的路径,在此即为arm-elf工具链中的bin目录的位置,选择: C:cygwinusrarm-ecosarm-elfbinUser tools需要配置的是cygwin的bin目录,选择: C:cygwinbin。最后单击配置工具的build-repository,选择ecospackage所在的路径,如下图:这样,configtool就可以将ecospackage作为配置仓库,并根据应用对需要编译的文件做选择。至此整个开发环境就配置完毕了。3ecos & redboot的可配置性ecos的可配置性,源于它的模块化设计,并引入CDL脚本配置语言管理ecos 代码体系中的各个组件,通过配置工具来实现其可配置性。3.1 ecos的模块化设计ecos被设计成很多功能独立的子模块组成的集合,如kernel,redboot等,这些子模块,称之为组件,整个ecos就可看成是一个组件库。对应源代码目录树下的子目录package.在package目录下有一个数据库文件ecos.db,其中包含了组件库中所有包的详细信息。表1-1是package下个组件的功能说明表 11目录说明Compat用于兼容POSIX(IEEE1003.1)和uITRON3.0软件包Cygmon调试监视器cygmon的包devs设备驱动程序组件的包,例如串口、以太网、PCMCIA等Error公共的错误和状态包,在不同的包中为错误和状态的报告提供公共接口Fs包含ROM文件系统和RAM文件系统Hal目标硬件平台的HAL包Infra包含公共类型、宏、代码追踪、断言、和启动选项的eCos基础包Io独立于硬件设备的公共I/O系统支持包Isoinfra实现了ISO C库和POSIX的包KerneleCos内核中核心功能的包,包括调度器,信号量,线程等LanguageISO C库和数学库。这样的应用中就可使用标准C库和浮点数学库中的函数Net网络支持包Redboot调试用的redboot ROM监视器Services包括动态内存分配、压缩和解压缩的支持库3.2 CDL语言为了管理组件库中为数众多的包,ecos引入了cdl语言来实现可配置性,在每个包下都有一个cdl文件描述该包的详细信息,以供配置工具识别。关于CDL的详细信息,请参见文档cdl_guide.pdf3.3 配置工具在ecos 中,有命令行配置工具,图形化配置工具,内存布局工具,包管理工具等。其中有些工具又包含了其他工具,如包管理工具是图形化配置工具的一个子集。图形化配置工具即为上一节所介绍的配置工具configtool.关于它的介绍在参考资料1的ecos工具集中有详细的描述。现在可以解释下配置该工具的几个路径:Build path:使配置工具知道所需要调用的编译器路径为何,编译成何种指令集。User path:单击配置工具的tool-shell,即调用了cygwin环境的shell,该路径使配置工具知道cygwin环境的路径。Repository(仓库):使配置工具知道ecos 的组件仓库在哪里。 3.4 配置实例:添加W90P710支持包以redboot porting to W90P710为例,简单介绍如何通过配置系统加入支持特定目标版的包。1. 执行5.1节的1、2、3步。2. 在对w90p710包内的文件修改完成的基础上,向ecos.db文件注册添加的包。添加如下的cdl语言:package CYGPKG_HAL_ARM_W90P710 alias Winbond W90P710 edu. board hal_arm_w90p710 arm_w90p710_hal directoryhal/arm/w90p710scripthal_arm_w90p710.cdlhardwaredescription The w90p710 HAL package provides the support needed to run eCos on a ARMWinbond W90P710 edu. board.这段cdl语言描述在代码体系中已经加入了一个新包,名称为Winbond W90P710 edu. Board.3. 在ecos.db中加入一个新的目标平台,如下:target w90p710 alias ARM Winbond W90P710 board w90p710 packages CYGPKG_HAL_ARM CYGPKG_HAL_ARM_W90P710 description The w90p710 target provides the packages needed to run eCos on an ARMWinbond W90P710 board board. 这段cdl语言,描述在代码体系中新添加了一个目标平台,名称是ARM Winbond W90P710 board.它包含两个包:CYGPKG_HAL_ARM、CYGPKG_HAL_ARM_W90P710。4. 在配置工具中检查添加的目标平台和包在cygwin的bash里,输入命令configtool,以调用配置工具,如下图:选择Build-templetes,弹出如下的templetes对话框:在hardware选项中选择ARM Winbond W90P710 board,它和ecos.db中添加的target是对应的,因为target里的别名(alias)正是ARM Winbond W90P710 board,如下:alias ARM Winbond W90P710 board w90p710 在选定了目标平台后,在templetes对话框的package中选择redboot,如下:选择OK后,忽略弹出的警告信息,单击continue即可:最后选择Build-packages,弹出了在该目标平台下包含的包,其中的Winbond W90P710 edu. board赫然在目,这于第一个添加的包的别名又是一致的。如下图:alias Winbond W90P710 edu. board hal_arm_w90p710 arm_w90p710_hal 最后,选择Build-library编译,在编译之前,配置工具会要求保存配置文件,单击保存后,即可开始编译:如果移植的代码没有问题,那么配置工具会在刚才与保存的配置文件相同的目录下生成一个目录树,如图:Build目录下是一些配置工具用来建立映象过程中使用和创建的文件目录,如makefiles等。Install目录又包含三个目录:bin目录包含是生成的目标文件,有三种格式elfbinimg。Include目录包含了编译目标文件所需要的头文件Lib目录包含所需要的库,并且包含了内存布局的脚本文件target.ld4Redboot启动过程编写硬件启动的初始化过程是HAL移植的一个难点。在ARM体系中,当硬件重新上电后,系统的程序指针会自动指向地址0(通常地址0存放着bootloader代码段)。在ECOS操作系统中,程序首先会运行vectors.S文件(该文件存在于hal/arm/arch/src/目录下),从异常向量reset_vector跳转到platform_setup1宏函数,它位于W90P710平台层的hal_platform_ setup.h文件中。而后的整个过程可由下图描述:有必要注意的几点是:platform_setup1宏函数根据启动方式的不同,实现也不同。若在ROM方式下:它执行硬件的初始化,在函数的结尾完成内存的重定位(remap)若在RAM方式下:它是一个空函数。搬移数据段只有在启动方式为ROM或者ROMRAM的情况下才会发生,RAM方式启动无需搬移。cyg_start是redboot的入口点。5Redboot的移植方案及实现由于redboot建立在ecos的hal层之上,移植redboot的主要任务就是根据目标平台特性重新实现HAL层,由于ecos优秀的可配置性,这项工作相对容易。按照移植的规模来说,可以有三种方案:1. 只移植最基本HAL层模块,不提供网络支持,不提供FLASH文件系统支持。2. 在1的基础上提供网络支持(需要目标板的网卡驱动支持)3. 在2的基础上提供FLASH文件系统支持(需要目标板的FLASH驱动支持)对应于以上的三种方案,移植完成后的命令集也有所不同,1的命令最少,2其次,3的最完整。1的命令缺少fis命令族,缺少网络命令 ping ,ip_address等2的缺少fis命令族3缺少几个特殊的命令,需要特殊的硬件平台支持,如fis lock命令,只在硬件平台上支持锁定Flash的情况下才能使用移植的焦点HAL层又可以再划分为三层:1 Architecture(体系结构层:ARM | MIPS | PPC ?)2 Variant(变体层:若Architecture为ARM,则芯片到底是ARM7 | ARM9 |ARM11 ?)3 Platform(平台抽象层,根据具体的芯片不同做不同的修改)因为ecos对于多数的architecture都是支持的,所以port of architecture基本不需要做。当然,如果移植一个ecos不支持的architecture,那么工作量就相当大了。Variant层的移植亦很简单,对于ARM来说,变体主要有ARM7,ARM9等。在移植的时候也不需要关心。所以主要的工作量在Platform层。由于具体的目标硬件在被内存map的时候,地址是不一样的。另外对于目标平台的硬件配置(如:Ram大小,Flash大小等)不一样,所以需要加入一个包,并在ecos.db中注册,以使配置工具可以编译出支持该平台的redboot。5.1 基本的redboot移植移植redboot最简单的方法,是从ecos已经支持的目标平台中选取一个与自己的芯片特征最接近的HAL包作为参考,然后仔细阅读该芯片的datasheet。这里选取了e7t平台作为参考(芯片S3C4510)。1. 建立ecospackageshalarmw90p710目录。2. 拷贝packageshalarme7t下的文件至w90p710目录下。3. 重命名与e7t有关的文件名。修改后w90p710的目录构如下图所示:4. w90p710包下的current表示它的版本号,更深的一级的目录有四个:1) cdl包含了描述w90p710包的配置脚本hal_arm_w90p710.cdl,里面的信息有:CYG_HAL_STARTUP:启动类型选择,redboot有三种启动类型可供选择,RAM,ROM,RAMROM.l ROM类型:redboot存放和运行都在ROM中l RAM类型:通过ICE等调试工具将redboot直接下载到RAM中运行l RAMROM类型:redboot驻留在ROM空间中,但是执行前复制到RAM中CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS:目标平台的通道数量,对应串口的数,如Uart0对应通道0,Uart1对应通过1CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL:选择0,即用Uart0调试CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL:控制台信道选择,也选择0。CYGNUM_HAL_VIRTUAL_VECTOR_CHANNELS_DEFAULT_BAUD:选择的信道上波特率设置,选取115200.CYGNUM_HAL_ARM_W90P710_CLOCK_SPEED:芯片的时钟频率。其他的配置项除了将e7t改为w90p710外,都不需要修改。2) includel mlt_arm_w90p710_ram/rom.h、.ldi 、.mlt 文件包含对ram/rom属性的定义,包括它们的起始地址,大小,读写属性等。l hal_cache.h文件定义了对cache操作的宏。l Hal_diag.h文件并不需要改动,可以不管它。l hal_platform_ints.h 文件定义了平台的中断号分配。l hal_platform_setup.h包含了宏PLATFORM_SETUP1,它是目标机上电后的第一段程序执行中继,用以对目标平台做硬件上的初始化,需要对目标平台的各种控制寄存器有清晰的了解。l plf.io文件内主要包含了对平台各控制寄存器的定义,可以参照e7t的方法定义。l plf_stub.h文件包含了一些GDB stub的宏,不需要修改。3) Misc包含最小版本的redboot配置文件redboot_ROM.ecm,可以不去管他4) Srcl flash_cksum.tcl文件是用老一代的tcl配置语言写的,不用去管它。l hal_diag.c文件用于实现串口的驱动程序,定义了一些串口相关的函数,需要跟据华帮W90P710的datasheet重新实现这些函数接口。l redboot_module.c 可以不去管它。l W90p710_misc.c文件中包含一些中断的处理函数和时钟的初始化工作。需要根据华帮W90P710的datasheet重新实现这些函数接口。以上文件的改动需要熟读W90P710的datasheet: W90P710CD_CDGf.pdf5.2 添加网卡驱动5.2.1 网卡驱动的原理l 以太网数据帧格式,帧结构体的定义,IEEE 802.3u标准IEEE 802.3u(100Base-T)是100兆比特每秒以太网的标准。100Base-T 技术中可采用3类传输介质,即 100Base-T4、100Base-TX 和 100Base-FX,它采用 4B/5B 编码方式。快速以太网(Fast Ethernet)的速度在原 10Base-T 以太网的基础上提高了10倍,并保留了其帧格式、MAC 机制和 MTU。同时现有的 10Base-T 的应用程序和网络管理工具同样适用于快速以太网。 100Base-T 标准正式定义在 IEEE 802.3u 中。和以太网一样,100Base-T 仍是基于载波监听多路访问和冲突检测(CSMA/CD)技术。100Mbps 快速以太网标准几种不同的布线方式: 100BASE TX:两对高质量双绞线 100BASE T4:四对普通双绞线 100BASE FX:光缆 快速以太网规范包括传输速度的自动协商机制,这使得供应商提供的双速以太网接口能够自动安装以及运行在 10 Mbps 或 100 Mbps 的速度下。IEEE 标识符包括三块信息。其一,“100”表示传输速度 100M;其二,“Base”表示“基带”,信令的一种。基带信令可以简单理解为以太网信号是唯一的介质传输信号。其三是关于网络段类型的阐述。“T4”属于双绞线网段类型,具有四对电话线路级双绞线;“TX”属于双绞线网络段类型,具有两对双绞线,基于由 ANSI (美国国家标准化组织)制定的数据级双绞线物理介质标准;“FX”属于光纤链路网络段类型,基于由 ANSI 制定的光纤双绞线物理介质标准,并使用光纤中的两股。TX 和 FX 介质标准统称为 100BASE X。快速以太网中的 100BASE TX 和 100BASE FX 介质标准均来自 ANSI 制定的物理介质标准。 ANSI 物理介质标准最初是为光纤分布式数据接口(FDDI) LAN 标准(ANSI 标准 X3T9.5)开发的,并且现在广泛应用于 FDDI 局域网中。协议结构关于以太网802.3中,快速以太网帧最小值为64字节,最大为1518字节。7166246= n =15004 bytesPreSFDDASALength TypeData unit + padFCS Preamble(Pre) 7字节。Pre 字段中1和0交互使用,接收站通过该字段知道导入帧,并且该字段提供了同步化接收物理层帧接收部分和导入比特流的方法。 Start-of-Frame Delimiter(SFD) 1字节。字段中1和0交互使用,结尾是两个连续的1,表示下一位是利用目的地址的重复使用字节的重复使用位。 以太网帧前导字符以太网帧的开始处都有64比特(8字节)的前导字符,如图所示。其中,前7个字节称为前同步码(Preamble),内容是16进制数0xAA,最后1字节为帧起始标志符0xAB,它标识着以太网帧的开始。前导字符的作用是使接收节点进行同步并做好接收数据帧的准备。 Destination Address(DA) 6字节。DA 字段用于识别需要接收帧的站。 Source Addresses(SA) 6字节。SA 字段用于识别发送帧的站。 Length/Type 2字节。如果是采用可选格式组成帧结构时,该字段既表示包含在帧数据字段中的 MAC 客户机数据大小,也表示帧类型 ID。 Data 是一组 n(46= n =BDMA-MAC-PHY(ics1890 | lxt970 | lxt972 | rtl201)W90P710:MPU-MAC-PHY(dm9161a.)5.2.3 以太网驱动标准接口redboot定义标准的网络驱动API,以W90P710_eth_XXX的形式,如以下的代码所示:ETH_DRV_SC(W90P710_sc, &W90P710_priv_data, / Driver specific data eth0, / Name for this interface W90P710_eth_start, W90P710_eth_stop, W90P710_eth_control, W90P710_eth_can_send, W90P710_eth_send, W90P710_eth_recv, W90P710_eth_deliver, W90P710_eth_poll, W90P710_eth_int_vector );NETDEVTAB_ENTRY(W90P710_netdev, W90P710, W90P710_eth_init, &W90P710_sc);它们之间的调用关系,详见参考文档/docs-latest/ref/ecos-ref.htmll redboot中发送ARP包进行网络通信的过程因为移植完网络驱动要做的第一个测试就是用Ping命令检查网络是否连通,而ping命令在没有对方MAC地址的情况下是用ARP协议寻找对方的MAC地址的,故在这里对它做一个介绍。在阐述这部分内容之前,需要理解的是,网卡驱动并不想串口,可以直接将数据填到FIFO,因为网络遵循的是TCP/IP网络协议栈,这里所描述的驱动仅仅对以太网层的操作,至于网络层和应用层则不是关心的对象,因为Redboot提供TCP/IP协议栈。在进行系统初始化Cyg_start,会调用net_init对网络进行初始化,net_init又调用_arp_request(ip_addr_t *)_local_ip_addr, &enet_addr, 1)查询自己的MAC地址,将它放到enet_addr这个变量中,最后一个参数是指示是否是查询自己的MAC地址。在_arp_request中有一个判断: if (!allow_self) /original /if(allow_self) /wangbiao modify end / Special case request for self if (!memcmp(ip_addr, _local_ip_addr, 4) memcpy(eth_addr, _local_enet_addr, sizeof(enet_addr_t); return 0; 我觉得这是一个bug。因为如果要进入这个判断语句的话,那么需要将allow_self置0,明显和本意违背了。所以将它改成了红色语句的这些,试验证明也是OK的,初始化的时候并不向主机发送ARP查询。如果_arp_request里不做改变的化,它开始装配帧,又调用_enet_send对帧的头部进行封装,而后又调用eth_drv_write,eth_drv_write首先调用标准接口(sc-funs-can_send)(sc)(意即W90P710_eth_can_send) 查询是否有可用的帧,它的源码如下:/ In case there are multiple Tx frames waiting, we should/ return how many empty Tx spots we have. For now we just/ return 0 or 1.static int W90P710_eth_can_send(struct eth_drv_sc *sc) TXFRAME_DESCRIPTOR *TxFp, *StartFp; / find the next unused spot in the queue +W90P710_eth_can_send_count; StartFp = TxFp = (TXFRAME_DESCRIPTOR*)TXDLSA; while (TxFp-Reserved & TXFD_OWNER_EMC) TxFp = TxFp-NextFD; if (TxFp = StartFp) return 0; +W90P710_eth_can_send_count_OK; return 1;一开始很难理解为什么查询是否可以发送是这样的代码,因为在while语句内,如果哪个帧的ownership是属于EMC,则意味着该帧即可以发送。但是后来理解了ownership位的作用想明白了。该函数是把空的还未装配的帧描述符作为一种资源,意即注释语句的empty Tx spots。因为一开始都没有对帧描述符的ownership位置1,说明帧描述符都是可用的,返回的话自然是1。如果有可用的帧,那么eth_drv_write 对 sglist做些初始化工作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮外包服务合同范本及风险提示
- 2025-2030中国汽车智能底盘线控技术成熟度评估报告
- 汽车销售合同签订要点解析
- 服装设计合同模板范文
- 2025先进环保新型材料行业市场违规的供需态势分析及投资机会研判规划报告
- 2025先进制音电子材料行业市场供需调研及投资前景规划分析研究报告
- 2025先进传感与检测技术行业市场发展分析及前景研究报告
- 2025互联网金融服务行业市场研究市场分析行业前景行业发展趋势报告
- 非开挖穿越工程施工设计方案详解
- 2026年立体车库租赁管理合同
- 2025年师德师风知识竞赛考试试卷及答案(一)
- 项目建设众筹合同范本
- 2025法院司法辅助人员试题必考附答案
- 新能源汽车保养培训
- 徐汇区社工笔试题目及答案
- 小米智能家居培训
- (已压缩)(11)义务教育物理课程标准日常修订版(2022年版2025年修订)
- 企业融资方案设计及风险控制措施
- 初中生涯规划课程设计方案
- 国家赔偿法-形成性考核(一):第1-3章(占总成绩10%)-国开(ZJ)-参考资料
- DB34-T 4164-2022 住宅工程质量分户验收规程
评论
0/150
提交评论