u-boot下自动升级功能设计说明_第1页
u-boot下自动升级功能设计说明_第2页
u-boot下自动升级功能设计说明_第3页
u-boot下自动升级功能设计说明_第4页
u-boot下自动升级功能设计说明_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、U-boot 下自动升级功能设计说明书文档版本02发布日期2015-04-01非经本公司2013-2015。保留一切权利。市海思半导体,任何和个人不得擅自摘抄、本文档内容的部分或全部,并不得以任何形式。商标、海思和其他海思商标均为市海思半导体的商标。本文档提及的其他所有商标或商标,由各自的所有人拥有。注意您的产品、服务或特性等应受海思公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的或使用范围之内。除非合同另有约定,海思公司对本文档内容不做任何明示或默示的或保证。由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的所

2、有陈述、信息和建议不任何明示或暗示的担保。市海思半导体市龙岗区坂田:518129地址:电气生产中心:http:/客户服务:客户服务传真:客户服务邮箱:supU-boot 下自动升级功能设计说明书前 言前言概述本文档主要是 U-boot 下 SD 卡/ U 盘自动升级功能的需求、应用场景分析及其升级原理等。并详细描述了 U-boot 下 SD 卡/ U 盘升级功能的设计思路相关功能开发提供参考。细节,为后续工作本文未做特殊说明,Hi3516D 与 Hi3516A 完全一致产品版本与本文档相对应的产品版本如下。海思专有和信息i市海思半导体产品名称产品版本说明Hi3516CV100-Hi3518V1

3、00包含 Hi3518A 和 Hi3518CHi3520AV100-Hi3521V100-Hi3531V100-Hi3520DV100Hi3520D 不支持 SD 卡升级Hi3515AV100Hi3515A 不支持 SD 卡升级Hi3535V100Hi3535 不支持 SD 卡升级Hi3516AV100-Hi3516DV100-Hi3536V100Hi3536 不支持 SD 卡升级U-boot 下自动升级功能设计说明书前 言读者对象本文档(本指南)主要适用于以下工程师:技术支持工程师开发工程师修订修订 内容。累积了每次文档更新的说明。版本的文档包含以前所有文档版本的更新ii修订日期版本修订说明

4、2015-04-0102添加 Hi3536 的相关内容。2014-12-3001添加 Hi3516D 的相关内容。2014-10-1900B03补充 Hi3516A 的相关描述。2013-11-1800B02补充 Hi3535 的相关描述。2013-04-0800B01第 1 次临时版本发布。U-boot 下自动升级功能设计说明书目 录目录1设计分析1需求分析1流程设计1实现过程3整体结构3编译开关3模块结构5具体实现5FAT 文件系统支持5MMC 驱动移植6..6使能USB OHCI7手动升级验证移植的 MMC 驱动8手动升级验证移植的 USB OHCI

5、驱动9增加自动升级. 103详细设计123.1 Auto Update 详细设计.2数据描述12函数描述15海思专有和信息iii市海思半导体U-boot 下自动升级功能设计说明书插图目录插图目录图 1-1 U-boot 下 SD 卡/U 盘升级简要流程图2图 3-1函数运行过程图17海思专有和信息iv市海思半导体U-boot 下自动升级功能设计说明书1 设计分析1设计分析1.1 需求分析以前的升级方案是客户通过上层应用实现,该方案可靠性差、灵活性不高,提供一种更加可靠灵活的升级方案。现在在产品应用中经常有升级 uboot、kernel 和 rootfs 的需要,只需按照以下

6、步骤就可完成升级。步骤 1.步骤 2.步骤 3.步骤 4.将提供的镜像文件拷贝到自备的 SD 卡或 U 盘。插上 SD 卡或 U 盘。重启设备。等待升级完成。-结束1.2 流程设计升级流程如图图 1-1 所示。海思专有和信息1市海思半导体U-boot 下自动升级功能设计说明书1设计分析图1-1 U-boot 下 SD 卡/U 盘升级简要流程图当同时SD 卡和U 盘时,若SD 卡中没有有效升级包,则系统自动转入U 盘升级,若SD 卡中含有有效升级包直接使用SD 卡中的升级包升级系统,不再扫描U 盘中的内容。具体实现见 “函数实现”。2完成系统自动升级检测通过则将相应的文件load到内存然后写入F

7、lash在SD/U盘卡中检索升级文件并校验文件信息MMC/USB设备初始化并检查SD/U盘卡状态文件系统并检查文件系统状态U-boot 下自动升级功能设计说明书2 实现过程2实现过程以下的实现均以Hi3536 为例进行说明,其中SD 卡升级以Hi3516A 为例进行说明,具体的代码路径需要根据实际使用修改。Hi3520D/Hi3515A/Hi3535/Hi3536仅支持 U 盘升级,不支持SD 卡升级。整体结构编译开关自动升级的编译开关在配置文件中,用户可根据需要打开相应的宏定义开关。配置文件路径include/configs/hi3516c.h include/configs/hi3518a

8、.h include/configs/hi3518c.h include/configs/ hi3520d.h include/configs/ godcare.h include/configs/ godarm.h include/configs/ godnet.hinclude/configs/ hi3535.h【hi3516c】【hi3518a】【hi3518c】【hi3520d/hi3515a】【hi3520a】【hi3521】【hi3531】【hi3535】include/configs/ hi3516a.h 和 include/configs/hi3516a_spinand.hin

9、clude/configs/ hi3536.h 和 include/configs/hi3536_spinand.h【hi3516a】【hi3536】下面以 Hi3516A 代码为例,说明各部分的相关作用/*-* sdcard/usb storage system update* -*/#define CONFIG_AUTO_UPDATE#ifdef CONFIG_AUTO_UPDATE1/升级功能总开关海思专有和信息3市海思半导体U-boot 下自动升级功能设计说明书2 实现过程/SD卡升级开关/U盘升级开关#define CONFIG_AUTO_SD_UPDATE#define CONFI

10、G_AUTO_USB_UPDATE11#endif/ 以下四行是SD卡/U盘升级的公共部分包含FAT文件系统编译开关#define#define LITTLE_ENDIANCONFIG_DOS_PARTITION11#defineCONFIG_CMD_FAT1/*-* sdcard* -*/#ifdef CONFIG_AUTO_SD_UPDATE控制/ SD卡驱动编译开关,受总开关#define #define #define #define #define#defineCONFIG_HIMCI_HI3516a REG_BASE_MCI CONFIG_HIMCI_V100 CONFIG_GEN

11、ERIC_MMC CONFIG_MMCCONFIG_CMD_MMC0 x206e00001#endif/*-* usb* -*/USB 驱动默认打开,上述的 CONFIG_AUTO_USB_UPDATE 开关在升级流程上起控制作用#define #define #define #define #define#defineCONFIG_USB_OHCI CONFIG_CMD_USB CONFIG_USB_STORAGE CONFIG_USB_XHCICONFIG_SYS_USB_XHCI_MAX_ROOT_PORTSCONFIG_LEGACY_USB_INIT_SEQ11112以上宏定义包含三部

12、分:升级功能总开关及 SD 卡/U 盘升级的公共部分SD 卡驱动USB OHCI 驱动注释或者打开 CONFIG_AUTO_UPDATE 宏定义直接控制是否支持 SD 卡/U 盘自动升级功能。在打开升级功能总开关的前提下,以下两行的注释或者保留可以进一步控制是否支持 SD 卡升级或者 U 盘升级#define CONFIG_AUTO_SD_UPDATE#define CONFIG_AUTO_USB_UPDATE114U-boot 下自动升级功能设计说明书2 实现过程默认 SD 卡/U 盘同时支持,两者共存时的升级策略将在 3.1 “Auto Update 详细设计”中进一步说明。2.1.2 模

13、块结构下面以 Hi3536 代码为例,SD 卡升级以 Hi3516A 代码为例,说明升级模块中各个子模块的代码路径,其他码即可。仅需将 Hi3536 或Hi3516A 的相关代码改为相应的代黑色部分为需要修改的文件红色部分为新增文件编译Makefile- 配置board/hi3536/board.c【程序】include/configs/hi3536.h或者include/configs/hi3536_spinand.h- SD驱动drivers/mmc/himciv100_3516a.c drivers/mmc/himciv100.c drivers/mmc/himciv100.h driv

14、ers/mmc/mmc.c-USB驱动drivers/usb/host/hiusb/hiusb-3536.c drivers/usb/host/hiusb/hiusb-ohci.c drivers/usb/host/hiusb/hiusb-ohci.h drivers/usb/host/hiusb/hiusb-xhci-3536.c drivers/usb/host/hiusb/xhci.c drivers/usb/host/hiusb/xhci.h drivers/usb/host/hiusb/xhci-mem.c drivers/usb/host/hiusb/xhci-ring.c dri

15、vers/usb/host/hiusb/Makefile- update主控流程 product/hiupdate/Makefile product/hiupdate/auto_update.c product/hiupdate/mmc_init.cproduct/hiupdate/usb_init.c【编译开关】具体实现FAT 文件系统支持在配置文件中增加 FAT 相关的编译开关即可,红色部分为相关修改5U-boot 下自动升级功能设计说明书2 实现过程/*-* sdcard/usb storage system update*/#define CONFIG_AUTO_UPDATE #ifd

16、ef CONFIG_AUTO_UPDATE#define CONFIG_AUTO_SD_UPDATE #define CONFIG_AUTO_USB_UPDATE#endif111#define #define#define LITTLE_ENDIAN CONFIG_DOS_PARTITIONCONFIG_CMD_FAT111MMC 驱动移植编译开关在配置文件中增加 MMC 驱动编译开关,相关:/*-* sdcard* -*/ #ifdef CONFIG_AUTO_SD_UPDATE#define #define #define #define #define#defineCONFIG_HIM

17、CI_HI3516a REG_BASE_MCI CONFIG_HIMCI_V100 CONFIG_GENERIC_MMC CONFIG_MMCCONFIG_CMD_MMC0 x206e00001#endifMMC 驱动编译开关 CONFIG_AUTO_SD_UPDATE 受控于升级功能总开关CONFIG_AUTO_UPDATE 代码移植下面以 Hi3516A 代码为例,说明 MMC 驱动模块相关的代码路径黑色部分为修改的文件红色部分为新增文件drivers/mmc/himciv100.c drivers/mmc/himciv100.h drivers/mmc/mmc.cdrivers/mmc/

18、himciv100_3516a.c其他对应代码:6U-boot 下自动升级功能设计说明书2 实现过程【3518a、3518e】【3531】【3521】drivers/mmc/himciv100_3518.c drivers/mmc/himciv100_godnet.cdrivers/mmc/himciv100_godarm.cHi3520D、Hi3515A、Hi3535、Hi3536 不支持 SD 卡,故不支持从SD 卡升级功能。使能 USB OHCI编译开关在配置文件中增加 USB OHCI 驱动编译开关,相关:/*-* usb* -*/#define #define #define #de

19、fine#defineCONFIG_USB_OHCI CONFIG_CMD_USB CONFIG_USB_STORAGE CONFIG_LEGACY_USB_INIT_SEQCONFIG_USB_XHCI1111#define CONFIG_SYS_USB_XHCI_MAX_ROOT_PORTS2USB OHCI 驱动默认直接编译到U-boot 中,不受升级总开关 CONFIG_AUTO_UPDATE 控制。 代码移植下面以 Hi3536 代码为例,说明 USB OHCI 和 USB XHCI 驱动模块相关的代码路径红色部分为新增文件:drivers/usb/host/hiusb/Makefi

20、le drivers/usb/host/hiusb/hiusb-ohci.c drivers/usb/host/hiusb/hiusb-ohci.h drivers/usb/host/hiusb/hiusb-3536.c drivers/usb/host/hiusb/hiusb-xhci-3536.c drivers/usb/host/hiusb/xhci.c drivers/usb/host/hiusb/xhci.h drivers/usb/host/hiusb/xhci-mem.cdrivers/usb/host/hiusb/xhci-ring.c其他对应代码:drivers/usb/ho

21、st/hiusb/hiusb-3520d.cdrivers/usb/host/hiusb/hiusb-godarm.c drivers/usb/host/hiusb/hiusb-godnet.c【3520a、3520d、3515a】【3521】【3531】7U-boot 下自动升级功能设计说明书2 实现过程【3518a、3518c】【3535】【3516A】drivers/usb/host/hiusb/hiusb-3518.c drivers/usb/host/hiusb/hiusb-3535.cdrivers/usb/host/hiusb/hiusb-3516a.c2.2.4 手动升级验证移

22、植的 MMC 驱动完成“2.2.1 FAT 文件系统支持”和“2.2.2 MMC 驱动移植”后,编译生成的 U-boot 支持 mmcinfo mmc 两个操作 SD 卡的相关命令。同理完成“2.2.1 FAT 文件系统支持”和“2.2.3 使能 USB OHCI”后可以进行从 U 盘升级以验证所移植的 USB OHCI 驱动是否正确。 从 SD 卡中手动升级系统步骤下面以升级内核为例,列举从 SD 卡手动升级系统流程,其他模块升级只需要的升级包到内存,烧写到 Flash 上的相应的位置即可。相应烧写移植完 MMC 驱动的 uboot 版本或者直接从内存中启动此 uboot格式化成 FAT32

23、 并存放有升级镜像的 SD 卡,升级包制作参见U-boot 下 U盘 SD 卡自动升级使用手册和移植说明.doc在 U-boot 下键入 mmcinfo 命令,获取 SD 卡信息,初始化 SD 卡键入 fs mmc 0 命令,查看 SD 卡中第一个分区的升级镜像键入 foad mmc 0 0 x82000000 kernel 将 kernel 镜像到内存 0 x82000000 处sf probe 0;sf erase 100000 400000;sf write 0 x82000000 100000 400000;将内核烧写到 SPI【烧写位置可以自行决定】或者直接 bootm 0 x820

24、00000 启动新内核同样的方法烧写 u-boot 和 rootfs根据烧写的位置,设置环境变量,保存启动系统,查看内核或者其他升级模块启动时打印的编译时间可验证相应模块是否升级成功 详细操作启动移植好 MMC 驱动的 U-boot插上存放有升级包的 FAT 格式 SD 卡键入 mmcinfo 命令若 MMC 驱动移植成功可以看到类似如下的打印信息:hisilicon # mmcinfo Device: HIMCI_V100 Manufacturer ID: 3OEM: 5344 Name: SD01GTran Speed: 25000000Rd Block Len: 512SD ver2.0

25、High Capacity: NoCapacity: 10158080008U-boot 下自动升级功能设计说明书2实现过程Bus Width: 4-bit键入 fs mmc 0 命令,查看 SD 卡中升级镜像hisilicon # fs mmc 029024122202363949568kernel u-bootrootfs键入 foad mmc 0 0 x82000000 kernel,将 kernel 镜像到内存hisilicon # foad mmc 0 0 x82000000 kernelreading kernel 2902412 bytes read键入 bootm 0 x820

26、00000 直接从内存启动新内核hisilicon # bootm 0 x82000000# Booting kernel from Legacy Image at 82000000 .Image Name: Image Type:Data Size:Linux-3.4.35ARM Linux Kernel Image ( 2902348 Bytes = 2.8 MiBpressed)Load Address: 80008000Entry Po: 80008000Loading Kernel Image . OKOKStarting kernel .若出现类似以上启动内核的打印,则说明从 SD

27、 卡中移植成功。的数据正确,MMC 驱动手动升级验证移植的 USB OHCI 驱动从 U 盘中手动升级系统步骤烧写移植好 usb 驱动的 uboot 版本或者直接从内存启动此 uboot格式化成 FAT32 存放有升级镜像的 U 盘,升级包制作参见U-boot 下 U 盘SD 卡自动升级使用手册和移植说明.doc键入 usb start 命令,初始化 USB设备键入 fs usb 0 命令,查看 U 盘中的升级镜像键入 foad mmc 0 0 x42000000 kernel,将 kernel 镜像到内存sf probe 0;sf erase 100000 600000;sf write 0

28、 x42000000 100000 600000;将内核烧写到 SPI(烧写位置可以自行决定)或者直接 bootm 0 x42000000 启动新内核同样的方法烧写 u-boot 和 rootfs根据烧写的位置,设置环境变量,保存启动系统,查看内核或者其他升级模块启动时打印的编译时间可验证相应模块是否升级成功9U-boot 下自动升级功能设计说明书2 实现过程 详细操作启动移植好 USB OHCI 驱动的 U-boot插上存放有升级包的 FAT 格式 U 盘键入 usb start 命令若 MMC 驱动移植成功可以看到类似如下的打印信息:hisilicon # usb start(Re)sta

29、rt USB.USB:scanning bus for devi. 2 USB Devi) foundscanning bus for storage devi. usb_stor_get_info-1406,blksz:5121 Storage Devi) founds usb 0 命令,查看 SD 卡中升级镜像键入 fhisilicon # fs usb 029024122202363949568kernel u-bootrootfs3 file(s), 0 dir(s)键入 foad usb 0 0 x42000000 kernel,将 kernel 镜像到内存hisilicon # f

30、oad usb 0 0 x42000000 kernel reading kernel2902412 bytes read键入 bootm 0 x42000000 直接从内存启动新内核hisilicon # bootm 0 x42000000# Booting kernel from Legacy Image at 42000000 .Image Name: Image Type:Data Size:Linux-3.10.0_hi3536ARM Linux Kernel Image ( 3941184 Bytes = 3.8 MiBpressed)Load Address: 40008000E

31、ntry Po: 40008000Loading Kernel Image . OKOKStarting kernel .若出现类似以上启动内核的打印,则说明从 SD 卡中移植成功。的数据正确,MMC 驱动2.2.6 增加自动升级以下内容以 Hi3536 为样例,增加自动升级Hi3536 替换成相应路径即可。函数调用。其他只需要将在文件 board/hi3536/board.c 中增加自动升级计见 3 详细设计。,红色为修改部分,自动升级详细设10U-boot 下自动升级功能设计说明书2实现过程misc_init_r(void)#ifdef CONFIG_RANDOM_Erandom_init

32、_r();#endifsetenv(verify,DDRn);#ifdef CONFIG_AUTO_UPDATEexterndo_auto_update(void);#ifdef CFG_MMU_HANDLEOK dcache_stop();#endifdo_auto_update();/U-boot启动后自动升级 #ifdef CFG_MMU_HANDLEOKdcache_start();#endif函数调用#endif /* CONFIG_AUTO_UPDATE*/return0;11U-boot 下自动升级功能设计说明书3 详细设计3详细设计Auto Update 详细设计数据描述简单数

33、据描述驱动部分只做了基本功能的移植,所以下面实例中所涉及的文件只包括 boot、kernel 和rootfsa.在开始介绍 auto update 的实现之前需要了解 include/image.h 中的如下定义:/*Image TypesStandalone Programs are directly runnablehe environmentprovided by U-Boot; it is expectedt (if they behavewell) you can continue to work in U-Boot after return from the Standalone

34、Program.OS Kernel Images are usually images of some Embedded OS whichwill take over control comple will install their own set ofdrivers, set up the MMU, etc.y. Usually these programs exception handlers, device- this means,t you cannotexpect to re-enter U-Boot except by resetting the CPU. RAMDisk Ima

35、ges are more or less just data blocks, and theirparameters (address, size) are passed to an OS kernelt is being started.Multi-File Images contain several images, typically an OS(Linux) kernel image and RAMDisks. This constructto boot over the networkone or more data images likeis useful for instance

36、 when you want using BOOTP etc., where the bootservrovides just a single image file, but you want to getfor instance an OS kernel and a RAMDisk image.海思专有和信息12市海思半导体U-boot 下自动升级功能设计说明书3 详细设计*/Multi-File Images start wilist of image sizes, eachimage size (in bytes)byte order. This list Immediay after

37、 thespecified by an u32_t in networkis terminated by an (u32_t)0. terminating 0 follow the images, one byone, all aligned on ua multiple of 4 bytes -32_t boundaries (size rounded up toexcept for the last file).Firmware Images are binary images containing firmware (likeU-Boot or FPGA images)flash mem

38、ory.which usually will be programmed toScript files ared sequent will be executed byU-Bootsuseful whendreter; this feature is espelly(hush)you configure U-Boot to use a real sasdreter (= SScripts).#define #define #define #define #define #define #define #define#defineIH_TYPE_INVALID0 IH_TYPE_STANDALO

39、NE IH_TYPE_KERNEL 2 IH_TYPE_RAMDISK3 IH_TYPE_MULTI 4 IH_TYPE_FIRMWARE IH_TYPE_SCRIPT 6 IH_TYPE_FILESYSTEMIH_TYPE_FLATDT 8/* 1/*/*/* 5/* 7/*Invalid Image*/* Standalone Program*/OS Kernel Image RAMDisk Image Multi-File Image */* Firmware ImageScript file */*/*/*/* Filesystem Image (anytype) */Binary F

40、lat Device Tree Blob*/各种 Image Type 在制作镜像时通过 mkimage 工具的-T参数去指定,常用的几个径向的对应关系分别为:b.需要更新的镜像的索引关系及总数通过如下代码定义/* index of each filehe following arrays */#define #define #define/* max.#defineIDX_FIRMWARE 0IDX_KERNEL 1IDX_ROOTFS 2number of files which could AU_MAXFILES 3erest us */c.需要更新的镜像的名称及其所应关系13类别对应关

41、系u-boot.binIH_TYPE_FIRMWARE(对应 mkimage T firmware)kernelIH_TYPE_KERNEL(对应 mkimage T kernel)rootfsIH_TYPE_FILESYSTEM(对应 mkimage T filesystem)U-boot 下自动升级功能设计说明书3 详细设计#define #define #define/* poAU_FIRMWARE u-bootAU_KERNEL AU_ROOTFSers to filekernel rootfsnames */char *aufileAU_MAXFILES = AU_FIRMWARE,

42、AU_KERNEL, AU_ROOTFS;需要注意的是这里的文件名与 U 盘上的文件名一一对应,设备枚举出来之后auto update 程序会通过文件名去检索相关的镜像。d.各个镜像在 Flash 上的struct flash_layoutlong start; long end;位置/* layout of the FLASH. ST= start address, ND = end 0 x00 x7Faddress.*/#define #define #define #define #define#defineAU_FL_FIRMWARE_STAU_FL_FIRMWARE_NDAU_FL_

43、KERNEL_ST0 x100000AU_FL_KERNEL_ND0 x5FFAU_FL_ROOTFS_ST0 x600000AU_FL_ROOTFS_ND0 xbFF/* sizes of flash areas for each file */long ausizeAU_MAXFILES = (AU_FL_FIRMWARE_ND (AU_FL_KERNEL_ND + (AU_FL_ROOTFS_ND +;+ 1)1) -1) - AU_FL_FIRMWARE_ST, AU_FL_KERNEL_ST,AU_FL_ROOTFS_ST,/* array of flash areasstart a

44、nd end addresses */struct flash_layout aufl_layoutAU_MAXFILES = AU_FL_FIRMWARE_ST,AU_FL_FIRMWARE_ND, ,AU_FL_KERNEL_ST, AU_FL_KERNEL_ND, ,AU_FL_ROOTFS_ST, AU_FL_ROOTFS_ND, ,;e.要用到的内存的起始地址/* where to load fileso memory */#define LOAD_ADDR (unsigned char *)0 x82000000)/* the app is the largest image */

45、14U-boot 下自动升级功能设计说明书3 详细设计#define MAX_LOADSZ ausizeIDX_ROOTFS需明的是 U 盘上的镜像更新到 flash 上的步骤:步骤 1. 把 SD 卡/U 盘上的镜像通过文件系统 load 到内存上。步骤 2. 从内存写到 SPI flash 上。-结束因此需要这个内存起始地址。 校验信息每个升级所用的镜像的开头几个字节,都必须包含如下信息:(包括魔术字、crc 校验、文件类型、文件大小等等)#define#define typedefIH_IH_NMLEN0 x27051956 /*ImageNumber*/32 /* Image Name Length */struct image_header u u u u u u u u u u u u32_t32_t32_t32_t32_t32_t32_tih_;/* Image HeaderNumber*/ih_hcrc; ih_time; ih_size; ih_load;

温馨提示

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

评论

0/150

提交评论