在PPC上的移植_第1頁
在PPC上的移植_第2頁
在PPC上的移植_第3頁
在PPC上的移植_第4頁
在PPC上的移植_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、【摘要】本文以MPC8378處理器、Linux內(nèi)核及U-boot1.3.4為例,講述了如何在PowerPC架構(gòu)下使用FDT。首先介紹了引入FDT的背景,接著詳細(xì)介紹了FDT的組成及制作。最后介紹了U-boot及內(nèi)核如何支持FDT?!娟P(guān)鍵字】PowerPC,MPC8378,DTS,DTB,F(xiàn)DT,device node,property,compatible1    背景    22    設(shè)備樹的描述方式    22.1    root Node

2、    32.2    chosen    32.3    cpus Node    32.4    System Memory    52.5    Devices    52.5.1    Compatible屬性    62.5.2  

3、0; Addressing    62.6    Interrupts and Interrupt Controllers    73    如何制作設(shè)備樹映像    83.1    輸入    83.2    輸出    93.3    命令格式    94 

4、;   設(shè)備樹的傳遞途徑    94.1    U-boot對FDT的支持    104.2    如何配置FDT    104.3    如何傳遞設(shè)備樹    105    內(nèi)核如何解析設(shè)備樹    126    設(shè)備樹對驅(qū)動設(shè)計(jì)產(chǎn)生的影響   

5、151    背景通常情況下,桌面機(jī)和服務(wù)器可以兼容大部分軟件。最好的結(jié)果就是當(dāng)添加新硬件時(shí),無需重新編譯Linux內(nèi)核。標(biāo)準(zhǔn)的固件接口可以保證bootloader將正確的參數(shù)傳遞給內(nèi)核。PC可以采用bios,PowerPC and Sparc采用Open-Firmware接口。但是對于嵌入式系統(tǒng),軟件差別太大,內(nèi)核本身也是定制的,bootloader只需要傳遞很少的參數(shù),因?yàn)榇蟛糠中畔⒍际怯簿幋a在系統(tǒng)的配置中的。這樣同一個(gè)內(nèi)核映像很難同時(shí)使用在多個(gè)不同的平臺上。早期的PowerPC平臺采用特定的數(shù)據(jù)結(jié)構(gòu)bd_info來傳遞參數(shù),其定義在include/asm-p

6、pc/ppcboot.h,#define來定義特定平臺的數(shù)據(jù)域,但并沒有什么信息來說明當(dāng)前采用的是那個(gè)bd_info結(jié)構(gòu),所以必須保證在內(nèi)核和bootloader中同時(shí)更新,以便保持一致。合并32-bit (arch/ppc) 和 64-bit (arch/ppc64) PowerPC的同時(shí),決定重新整理固件接口,建立新的目錄arch/powerpc,這里所有的平臺必須向內(nèi)核提供Open Firmware風(fēng)格的設(shè)備樹,以便內(nèi)核啟動時(shí)可以獲得當(dāng)前平臺的硬件配置。2    設(shè)備樹的描述方式簡單的說設(shè)備書是一種描述硬件配置信息的數(shù)據(jù)結(jié)構(gòu),包括CPU,內(nèi)存,總線及相關(guān)外設(shè)

7、。內(nèi)核啟動時(shí)可以解析這些信息,以此決定如何配置內(nèi)核及加載那些驅(qū)動。該數(shù)據(jù)結(jié)構(gòu)有一個(gè)單一的根節(jié)點(diǎn)“/”。每個(gè)節(jié)點(diǎn)有個(gè)名字并可以包含多個(gè)子節(jié)點(diǎn)。數(shù)據(jù)的格式遵循IEEE standard 1275。Device tree source (.dts)采用一種易編輯的文本方式來表達(dá)設(shè)備樹,device tree compiler tool (dtc)將.dts轉(zhuǎn)換成binary device tree blob(.dtb)。設(shè)備樹并不是控制系統(tǒng)設(shè)備的唯一方法,比如內(nèi)核對USB和PCI已經(jīng)有非常方便的檢測機(jī)制。/ / the root node    an-empty-pro

8、perty;        a-child-node     array-prop = <0x100 32>    string-prop = "hello, world"    ;        another-child-node     binary-prop = 0102CAFE;   

9、string-list = "yes","no","maybe"    ;Figure 1: Simple example of the .dts file format2.1    root Node設(shè)備樹的起點(diǎn)是根節(jié)點(diǎn),Model和compatible屬性指明了當(dāng)前平臺的名字,格式為<mfg>,<board>:Mfg是vendor,board是板子模型Compatible屬性不一定非得要,但是當(dāng)兩個(gè)系統(tǒng)在硬件配置上基本一致時(shí),這個(gè)參數(shù)可以用于辨別當(dāng)

10、前系統(tǒng)。/     model = "fsl,mpc8377rdb"    compatible = "fsl,mpc8377rdb"    #address-cells = <1>    #size-cells = <1>    aliases         ethernet0 = &enet0; &#

11、160;      ethernet1 = &enet1;        serial0 = &serial0;        serial1 = &serial1;        /pci0 = &pci0;    ;    / Child nodes go here;Figure 3

12、: Example system root node2.2    chosen此節(jié)點(diǎn)并不真正代表設(shè)備節(jié)點(diǎn),而是一些虛擬的由bootloader傳遞給內(nèi)核的一些參數(shù),包括bootargs(cmdline)和initrd等。一般由bootloader在啟動內(nèi)核時(shí)添加此節(jié)點(diǎn)。2.3    cpus Nodecpus節(jié)點(diǎn)是root節(jié)點(diǎn)的子節(jié)點(diǎn),對于多核CPU系統(tǒng),每個(gè)CPU有一個(gè)子節(jié)點(diǎn)。Cpus節(jié)點(diǎn)并不需要特別的特性,但是通常習(xí)慣指定#address-cells = <1>和#size-cells = <0>,這指定了

13、各個(gè)CPU節(jié)點(diǎn)的reg屬性的格式,其用于編碼物理CPU號。CPU節(jié)點(diǎn)的格式為cpux,model屬性描述CPU類型,其他的是時(shí)鐘頻率及cache 相關(guān)屬性。cpus     #cpus = <1>    #address-cells = <1>    #size-cells = <0>    PowerPC,83770         device_type = "cpu

14、"        model = "PowerPC, 8377"        reg = <0x0>        d-cache-line-size = <32>        i-cache-line-size = <32>      &

15、#160; d-cache-size = <32768>        i-cache-size = <32768>        timebase-frequency = <0>        bus-frequency = <0>        clock-frequency = <0>

16、0;   ;Figure 4: cpus nodecpus     #cpus = <2>    #address-cells = <1>    #size-cells = <0>    PowerPC,86410         device_type = "cpu"       

17、 reg = <0>        d-cache-line-size = <20>    / 32 bytes        i-cache-line-size = <20>    / 32 bytes        d-cache-size = <8000>     

18、   / L1, 32K        i-cache-size = <8000>        / L1, 32K        timebase-frequency = <0>    / 33 MHz, from uboot        bus-frequency = <0

19、>        / From uboot        clock-frequency = <0>        / From uboot        32-bit;        linux,boot-cpu;    ;  &

20、#160; PowerPC,86411         device_type = "cpu"        reg = <1>        d-cache-line-size = <20>    / 32 bytes        i-cache-line-size = <2

21、0>    / 32 bytes        d-cache-size = <8000>        / L1, 32K        i-cache-size = <8000>        / L1, 32K        time

22、base-frequency = <0>    / 33 MHz, from uboot        bus-frequency = <0>        / From uboot        clock-frequency = <0>        / From uboot &

23、#160;      32-bit;    ;2.4    System Memory描述系統(tǒng)內(nèi)存的節(jié)點(diǎn)成為memory node,其為root節(jié)點(diǎn)的子節(jié)點(diǎn),通常只用一個(gè)memory節(jié)點(diǎn)描述系統(tǒng)所有的內(nèi)存范圍,reg屬性用來定義當(dāng)前可用的各個(gè)memory范圍。memory     device_type = "memory"    reg = <0x00000000 0x40000000> &#

24、160;  / 256MB at 0;Figure 5: Memory node2.5    Devices一系列節(jié)點(diǎn)用于描述系統(tǒng)總線及設(shè)備,每個(gè)總線及設(shè)備在設(shè)備樹種都有自己的節(jié)點(diǎn)。處理器的local bus通常直接作為根節(jié)點(diǎn)的子節(jié)點(diǎn),附著在local bus上的Devices and bridges將作為其子節(jié)點(diǎn)。下圖顯示的PLB bus上的設(shè)備包括interrupt controller, an Ethernet device,及 OPB bridge,OPB總線上有serial devices and a Flash deviceplb  

25、;   compatible = "simple-bus"    #address-cells = <1>    #size-cells = <1>    ranges;    UIC0: interrupt-controller     compatible = "ibm,uic-440gp",    "ibm,uic&q

26、uot;    interrupt-controller;    #interrupt-cells = <2>    ;    ethernet20000     compatible = "ibm,emac-440gp"    reg = <0x20000 0x70>    interrupt-parent = <&UIC0&g

27、t;    interrupts = <0 4>    ;    opb         compatible = "simple-bus"        #address-cells = <1>        #size-cells = <1>  &#

28、160;     ranges = <0x0 0xe0000000        0x20000000>        serial0         compatible = "ns16550"        reg = <0x0 0x10>    &#

29、160;   interrupt-parent = <&UIC0>        interrupts = <1 4>        ;        serial10000         compatible = "ns16550"     &

30、#160;  reg = <0x10000 0x10>        interrupt-parent = <&UIC0>        interrupts = <2 4>        ;        flash1ff00000       

31、0; compatible = "amd,s29gl256n",        "cfi-flash"        reg = <0x1ff00000 0x100000>        ;    ;Figure 6: Simple System Device Hierarchy2.5.1    Compa

32、tible屬性幾乎每個(gè)設(shè)備都有compatible屬性,OS利用此關(guān)鍵字來確定node所描述的設(shè)備,通常compatible字符串的格式如下:<manufacturer>,<part-num>對于每個(gè)特定的compatible值,需要為該設(shè)備定義一個(gè)device tree binding。有時(shí)候compatible是一系列字符串,如果某個(gè)設(shè)備在寄存器級別和某個(gè)舊設(shè)備兼容,則可以同時(shí)指定多個(gè)字串,這樣OS就知道這兩個(gè)驅(qū)動是兼容的。通常該設(shè)備的compatible字串在前,然后是兼容的舊設(shè)備的字串。2.5.2    Addressing設(shè)備地址

33、由reg屬性指定,其為一系列cell單元。格式如下:reg = <base1 size1 base2 size2 .>每個(gè)reg的實(shí)際大小有父節(jié)點(diǎn)的#address-cells and #size-cells屬性決定,#address-cells是用來指定base address基地址的cells個(gè)數(shù),#size-cells是用來指定region size的cells個(gè)數(shù)。Reg所使用的cells個(gè)數(shù)必須是(#address-cells + #size-cells)的倍數(shù)。Reg定義的是bus address,而非system address,bus address是設(shè)備依賴的總線

34、上的相對地址,或者更專業(yè)的說bus address是相對于父節(jié)點(diǎn)的。Ranges屬性可以將bus address映射到父節(jié)點(diǎn)一級,格式如下:ranges = <addr1 parent1 size1 .>addr為總線地址,寬度為#address-cells,parent是父節(jié)點(diǎn)總線上的地址,寬度為父節(jié)點(diǎn)的#address-cells,size寬度為父節(jié)點(diǎn)的#size-cells。但是當(dāng)總線地址和父節(jié)點(diǎn)地址映射關(guān)系為1:1時(shí),可以簡化映射關(guān)系:ranges;在本示例中,F(xiàn)lash在OPB總線上的地址為0x1ff00000,但OPB總線中,PLB bus address 0xe000

35、0000 映射到了0x0000000 on the OPB bus,因此Flash設(shè)備的地址為0xfff00000。2.6    Interrupts and Interrupt Controllers設(shè)備樹的自然布局很方便描述設(shè)備間的簡單關(guān)系,但是中斷系統(tǒng)是個(gè)比較復(fù)雜的例子??梢詫erial device描述為OPB總線的子節(jié)點(diǎn),但也可以說其是interrupt controller設(shè)備的子節(jié)點(diǎn),那么如何描述呢?目前的規(guī)范是,自然樹的結(jié)構(gòu)適用于描述那些尋址和控制設(shè)備的主要接口,次要連接可以通過phandle屬性來描述相互之間的關(guān)系,其為節(jié)點(diǎn)中的一個(gè)指針,指向另

36、一個(gè)節(jié)點(diǎn)。對于中斷連接,設(shè)備節(jié)點(diǎn)利用interrupt-parent and interrupts屬性來描述到interrupt controller的連接。interrupt-parent是指向描述interrupt controller節(jié)點(diǎn)的指針,interrupts是interrupt controller可以觸發(fā)的一系列中斷信號。Interrupt controller節(jié)點(diǎn)必須定義空屬性interrupt-controller,同時(shí)定義#interrupt-cells,確定幾個(gè)cells描述一個(gè)中斷信號。由于Interrupt controller節(jié)點(diǎn)在設(shè)備樹種被其他節(jié)點(diǎn)鏈接,因此必須

37、定義屬性linux,phandle = <xx>。對于大部分SOC系統(tǒng),通常只有一個(gè)interrupt controller,,但是多個(gè)interrupt controller之間可以級聯(lián)。interrupt controller和設(shè)備之間的關(guān)系就形成了interrupt tree。對于serial device node,interrupt-parent屬性定義了其在中斷樹中與其父節(jié)點(diǎn)的關(guān)系。Interrupts屬性定義了特定的中斷標(biāo)識,其格式取決于中斷樹中父節(jié)點(diǎn)的#interrupt-cells,通常#interrupt-cells為2,這樣第一個(gè)值表示interrupt co

38、ntroller中的硬件中斷編號,第二個(gè)值表示中斷觸發(fā)方式:電平觸發(fā)或者邊沿觸發(fā)。/* IPIC * interrupts cell = <intr #, sense> * sense values match linux IORESOURCE_IRQ_* defines: * sense = 8: Level, low assertion * sense = 2: Edge, high-to-low change */pic700     linux,phandle = <700>

39、0;   interrupt-controller;    #address-cells = <0>    #interrupt-cells = <2>    reg = <700 100>    built-in;    device_type = "ipic"serial4500     device_type = "seria

40、l"    compatible = "ns16550"    reg = <4500 100>    clock-frequency = <0>    interrupts = <9 8>    interrupt-parent = <700>3    如何制作設(shè)備樹映像Device tree compiler(dtc)負(fù)責(zé)將文本格式的設(shè)

41、備樹轉(zhuǎn)換成OS可以識別的格式。3.1    輸入Dtc接受三種輸入格式:源文件,即device tree source;Blob (dtb),flattened tree format,主要用于檢查現(xiàn)有的DTB映像;FS文件系統(tǒng),/proc/device-tree下面的文件樹目錄,主要用于從當(dāng)前運(yùn)行的內(nèi)核中獲得設(shè)備樹映像。-sh-3.1# ls -al /proc/device-treels -l /proc/device-tree/-r-r-r-    1 root     root 

42、;           4 Jan  1 00:05 #address-cells-r-r-r-    1 root     root            4 Jan  1 00:05 #size-cellsdr-xr-xr-x    2 root 

43、0;   root            0 Jan  1 00:05 aliasesdr-xr-xr-x    2 root     root            0 Jan  1 00:05 chosen-r-r-r-    1 ro

44、ot     root           15 Jan  1 00:05 compatibledr-xr-xr-x    3 root     root            0 Jan  1 00:05 cpusdr-xr-xr-x  

45、 15 root     root            0 Jan  1 00:05 immre0000000dr-xr-xr-x    4 root     root            0 Jan  1 00:05 localbuse0005

46、000dr-xr-xr-x    2 root     root            0 Jan  1 00:05 memory-r-r-r-    1 root     root            1 Jan 

47、1 00:05 namedr-xr-xr-x    2 root     root            0 Jan  1 00:05 pcie000a000dr-xr-xr-x    2 root     root          &#

48、160; 0 Jan  1 00:05 redbox-fpga-card0F0000000dr-xr-xr-x    2 root     root            0 Jan  1 00:05 redbox-fpga-card1F0000000dr-xr-xr-x    2 root     root 

49、0;          0 Jan  1 00:05 redbox-fpga-dbstateF0000000dr-xr-xr-x    2 root     root            0 Jan  1 00:05 redbox-fpga-miscF0000000ls -l /proc/device-tr

50、ee/immr/e0000000/-r-r-r-    1 root     root            4 Jan  1 00:06 #address-cells-r-r-r-    1 root     root          

51、  4 Jan  1 00:06 #size-cells-r-r-r-    1 root     root            4 Jan  1 00:06 bus-frequency-r-r-r-    1 root     root      

52、0;    11 Jan  1 00:06 compatible-r-r-r-    1 root     root            4 Jan  1 00:06 device_typedr-xr-xr-x    2 root     root    &

53、#160;       0 Jan  1 00:06 ethernet24000dr-xr-xr-x    2 root     root            0 Jan  1 00:06 ethernet25000dr-xr-xr-x    2 root     r

54、oot            0 Jan  1 00:06 i2c3000dr-xr-xr-x    3 root     root            0 Jan  1 00:06 i2c3100dr-xr-xr-x    2 root 

55、0;   root            0 Jan  1 00:06 interrupt-controller700dr-xr-xr-x    3 root     root            0 Jan  1 00:06 mdio24520-r-r-r-

56、0;   1 root     root            5 Jan  1 00:06 namedr-xr-xr-x    2 root     root            0 Jan  1 00:06 powerb00

57、-r-r-r-    1 root     root           12 Jan  1 00:06 ranges-r-r-r-    1 root     root            8 Jan  1 00:06 reg

58、dr-xr-xr-x    2 root     root            0 Jan  1 00:06 serial4500dr-xr-xr-x    2 root     root            0 Jan

59、60; 1 00:06 serial4600dr-xr-xr-x    2 root     root            0 Jan  1 00:06 spi7000dr-xr-xr-x    2 root     root         &#

60、160;  0 Jan  1 00:06 timer500dr-xr-xr-x    2 root     root            0 Jan  1 00:06 usb23000dr-xr-xr-x    2 root     root      &#

61、160;     0 Jan  1 00:06 wdt2003.2    輸出Blob (dtb),主要用于從DTS獲得設(shè)備樹映像;source (dts), 當(dāng)輸入?yún)?shù)為Blob (dtb),可以“反匯編”出設(shè)備樹源文件;assembler source (asm),其最終可以編譯成.O文件,可以鏈接到bootloader中或者frrmware image。3.3    命令格式dtc -I <input -format > -O <output -format &

62、gt; -o output-filename -V output_version input_filenamedtc -I dts -O dtb -S 0x3000 -o obj_name.dtb source_name.dts-S 指定的是生成的dtb文件的大小,需要適當(dāng)?shù)財(cái)U(kuò)大以供u-boot 創(chuàng)建/choose節(jié)點(diǎn)時(shí)使用4    設(shè)備樹的傳遞途徑對于Open Firmware (OF)系統(tǒng),prom_init.c中的代碼負(fù)責(zé)解析設(shè)備樹,并將其轉(zhuǎn)化為blob印象。對于無Open Firmware (OF)的系統(tǒng),內(nèi)核可以直接從入口啟動,并接受外部傳遞的flatt

63、ened device tree參數(shù)。對于嵌入式系統(tǒng),此參數(shù)由bootloader提供,或者封裝過的zImage映像提供。4.1    U-boot對FDT的支持U-boot為了支持FDT,專門添加了新的代碼,如下:/Libfdt目錄fdt.hlibfdt.hfdt_support.hfdt_support.c4.2    如何配置FDT通常在板子配置頭文件定義相關(guān)宏,以支持FDT/* Pass open firmware flat tree */#define CONFIG_OF_LIBFDT    1

64、#define CONFIG_OF_BOARD_SETUP    1#define CONFIG_OF_STDOUT_VIA_ALIAS 1CONFIG_OF_BOARD_SETUP宏表示會對設(shè)備樹中的部分參數(shù)進(jìn)行調(diào)整,主要是timebase-frequency,bus-frequency,clock-frequency等參數(shù),在設(shè)備樹配置文件中,這些參數(shù)可能為0,即采用U-boot中的參數(shù)。4.3    如何傳遞設(shè)備樹Lib_ppc/board.c中do_bootm_linux負(fù)責(zé)啟動Linux內(nèi)核。#if defined(CONF

65、IG_OF_LIBFDT)#include <fdt.h>#include <libfdt.h>#include <fdt_support.h>static void fdt_error (const char *msg);static int boot_get_fdt (cmd_tbl_t *cmdtp, int flag, int argc, char *argv,        bootm_headers_t *images, char *of_flat_tree, ulong *of_siz

66、e);static int boot_relocate_fdt (struct lmb *lmb, ulong bootmap_base,        cmd_tbl_t *cmdtp, int flag, int argc, char *argv,        char *of_flat_tree, ulong *of_size);#endif相關(guān)流程如下: 在該流程中,主要從啟動參數(shù)中找出設(shè)備樹,然后在設(shè)備樹中添加chosen 節(jié)點(diǎn), 并將initrd 的地

67、址地址,結(jié)束地址,bootargs,cmd_line 等參數(shù)保存到chosen 節(jié)點(diǎn)中,最后根據(jù)是否支持扁平設(shè)備樹選擇不同的內(nèi)核啟動方式。#if defined(CONFIG_OF_LIBFDT)    if (of_flat_tree)     /* device tree; boot new style */        /*         * Linux Kernel Parameters (pa

68、ssing device tree):         *   r3: pointer to the fdt, followed by the board info data         *   r4: physical pointer to the kernel itself         *   r5: NULL

69、60;        *   r6: NULL         *   r7: NULL         */        debug ("   Booting using OF flat tree./n");     

70、;   (*kernel) (bd_t *)of_flat_tree, (ulong)kernel, 0, 0, 0);        /* does not return */    else#endif            /*         * Linux Kernel Parameters (passing boar

71、d info data):         *   r3: ptr to board info data         *   r4: initrd_start or 0 if no initrd         *   r5: initrd_end - unused if r4 is 0   

72、     *   r6: Start of command line string         *   r7: End   of command line string         */        debug ("   Booting using board

73、 info./n");        (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);        /* does not return */    如果未定義CONFIG_OF_LIBFDT或者當(dāng)前bootm命令沒有FDT參數(shù)時(shí)則采用傳統(tǒng)的方式啟動內(nèi)核。啟動命令格式如下:Bootm kernel_addr  ramdisk_addr/- 

74、 fdt_addr當(dāng)不采用ramdisk時(shí),第二個(gè)參數(shù)為“-”5    內(nèi)核如何解析設(shè)備樹1)首先將從u-boot 傳遞過來的映像基地址和dtb 文件映像基地址保存通用寄存器r30,r31;2)通過調(diào)用machine_init()、early_init_devtree()函數(shù)來獲取內(nèi)核前期初始化所需的bootargs,cmd_line等系統(tǒng)引導(dǎo)參數(shù);3)調(diào)用start_kernel()、setup_arch()、unflatten_device_tree()函數(shù)來解析dtb 文件,構(gòu)建一個(gè)由device_node 結(jié)構(gòu)連接而成的單項(xiàng)鏈表,并使用全局變量allnod

75、es 指針來保存這個(gè)鏈表的頭指針;4)內(nèi)核調(diào)用OF 提供的API 函數(shù)獲取allnodes鏈表信息來初始化內(nèi)核其他子系統(tǒng)、設(shè)備等。 Head_32.S/* * This is where the main kernel code starts. */start_here:。/* * Do early platform-specific initialization, * and set up the MMU. */    mr    r3,r31  

76、60; mr    r4,r30    bl    machine_init/* * Find out what kind of machine we're on and save any data we need * from the early boot process (devtree is copied on pmac by prom_init(). * This is called very early on the boot process, after

77、a minimal * MMU environment has been set up but before MMU_init is called. */void _init machine_init(unsigned long dt_ptr, unsigned long phys)    /* If btext is enabled, we might have a BAT setup for early display,     * thus we do enable some very basic

78、udbg output     */#ifdef CONFIG_BOOTX_TEXT    udbg_putc = btext_drawchar;#endif    /* Do some early initialization based on the flat device tree */    early_init_devtree(_va(dt_ptr);/* Warning, IO base is not yet inited */void _init setup_arch(char *

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論